diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index cd6f855..5d4241f 100644 Binary files a/core/__pycache__/admin.cpython-311.pyc and b/core/__pycache__/admin.cpython-311.pyc differ diff --git a/core/__pycache__/forms.cpython-311.pyc b/core/__pycache__/forms.cpython-311.pyc new file mode 100644 index 0000000..f71ecf1 Binary files /dev/null and b/core/__pycache__/forms.cpython-311.pyc differ diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 9aa598b..17baa27 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 1f807fa..19644f1 100644 Binary files a/core/__pycache__/urls.cpython-311.pyc and b/core/__pycache__/urls.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 6867ddf..f08d56b 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/admin.py b/core/admin.py index 8c38f3f..332ca51 100644 --- a/core/admin.py +++ b/core/admin.py @@ -1,3 +1,24 @@ from django.contrib import admin +from .models import Product, Customer, Seller, Sale, SaleItem -# Register your models here. + +@admin.register(Product) +class ProductAdmin(admin.ModelAdmin): + list_display = ("name", "price", "stock_quantity") + +@admin.register(Customer) +class CustomerAdmin(admin.ModelAdmin): + list_display = ("name", "email", "phone") + +@admin.register(Seller) +class SellerAdmin(admin.ModelAdmin): + list_display = ("name", "email", "phone", "commission") + +class SaleItemInline(admin.TabularInline): + model = SaleItem + extra = 1 + +@admin.register(Sale) +class SaleAdmin(admin.ModelAdmin): + list_display = ("id", "customer", "sale_date", "total_amount") + inlines = [SaleItemInline] diff --git a/core/forms.py b/core/forms.py new file mode 100644 index 0000000..97e224b --- /dev/null +++ b/core/forms.py @@ -0,0 +1,36 @@ +from django import forms +from .models import Product, Customer, Seller, Sale, SaleItem + +class SellerForm(forms.ModelForm): + class Meta: + model = Seller + fields = '__all__' + +class SaleForm(forms.ModelForm): + class Meta: + model = Sale + fields = ['customer', 'seller'] + labels = { + 'customer': 'Cliente', + 'seller': 'Vendedor', + } + +class SaleItemForm(forms.ModelForm): + class Meta: + model = SaleItem + fields = ['product', 'quantity', 'lote'] + labels = { + 'product': 'Produto', + 'quantity': 'Quantidade', + 'lote': 'Lote', + } + +class ProductForm(forms.ModelForm): + class Meta: + model = Product + fields = '__all__' + +class CustomerForm(forms.ModelForm): + class Meta: + model = Customer + fields = '__all__' diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..abd8a3b --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,25 @@ +# Generated by Django 5.2.7 on 2025-12-23 14:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Product', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('description', models.TextField()), + ('price', models.DecimalField(decimal_places=2, max_digits=10)), + ('stock_quantity', models.PositiveIntegerField(default=0)), + ('image_url', models.URLField(blank=True, max_length=1024, null=True)), + ], + ), + ] diff --git a/core/migrations/0002_customer.py b/core/migrations/0002_customer.py new file mode 100644 index 0000000..dfb7f63 --- /dev/null +++ b/core/migrations/0002_customer.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.7 on 2025-12-23 14:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Customer', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('email', models.EmailField(max_length=254, unique=True)), + ('phone', models.CharField(blank=True, max_length=20, null=True)), + ('address', models.TextField(blank=True, null=True)), + ], + ), + ] diff --git a/core/migrations/0003_supplier.py b/core/migrations/0003_supplier.py new file mode 100644 index 0000000..eaf77f7 --- /dev/null +++ b/core/migrations/0003_supplier.py @@ -0,0 +1,25 @@ +# Generated by Django 5.2.7 on 2025-12-23 14:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0002_customer'), + ] + + operations = [ + migrations.CreateModel( + name='Supplier', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('contact_person', models.CharField(blank=True, max_length=200, null=True)), + ('email', models.EmailField(max_length=254, unique=True)), + ('phone', models.CharField(blank=True, max_length=20, null=True)), + ('address', models.TextField(blank=True, null=True)), + ('website', models.URLField(blank=True, max_length=1024, null=True)), + ], + ), + ] diff --git a/core/migrations/0004_sale_saleitem.py b/core/migrations/0004_sale_saleitem.py new file mode 100644 index 0000000..87ca521 --- /dev/null +++ b/core/migrations/0004_sale_saleitem.py @@ -0,0 +1,33 @@ +# Generated by Django 5.2.7 on 2025-12-23 14:58 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0003_supplier'), + ] + + operations = [ + migrations.CreateModel( + name='Sale', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sale_date', models.DateTimeField(auto_now_add=True)), + ('total_amount', models.DecimalField(decimal_places=2, default=0.0, max_digits=10)), + ('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.customer')), + ], + ), + migrations.CreateModel( + name='SaleItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('quantity', models.PositiveIntegerField(default=1)), + ('price', models.DecimalField(decimal_places=2, max_digits=10)), + ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.product')), + ('sale', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='core.sale')), + ], + ), + ] diff --git a/core/migrations/0005_sale_lote.py b/core/migrations/0005_sale_lote.py new file mode 100644 index 0000000..085eea9 --- /dev/null +++ b/core/migrations/0005_sale_lote.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.7 on 2025-12-23 15:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0004_sale_saleitem'), + ] + + operations = [ + migrations.AddField( + model_name='sale', + name='lote', + field=models.CharField(blank=True, max_length=200, null=True), + ), + ] diff --git a/core/migrations/0006_alter_customer_options_alter_product_options_and_more.py b/core/migrations/0006_alter_customer_options_alter_product_options_and_more.py new file mode 100644 index 0000000..a8c8a19 --- /dev/null +++ b/core/migrations/0006_alter_customer_options_alter_product_options_and_more.py @@ -0,0 +1,149 @@ +# Generated by Django 5.2.7 on 2025-12-23 16:43 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0005_sale_lote'), + ] + + operations = [ + migrations.AlterModelOptions( + name='customer', + options={'verbose_name': 'Cliente', 'verbose_name_plural': 'Clientes'}, + ), + migrations.AlterModelOptions( + name='product', + options={'verbose_name': 'Produto', 'verbose_name_plural': 'Produtos'}, + ), + migrations.AlterModelOptions( + name='sale', + options={'verbose_name': 'Venda', 'verbose_name_plural': 'Vendas'}, + ), + migrations.AlterModelOptions( + name='saleitem', + options={'verbose_name': 'Item da Venda', 'verbose_name_plural': 'Itens da Venda'}, + ), + migrations.AlterModelOptions( + name='supplier', + options={'verbose_name': 'Fornecedor', 'verbose_name_plural': 'Fornecedores'}, + ), + migrations.AlterField( + model_name='customer', + name='address', + field=models.TextField(blank=True, null=True, verbose_name='Endereço'), + ), + migrations.AlterField( + model_name='customer', + name='email', + field=models.EmailField(max_length=254, unique=True, verbose_name='Email'), + ), + migrations.AlterField( + model_name='customer', + name='name', + field=models.CharField(max_length=200, verbose_name='Nome'), + ), + migrations.AlterField( + model_name='customer', + name='phone', + field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Telefone'), + ), + migrations.AlterField( + model_name='product', + name='description', + field=models.TextField(verbose_name='Descrição'), + ), + migrations.AlterField( + model_name='product', + name='image_url', + field=models.URLField(blank=True, max_length=1024, null=True, verbose_name='URL da Imagem'), + ), + migrations.AlterField( + model_name='product', + name='name', + field=models.CharField(max_length=200, verbose_name='Nome'), + ), + migrations.AlterField( + model_name='product', + name='price', + field=models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Preço'), + ), + migrations.AlterField( + model_name='product', + name='stock_quantity', + field=models.PositiveIntegerField(default=0, verbose_name='Quantidade em Estoque'), + ), + migrations.AlterField( + model_name='sale', + name='customer', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.customer', verbose_name='Cliente'), + ), + migrations.AlterField( + model_name='sale', + name='lote', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Lote'), + ), + migrations.AlterField( + model_name='sale', + name='sale_date', + field=models.DateTimeField(auto_now_add=True, verbose_name='Data da Venda'), + ), + migrations.AlterField( + model_name='sale', + name='total_amount', + field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='Valor Total'), + ), + migrations.AlterField( + model_name='saleitem', + name='price', + field=models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Preço'), + ), + migrations.AlterField( + model_name='saleitem', + name='product', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.product', verbose_name='Produto'), + ), + migrations.AlterField( + model_name='saleitem', + name='quantity', + field=models.PositiveIntegerField(default=1, verbose_name='Quantidade'), + ), + migrations.AlterField( + model_name='saleitem', + name='sale', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='core.sale', verbose_name='Venda'), + ), + migrations.AlterField( + model_name='supplier', + name='address', + field=models.TextField(blank=True, null=True, verbose_name='Endereço'), + ), + migrations.AlterField( + model_name='supplier', + name='contact_person', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Pessoa de Contato'), + ), + migrations.AlterField( + model_name='supplier', + name='email', + field=models.EmailField(max_length=254, unique=True, verbose_name='Email'), + ), + migrations.AlterField( + model_name='supplier', + name='name', + field=models.CharField(max_length=200, verbose_name='Nome'), + ), + migrations.AlterField( + model_name='supplier', + name='phone', + field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Telefone'), + ), + migrations.AlterField( + model_name='supplier', + name='website', + field=models.URLField(blank=True, max_length=1024, null=True, verbose_name='Website'), + ), + ] diff --git a/core/migrations/0007_rename_supplier_to_seller.py b/core/migrations/0007_rename_supplier_to_seller.py new file mode 100644 index 0000000..2352f45 --- /dev/null +++ b/core/migrations/0007_rename_supplier_to_seller.py @@ -0,0 +1,17 @@ +# Generated by Django 5.2.7 on 2025-12-23 17:08 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0006_alter_customer_options_alter_product_options_and_more'), + ] + + operations = [ + migrations.RenameModel( + old_name='Supplier', + new_name='Seller', + ), + ] \ No newline at end of file diff --git a/core/migrations/0008_alter_seller_options_remove_seller_contact_person_and_more.py b/core/migrations/0008_alter_seller_options_remove_seller_contact_person_and_more.py new file mode 100644 index 0000000..56f5b36 --- /dev/null +++ b/core/migrations/0008_alter_seller_options_remove_seller_contact_person_and_more.py @@ -0,0 +1,31 @@ +# Generated by Django 5.2.7 on 2025-12-23 16:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0007_rename_supplier_to_seller'), + ] + + operations = [ + migrations.AlterModelOptions( + name='seller', + options={'verbose_name': 'Vendedor', 'verbose_name_plural': 'Vendedores'}, + ), + migrations.RemoveField( + model_name='seller', + name='contact_person', + ), + migrations.AddField( + model_name='seller', + name='commission', + field=models.DecimalField(decimal_places=2, default=0.0, max_digits=5, verbose_name='Comissão'), + ), + migrations.AddField( + model_name='seller', + name='description', + field=models.TextField(blank=True, null=True, verbose_name='Descrição'), + ), + ] diff --git a/core/migrations/0009_product_commission_rate_sale_commission_amount_and_more.py b/core/migrations/0009_product_commission_rate_sale_commission_amount_and_more.py new file mode 100644 index 0000000..8dfd72b --- /dev/null +++ b/core/migrations/0009_product_commission_rate_sale_commission_amount_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 5.2.7 on 2025-12-23 16:55 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0008_alter_seller_options_remove_seller_contact_person_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='product', + name='commission_rate', + field=models.DecimalField(decimal_places=2, default=5.0, max_digits=5, verbose_name='Taxa de Comissão'), + ), + migrations.AddField( + model_name='sale', + name='commission_amount', + field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='Valor da Comissão'), + ), + migrations.AddField( + model_name='sale', + name='seller', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.seller', verbose_name='Vendedor'), + ), + ] diff --git a/core/migrations/0010_saleitem_commission_rate.py b/core/migrations/0010_saleitem_commission_rate.py new file mode 100644 index 0000000..27e8fc7 --- /dev/null +++ b/core/migrations/0010_saleitem_commission_rate.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.7 on 2025-12-23 17:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0009_product_commission_rate_sale_commission_amount_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='saleitem', + name='commission_rate', + field=models.DecimalField(decimal_places=2, default=0.0, max_digits=5, verbose_name='Taxa de Comissão'), + ), + ] diff --git a/core/migrations/0011_saleitem_lote.py b/core/migrations/0011_saleitem_lote.py new file mode 100644 index 0000000..41dba70 --- /dev/null +++ b/core/migrations/0011_saleitem_lote.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.7 on 2025-12-23 17:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0010_saleitem_commission_rate'), + ] + + operations = [ + migrations.AddField( + model_name='saleitem', + name='lote', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Lote'), + ), + ] diff --git a/core/migrations/__pycache__/0001_initial.cpython-311.pyc b/core/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000..e559e34 Binary files /dev/null and b/core/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0002_customer.cpython-311.pyc b/core/migrations/__pycache__/0002_customer.cpython-311.pyc new file mode 100644 index 0000000..f253428 Binary files /dev/null and b/core/migrations/__pycache__/0002_customer.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0003_supplier.cpython-311.pyc b/core/migrations/__pycache__/0003_supplier.cpython-311.pyc new file mode 100644 index 0000000..6b9a2d5 Binary files /dev/null and b/core/migrations/__pycache__/0003_supplier.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0004_sale_saleitem.cpython-311.pyc b/core/migrations/__pycache__/0004_sale_saleitem.cpython-311.pyc new file mode 100644 index 0000000..5fb9a45 Binary files /dev/null and b/core/migrations/__pycache__/0004_sale_saleitem.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0005_sale_lote.cpython-311.pyc b/core/migrations/__pycache__/0005_sale_lote.cpython-311.pyc new file mode 100644 index 0000000..9eb52a5 Binary files /dev/null and b/core/migrations/__pycache__/0005_sale_lote.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0006_alter_customer_options_alter_product_options_and_more.cpython-311.pyc b/core/migrations/__pycache__/0006_alter_customer_options_alter_product_options_and_more.cpython-311.pyc new file mode 100644 index 0000000..4ebb783 Binary files /dev/null and b/core/migrations/__pycache__/0006_alter_customer_options_alter_product_options_and_more.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0007_rename_supplier_to_seller.cpython-311.pyc b/core/migrations/__pycache__/0007_rename_supplier_to_seller.cpython-311.pyc new file mode 100644 index 0000000..c47a57c Binary files /dev/null and b/core/migrations/__pycache__/0007_rename_supplier_to_seller.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0008_alter_seller_options_remove_seller_contact_person_and_more.cpython-311.pyc b/core/migrations/__pycache__/0008_alter_seller_options_remove_seller_contact_person_and_more.cpython-311.pyc new file mode 100644 index 0000000..df1ba38 Binary files /dev/null and b/core/migrations/__pycache__/0008_alter_seller_options_remove_seller_contact_person_and_more.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0009_product_commission_rate_sale_commission_amount_and_more.cpython-311.pyc b/core/migrations/__pycache__/0009_product_commission_rate_sale_commission_amount_and_more.cpython-311.pyc new file mode 100644 index 0000000..2756fe8 Binary files /dev/null and b/core/migrations/__pycache__/0009_product_commission_rate_sale_commission_amount_and_more.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0010_saleitem_commission_rate.cpython-311.pyc b/core/migrations/__pycache__/0010_saleitem_commission_rate.cpython-311.pyc new file mode 100644 index 0000000..62f5f20 Binary files /dev/null and b/core/migrations/__pycache__/0010_saleitem_commission_rate.cpython-311.pyc differ diff --git a/core/migrations/__pycache__/0011_saleitem_lote.cpython-311.pyc b/core/migrations/__pycache__/0011_saleitem_lote.cpython-311.pyc new file mode 100644 index 0000000..940f226 Binary files /dev/null and b/core/migrations/__pycache__/0011_saleitem_lote.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index 71a8362..987c02d 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,77 @@ from django.db import models -# Create your models here. +class Product(models.Model): + name = models.CharField("Nome", max_length=200) + description = models.TextField("Descrição") + price = models.DecimalField("Preço", max_digits=10, decimal_places=2) + stock_quantity = models.PositiveIntegerField("Quantidade em Estoque", default=0) + image_url = models.URLField("URL da Imagem", max_length=1024, blank=True, null=True) + commission_rate = models.DecimalField("Taxa de Comissão", max_digits=5, decimal_places=2, default=5.00) + + class Meta: + verbose_name = "Produto" + verbose_name_plural = "Produtos" + + def __str__(self): + return self.name + +class Customer(models.Model): + name = models.CharField("Nome", max_length=200) + email = models.EmailField("Email", max_length=254, unique=True) + phone = models.CharField("Telefone", max_length=20, blank=True, null=True) + address = models.TextField("Endereço", blank=True, null=True) + + class Meta: + verbose_name = "Cliente" + verbose_name_plural = "Clientes" + + def __str__(self): + return self.name + +class Seller(models.Model): + name = models.CharField("Nome", max_length=200) + description = models.TextField("Descrição", blank=True, null=True) + email = models.EmailField("Email", max_length=254, unique=True) + phone = models.CharField("Telefone", max_length=20, blank=True, null=True) + address = models.TextField("Endereço", blank=True, null=True) + website = models.URLField("Website", max_length=1024, blank=True, null=True) + commission = models.DecimalField("Comissão", max_digits=5, decimal_places=2, default=0.00) + + class Meta: + verbose_name = "Vendedor" + verbose_name_plural = "Vendedores" + + def __str__(self): + return self.name + + +class Sale(models.Model): + customer = models.ForeignKey(Customer, on_delete=models.CASCADE, verbose_name="Cliente") + seller = models.ForeignKey(Seller, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Vendedor") + sale_date = models.DateTimeField("Data da Venda", auto_now_add=True) + total_amount = models.DecimalField("Valor Total", max_digits=10, decimal_places=2, default=0.00) + commission_amount = models.DecimalField("Valor da Comissão", max_digits=10, decimal_places=2, default=0.00) + lote = models.CharField("Lote", max_length=200, blank=True, null=True) + + class Meta: + verbose_name = "Venda" + verbose_name_plural = "Vendas" + + def __str__(self): + return f"Venda #{self.pk} - {self.customer.name}" + + +class SaleItem(models.Model): + sale = models.ForeignKey(Sale, related_name='items', on_delete=models.CASCADE, verbose_name="Venda") + product = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name="Produto") + lote = models.CharField("Lote", max_length=200, blank=True, null=True) + quantity = models.PositiveIntegerField("Quantidade", default=1) + price = models.DecimalField("Preço", max_digits=10, decimal_places=2) + commission_rate = models.DecimalField("Taxa de Comissão", max_digits=5, decimal_places=2, default=0.00) + + class Meta: + verbose_name = "Item da Venda" + verbose_name_plural = "Itens da Venda" + + def __str__(self): + return f"{self.quantity} de {self.product.name} na Venda #{self.sale.pk}" \ No newline at end of file diff --git a/core/templates/base.html b/core/templates/base.html index 76050e2..37aab60 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -1,10 +1,10 @@ - + - Flatlogic + EletroNorteAr @@ -28,7 +28,7 @@