Skip to content

Commit

Permalink
[IMP] l10n_br_purchase_stock: Get 'Line Section' and 'Line Note', Tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
mbcosta committed Aug 22, 2024
1 parent 44c41da commit 96a4521
Show file tree
Hide file tree
Showing 3 changed files with 157 additions and 2 deletions.
80 changes: 80 additions & 0 deletions l10n_br_purchase_stock/demo/purchase_order.xml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,46 @@
<value eval="[ref('main_pl_only_products_1_2')]" />
</function>

<!-- Section -->
<record id="main_pl_only_products_1_3" model="purchase.order.line">
<field name="order_id" ref="main_po_only_products_1" />
<field name="name">TEST SECTION 1</field>
<field name="display_type">line_section</field>
<field name="product_qty">0</field>
</record>

<!-- Note -->
<record id="main_pl_only_products_1_4" model="purchase.order.line">
<field name="order_id" ref="main_po_only_products_1" />
<field name="name">TEST NOTE 1</field>
<field name="display_type">line_note</field>
<field name="product_qty">0</field>
</record>

<record id="main_pl_only_products_1_5" model="purchase.order.line">
<field name="order_id" ref="main_po_only_products_1" />
<field name="product_id" ref="product.product_product_8" />
<field name="product_qty">2</field>
<field name="product_uom" ref="uom.product_uom_unit" />
<field name="price_unit">500</field>
<field name="fiscal_operation_id" ref="l10n_br_fiscal.fo_compras" />
<field
name="fiscal_operation_line_id"
ref="l10n_br_fiscal.fo_compras_compras"
/>
<field name="date_planned" eval="time.strftime('%Y-%m-%d')" />
<field name="partner_order">999999</field>
<field name="partner_order_line">003</field>
<field name="manual_additional_data">Teste - Additional Data</field>
<field name="insurance_value">10</field>
<field name="other_value">10</field>
<field name="freight_value">10</field>
</record>

<function model="purchase.order.line" name="_onchange_product_id_fiscal">
<value eval="[ref('main_pl_only_products_1_5')]" />
</function>

<!-- Purchase Order with only products test 2 - Teste Agrupamento -->
<record id="main_po_only_products_2" model="purchase.order">
<field name="name">Main l10n_br_purchase_stock - teste agrupamento</field>
Expand Down Expand Up @@ -170,6 +210,46 @@
<value eval="[ref('main_pl_only_products_2_2')]" />
</function>

<!-- Section -->
<record id="main_pl_only_products_2_3" model="purchase.order.line">
<field name="order_id" ref="main_po_only_products_2" />
<field name="name">TEST SECTION 2</field>
<field name="display_type">line_section</field>
<field name="product_qty">0</field>
</record>

<!-- Note -->
<record id="main_pl_only_products_2_4" model="purchase.order.line">
<field name="order_id" ref="main_po_only_products_2" />
<field name="name">TEST NOTE 2</field>
<field name="display_type">line_note</field>
<field name="product_qty">0</field>
</record>

<record id="main_pl_only_products_2_5" model="purchase.order.line">
<field name="order_id" ref="main_po_only_products_2" />
<field name="product_id" ref="product.product_product_8" />
<field name="product_qty">2</field>
<field name="product_uom" ref="uom.product_uom_unit" />
<field name="price_unit">500</field>
<field name="fiscal_operation_id" ref="l10n_br_fiscal.fo_compras" />
<field
name="fiscal_operation_line_id"
ref="l10n_br_fiscal.fo_compras_compras"
/>
<field name="date_planned" eval="time.strftime('%Y-%m-%d')" />
<field name="partner_order">999999</field>
<field name="partner_order_line">003</field>
<field name="manual_additional_data">Teste - Additional Data</field>
<field name="insurance_value">10</field>
<field name="other_value">10</field>
<field name="freight_value">10</field>
</record>

<function model="purchase.order.line" name="_onchange_product_id_fiscal">
<value eval="[ref('main_pl_only_products_2_5')]" />
</function>

<!-- Lucro Presumido -->
<!-- Purchase Order with only products test -->
<record id="lucro_presumido_po_only_products_1" model="purchase.order">
Expand Down
15 changes: 13 additions & 2 deletions l10n_br_purchase_stock/tests/test_l10n_br_purchase_stock.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def test_grouping_pickings(self):
self.assertIn(picking_2, invoice.picking_ids)

# Validar o price_unit usado
for inv_line in invoice.invoice_line_ids:
for inv_line in invoice.invoice_line_ids.filtered(lambda ln: ln.product_id):
# TODO: A forma de instalação dos modulos feita no CI
# falha o browse aqui
# l10n_br_stock_account/models/stock_invoice_onshipping.py:105
Expand All @@ -72,6 +72,17 @@ def test_grouping_pickings(self):
inv_line.fiscal_operation_line_id, "Missing Fiscal Operation Line."
)

# Section Lines
section_lines = invoice.invoice_line_ids.filtered(
lambda ln: ln.display_type == "line_section"
)
self.assertEqual(len(section_lines), 2)
# Note Lines
note_lines = invoice.invoice_line_ids.filtered(
lambda ln: ln.display_type == "line_note"
)
self.assertEqual(len(note_lines), 2)

if hasattr(invoice, "document_serie"):
invoice.document_serie = "1"
invoice.document_number = "123"
Expand Down Expand Up @@ -150,7 +161,7 @@ def test_purchase_order_lucro_presumido(self):
invoice = self.create_invoice_wizard(picking)

# Validar o price_unit usado
for inv_line in invoice.invoice_line_ids:
for inv_line in invoice.invoice_line_ids.filtered(lambda ln: ln.product_id):
# TODO: A forma de instalação dos modulos feita no CI
# falha o browse aqui
# l10n_br_stock_account/models/stock_invoice_onshipping.py:105
Expand Down
64 changes: 64 additions & 0 deletions l10n_br_purchase_stock/wizards/stock_invocing_onshipping.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,3 +158,67 @@ def _get_invoice_line_values(self, moves, invoice_values, invoice):
values.update(purchase_line_values_rm)

return values

def _create_invoice(self, invoice_values):
"""Override this method if you need to change any values of the
invoice and the lines before the invoice creation
:param invoice_values: dict with the invoice and its lines
:return: invoice
"""
purchase = self.env["purchase.order"].browse(invoice_values.get("purchase_id"))
pickings = self._load_pickings()
purchase_pickings = pickings.filtered(lambda pk: pk.purchase_id)
if not purchase_pickings or self._get_invoice_type() == "in_refund":
return super()._create_invoice(invoice_values)

# Check Other Purchase Lines
section_note_lines = self.env["purchase.order.line"]
# Resequencing
invoice_item_sequence = 10
invoice_item_seq_dict = {}
for picking in purchase_pickings.sorted(key=lambda p: p.name):
purchase = picking.purchase_id
# Resequencing
for line in purchase.order_line:
invoice_item_seq_dict[line.id] = invoice_item_sequence
invoice_item_sequence += 1

# Section and Note Lines
section_note_lines |= purchase.order_line.filtered(
lambda ln: ln.display_type in ("line_section", "line_note")
)

for line in section_note_lines:
line_vals = line._prepare_account_move_line()
invoice_values["invoice_line_ids"].append((0, 0, line_vals))

# Resequence
for ln in invoice_values["invoice_line_ids"]:
if ln[0] != 5:
if ln[2] and ln[2].get("purchase_line_id"):
ln[2].update(
{
"sequence": invoice_item_seq_dict.get(
ln[2].get("purchase_line_id")
)
}
)

# 3) Create invoices.
moves = self.env["account.move"]
AccountMove = self.env["account.move"].with_context(
default_move_type="in_invoice"
)
# for vals in invoice_vals_list:
moves |= AccountMove.with_company(self.env.company).create(invoice_values)

# 4) Some moves might actually be refunds: convert them if the
# total amount is negative
# We do this after the moves have been created since we need taxes,
# etc. to know if the total
# is actually negative or not
moves.filtered(
lambda m: m.currency_id.round(m.amount_total) < 0
).action_switch_invoice_into_refund_credit_note()

return moves

0 comments on commit 96a4521

Please sign in to comment.