+
+ {% for msg in messages %}
+
+ {% if msg.tags == 'error' %}
+
+
+ {% else %}
+
+
+ {% endif %}
+ {{ msg }}
+
+
+ {% endfor %}
+
+
{% include 'components/_product_metrics.html' %}
@@ -90,7 +123,7 @@
-
+
@@ -103,3 +136,8 @@
{% include 'components/_pagination.html' %}
{% endblock %}
+
+{% block scripts %}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/products/views.py b/products/views.py
index 98a7d33..50d64ab 100644
--- a/products/views.py
+++ b/products/views.py
@@ -4,6 +4,8 @@
from brands.models import Brand
from categories.models import Category
from . import models, forms
+from django.shortcuts import get_object_or_404, redirect
+from django.contrib import messages
class ProductListView(ListView):
@@ -59,6 +61,8 @@ class ProductUpdateView(UpdateView):
class ProductDeleteView(DeleteView):
- model = models.Product
- template_name = 'product_delete.html'
- success_url = reverse_lazy('product_list')
+ def get(self, request, pk):
+ object = get_object_or_404(models.Product, pk=pk)
+ object.delete()
+ messages.success(request, 'Produto Deletado com Sucesso!')
+ return redirect('product_list')
diff --git a/static/js/deleteConfirm.js b/static/js/deleteConfirm.js
new file mode 100644
index 0000000..afef196
--- /dev/null
+++ b/static/js/deleteConfirm.js
@@ -0,0 +1,40 @@
+function DeleteConfirm(pk) {
+ const swalWithBootstrapButtons = Swal.mixin({
+ customClass: {
+ confirmButton: 'btn btn-danger',
+ cancelButton: 'btn btn-success',
+ },
+ buttonsStyling: true
+ })
+
+ swalWithBootstrapButtons.fire({
+ title: 'Você tem certeza?',
+ text: "Você não poderá reverter isso!",
+ icon: 'warning',
+ showCancelButton: true,
+ confirmButtonText: '
Deletar',
+ cancelButtonText: '
Cancelar',
+ reverseButtons: true
+ }).then((result) => {
+ if (result.isConfirmed) {
+ swalWithBootstrapButtons.fire(
+ 'Deletado!',
+ 'REGISTRO DELETADO COM SUCESSO!',
+ 'success'
+ )
+ var url = '../' + parseInt(pk) + '/delete/';
+
+ setTimeout(function () {
+ location.href = url;
+ }, 800);
+ } else if (
+ result.dismiss === Swal.DismissReason.cancel
+ ) {
+ swalWithBootstrapButtons.fire(
+ 'Cancelado!',
+ 'O REGISTRO
NÃO FOI DELETADO!',
+ 'info'
+ )
+ }
+ });
+}
\ No newline at end of file
diff --git a/static/js/themeMode.js b/static/js/themeMode.js
new file mode 100644
index 0000000..1c993d2
--- /dev/null
+++ b/static/js/themeMode.js
@@ -0,0 +1,30 @@
+document.addEventListener('DOMContentLoaded', function() {
+ const defaultTheme = 'light';
+ const savedTheme = localStorage.getItem('themeMode');
+ const checkDarkMode = document.getElementById('checkDarkMode');
+
+ applyTheme(savedTheme ? savedTheme : defaultTheme);
+
+ if (savedTheme === 'dark' || defaultTheme === 'dark') {
+ checkDarkMode.checked = true;
+ } else {
+ checkDarkMode.checked = false;
+ }
+
+ checkDarkMode.addEventListener('change', function() {
+ const checked = this.checked;
+ const themeMode = checked ? 'dark' : 'light';
+ applyTheme(themeMode);
+ saveThemeMode(checked);
+ });
+});
+
+function applyTheme(themeMode) {
+ const html = document.querySelector('html');
+ html.dataset.bsTheme = themeMode;
+}
+
+function saveThemeMode(checkedTheme) {
+ const themeMode = checkedTheme ? 'dark' : 'light';
+ localStorage.setItem('themeMode', themeMode);
+}
\ No newline at end of file