From d00294e487eccc6bae206b049d816ef7608cd8b6 Mon Sep 17 00:00:00 2001 From: Mongar28 Date: Thu, 22 Aug 2024 11:46:10 -0500 Subject: [PATCH 1/4] Se agregan las pruebas --- tests/scenario_sale_fast_food.rst | 11 +++++++++++ tests/test_scenario.py | 8 ++++++++ 2 files changed, 19 insertions(+) create mode 100644 tests/scenario_sale_fast_food.rst create mode 100644 tests/test_scenario.py diff --git a/tests/scenario_sale_fast_food.rst b/tests/scenario_sale_fast_food.rst new file mode 100644 index 0000000..fdd0738 --- /dev/null +++ b/tests/scenario_sale_fast_food.rst @@ -0,0 +1,11 @@ +============================= +Sale Line Delete Log Scenario +============================= + +Imports:: + + >>> from trytond.tests.tools import activate_modules + +Activate modules:: + + >>> config = activate_modules('sale_fast_food') diff --git a/tests/test_scenario.py b/tests/test_scenario.py new file mode 100644 index 0000000..dc1d23e --- /dev/null +++ b/tests/test_scenario.py @@ -0,0 +1,8 @@ +# This file is part of Tryton. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.tests.test_tryton import load_doc_tests + + +def load_tests(*args, **kwargs): + return load_doc_tests(__name__, __file__, *args, **kwargs) From b7a63e73f2d06d472e90f72b88d4ec8ffa189db0 Mon Sep 17 00:00:00 2001 From: sinergia Date: Wed, 28 Aug 2024 15:26:22 -0500 Subject: [PATCH 2/4] Fix: Se agrega dependencias a sale_line_deleted_log --- sale.py | 9 +- tests/scenario_sale_fast_food.rst | 202 +++++++++++++++++++++++++++++- tryton.cfg | 4 +- 3 files changed, 211 insertions(+), 4 deletions(-) diff --git a/sale.py b/sale.py index faac998..a75ff4b 100644 --- a/sale.py +++ b/sale.py @@ -372,9 +372,16 @@ class Line(metaclass=PoolMeta): impreso = fields.Boolean("Impreso") bought_pizza = fields.Boolean("Sold pizza") + @classmethod + def delete(cls, lines): + for line in lines: + if line.impreso: + cls._create_sale_line_deleted_log(line) + super(Line, cls).delete(lines) + @fields.depends('product', 'unit', 'sale', '_parent_sale.party', '_parent_sale.invoice_party', - '_parent_sale.pizza_number', + '_parent_sale.pizza_number', '_parent_product.pizza', methods=['compute_taxes', 'compute_unit_price', 'on_change_with_amount']) def on_change_product(self): diff --git a/tests/scenario_sale_fast_food.rst b/tests/scenario_sale_fast_food.rst index fdd0738..9a5cd21 100644 --- a/tests/scenario_sale_fast_food.rst +++ b/tests/scenario_sale_fast_food.rst @@ -3,9 +3,207 @@ Sale Line Delete Log Scenario ============================= Imports:: - + >>> from decimal import Decimal + >>> from proteus import Model, Wizard >>> from trytond.tests.tools import activate_modules + >>> from trytond.modules.company.tests.tools import create_company, get_company + >>> from trytond.modules.account.tests.tools import ( + ... create_chart, create_fiscalyear, create_tax, get_accounts) + >>> from trytond.modules.account_invoice.tests.tools import ( + ... create_payment_term, set_fiscalyear_invoice_sequences) + >>> import datetime as dt + >>> today = dt.date.today() + >>> from trytond.tests.tools import set_user + >>> from trytond.modules.sale_shop.tests.tools import create_shop + >>> from trytond.modules.sale_line_delete_log.sale import SaleLineDeleted Activate modules:: - >>> config = activate_modules('sale_fast_food') + >>> config = activate_modules('sale_fast_food') + +Initial data:: + + >>> User = Model.get('res.user') + >>> Party = Model.get('party.party') + >>> Employee = Model.get('company.employee') + >>> Journal = Model.get('account.journal') + >>> PaymentMethod = Model.get('account.invoice.payment.method') + >>> Party = Model.get('party.party') + >>> ProductUom = Model.get('product.uom') + >>> ProductTemplate = Model.get('product.template') + >>> Sale = Model.get('sale.sale') + >>> SaleLine = Model.get('sale.line') + +Create company:: + + >>> _ = create_company() + >>> company = get_company() + +Set employee:: + + >>> employee_party = Party(name="Employee") + >>> employee_party.save() + >>> employee = Employee(party=employee_party) + >>> employee.save() + >>> user = User(config.user) + >>> user.employees.append(employee) + >>> user.employee = employee + >>> user.save() + >>> set_user(user.id) + +Create fiscal year:: + + >>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear(company, today)) + >>> fiscalyear.click('create_period') + +Create chart of accounts:: + + >>> _ = create_chart(company) + >>> accounts = get_accounts(company) + >>> revenue = accounts['revenue'] + >>> expense = accounts['expense'] + >>> cash = accounts['cash'] + + >>> cash_journal, = Journal.find([('type', '=', 'cash')]) + >>> cash_journal.save() + >>> payment_method = PaymentMethod() + >>> payment_method.name = 'Cash' + >>> payment_method.journal = cash_journal + >>> payment_method.credit_account = cash + >>> payment_method.debit_account = cash + >>> payment_method.save() + +Create tax:: + + >>> tax = create_tax(Decimal('.10')) + >>> tax.save() + +Create parties:: + + >>> supplier = Party(name='Supplier') + >>> supplier.save() + >>> customer = Party(name='Customer') + >>> customer.save() + +Create account categories:: + + >>> ProductCategory = Model.get('product.category') + >>> account_category = ProductCategory(name="Account Category") + >>> account_category.accounting = True + >>> account_category.account_expense = expense + >>> account_category.account_revenue = revenue + >>> account_category.save() + + >>> account_category_tax, = account_category.duplicate() + >>> account_category_tax.customer_taxes.append(tax) + >>> account_category_tax.save() + +Create product:: + + >>> unit, = ProductUom.find([('name', '=', 'Unit')]) + + >>> template = ProductTemplate() + >>> template.name = 'product' + >>> template.default_uom = unit + >>> template.type = 'goods' + >>> template.salable = True + >>> template.list_price = Decimal('10') + >>> template.account_category = account_category_tax + >>> template.save() + >>> product, = template.products + + >>> template = ProductTemplate() + >>> template.name = 'service' + >>> template.default_uom = unit + >>> template.type = 'service' + >>> template.salable = True + >>> template.list_price = Decimal('30') + >>> template.account_category = account_category + >>> template.save() + >>> service, = template.products + +Create payment term:: + + >>> payment_term = create_payment_term() + >>> payment_term.save() + +Create product price list:: + + >>> ProductPriceList = Model.get('product.price_list') + >>> product_price_list = ProductPriceList() + >>> product_price_list.name = 'Price List' + >>> product_price_list.company = company + >>> product_price_list.save() + +Create an Inventory:: + + >>> Inventory = Model.get('stock.inventory') + >>> Location = Model.get('stock.location') + >>> storage, = Location.find([ + ... ('code', '=', 'STO'), + ... ]) + >>> inventory = Inventory() + >>> inventory.location = storage + >>> inventory_line = inventory.lines.new(product=product) + >>> inventory_line.quantity = 100.0 + >>> inventory_line.expected_quantity = 0.0 + >>> inventory.click('confirm') + >>> inventory.state + 'done' + +Create Sale Shop:: + + >>> shop = create_shop(payment_term, product_price_list) + >>> shop.save() + +Save Sale Shop User:: + + >>> User = Model.get('res.user') + >>> user, = User.find([]) + >>> user.shops.append(shop) + >>> user.shop = shop + >>> user.save() + >>> set_user(user) + +Sale 5 products:: + + >>> sale = Sale() + >>> sale.party = customer + >>> sale.payment_term = payment_term + >>> sale.invoice_method = 'order' + >>> sale_line = SaleLine() + >>> sale.lines.append(sale_line) + >>> sale_line.product = product + >>> sale_line.quantity = 2.0 + >>> sale_line.impreso = True + >>> sale_line = SaleLine() + >>> sale.lines.append(sale_line) + >>> sale_line.type = 'comment' + >>> sale_line.description = 'Comment' + >>> sale_line = SaleLine() + >>> sale.lines.append(sale_line) + >>> sale_line.product = product + >>> sale_line.quantity = 3.0 + >>> sale.save() + >>> len(sale.lines) + 3 + >>> sale.untaxed_amount, sale.tax_amount, sale.total_amount + (Decimal('50.00'), Decimal('5.00'), Decimal('55.00')) + + +Create a sale line delete log it's was printed:: + + >>> sale.reload() + >>> sale.lines[0].delete() + >>> sale.lines[1].delete() + >>> sale.save() + >>> len(sale.lines) + 1 + + >>> sale.reload() + >>> sale.delete_lines + 1 + + >>> sale.delete_lines[0] + proteus.Model.get('sale.line_deleted')(1) + >>> assert isinstance(sale.delete_lines[0], Model.get('sale.line_deleted')), "it's not instance SaleLineDeleted" diff --git a/tryton.cfg b/tryton.cfg index c164da8..f8c4209 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -5,7 +5,9 @@ depends: res product sale + sale_discount sale_supply_production + sale_line_delete_log sale_printer production account_invoice @@ -15,4 +17,4 @@ xml: product.xml sale.xml user.xml - report_close_statement.xml \ No newline at end of file + report_close_statement.xml From 11532d780c96b04951d09e82ac1b09b0b6448525 Mon Sep 17 00:00:00 2001 From: sinergia Date: Wed, 28 Aug 2024 15:28:16 -0500 Subject: [PATCH 3/4] Fix: test --- tests/scenario_sale_fast_food.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/scenario_sale_fast_food.rst b/tests/scenario_sale_fast_food.rst index 9a5cd21..baac5cb 100644 --- a/tests/scenario_sale_fast_food.rst +++ b/tests/scenario_sale_fast_food.rst @@ -201,7 +201,7 @@ Create a sale line delete log it's was printed:: 1 >>> sale.reload() - >>> sale.delete_lines + >>> len(sale.delete_lines) 1 >>> sale.delete_lines[0] From 77d626374f847b8e54b81cc06f76b545e4014b29 Mon Sep 17 00:00:00 2001 From: sinergia Date: Wed, 28 Aug 2024 16:21:54 -0500 Subject: [PATCH 4/4] Feat: Se agrega impresion de lineas --- __init__.py | 1 + sale.py | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/__init__.py b/__init__.py index 8fc0510..d5a1920 100644 --- a/__init__.py +++ b/__init__.py @@ -10,6 +10,7 @@ def register(): invoice.InvoiceLine, sale.Sale, sale.Line, + sale.SaleLineDeletedLog, user.User, production.Production, report_close_statement.ReportCloseStatementStart, diff --git a/sale.py b/sale.py index a75ff4b..4df203b 100644 --- a/sale.py +++ b/sale.py @@ -203,6 +203,10 @@ class Sale(metaclass=PoolMeta): "quantity": line.quantity if line.type != 'title' else None, "uom": line.unit.name if line.type != 'title' else None} for line in report.lines if not line.impreso] + data["deleted_lines"] = [{ + "product": line.product.name if line.type != 'title' else None, + "quantity": line.quantity if line.type != 'title' else None, + } for line in report.delete_lines if not line.impreso] return data @@ -225,6 +229,10 @@ class Sale(metaclass=PoolMeta): line.analytic_accounts = tuple() line.impreso = True line.save() + + for line in record.delete_lines: + line.impreso = True + line.save() record.save() @classmethod @@ -381,7 +389,8 @@ class Line(metaclass=PoolMeta): @fields.depends('product', 'unit', 'sale', '_parent_sale.party', '_parent_sale.invoice_party', - '_parent_sale.pizza_number', '_parent_product.pizza', + '_parent_sale.pizza_number', + '_parent_product.pizza', methods=['compute_taxes', 'compute_unit_price', 'on_change_with_amount']) def on_change_product(self): @@ -397,3 +406,10 @@ class Line(metaclass=PoolMeta): Production = super(Line, self).get_production(product_quantities) return Production + + +class SaleLineDeletedLog(metaclass=PoolMeta): + """Sale Line Deleted Log""" + __name__ = 'sale.line_deleted' + + printed = fields.Boolean("Printed")