2 Commits
7.6 ... main

Author SHA1 Message Date
243a5ca765 chore: actualizacion nombre archivo 2023-07-25 16:35:42 -05:00
f2048d66a2 Add 'CONT' 2023-07-25 16:35:13 -05:00
14 changed files with 87 additions and 150 deletions

37
CONTRIBUIR.md Normal file
View File

@@ -0,0 +1,37 @@
# CONTRIBUIR
### requerimientos tecnicos
* python >= 3.9
* docker >= 20
* docker-compose >= 2
* pre-commit >= 2
* git >= 2.30
### consideraciones
* evito trabajo innecesario
* evito generalizar, primero hago pruebas y luego elimino duplicidad
* evito redundancia, si lo puedo automatizar lo automatizo
* evito usar `git add .`
* a todo momento hago expresivo lo escrito, renombro, muevo o elimino
* en todo momento debo poder ejecutar las pruebas
* en todo momento debo poder el programa
* en todo momento especulo, me ilustro y aprendo
### convencion commit
ante cada commit el mensaje se clasifica en:
* **feat(\<COMPONENTE\>)** una nueva funcionalidad accesible al usuario o sistema
* **fix(\<COMPONENTE\>)** correcion de una funcionalidad ya entregada
* **chore(\<COMPONENTE\>)** otros cambios que no impactan directamente al usuario, ejemplo renombramiento de archivo,clases,metodos,variables,carpetas,scripts, documentacion, recursos digitales, etc..
`COMPONENTE` nombre del directorio
ejemplos:
`git commit -m 'feat(<COMPONENTE>): venta de equipos opticos`
`git commit -m 'fix(<COMPONENTE>): se adiciona boton faltante`
`git commit -m 'chore(<COMPONENTE>): cambio de color en columna Producto`

View File

@@ -1,7 +0,0 @@
Analytic Operations Module
=========================
The *Analytic Operations Module* adds the concept of analytic account general
in invoice, purchase, sale. This allows added the account analytic to the lines of
operation more fast.

View File

@@ -2,7 +2,7 @@
# this repository contains the full copyright notices and license terms. # this repository contains the full copyright notices and license terms.
from trytond.pool import Pool from trytond.pool import Pool
from . import invoice, purchase, sale from . import purchase, sale
__all__ = ['register'] __all__ = ['register']
@@ -13,10 +13,8 @@ def register():
purchase.PurchaseLine, purchase.PurchaseLine,
sale.Sale, sale.Sale,
sale.SaleLine, sale.SaleLine,
invoice.Invoice, module='analytic_operation', type_='model')
invoice.InvoiceLine,
module='analytic_operations', type_='model')
Pool.register( Pool.register(
module='analytic_operations', type_='wizard') module='analytic_operation', type_='wizard')
Pool.register( Pool.register(
module='analytic_operations', type_='report') module='analytic_operation', type_='report')

View File

@@ -1,10 +1,6 @@
###################### #########################
Analytic Operations Module Analytic Operation Module
###################### #########################
The *Analytic Operations Module* adds the concept of analytic account general
in invoice, purchase, sale. This allows added the account analytic to the lines of
operation more fast.
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2

View File

@@ -1,42 +0,0 @@
# 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.pool import PoolMeta
from trytond.model import fields
from trytond.pyson import Eval
from trytond.model.exceptions import ValidationError
class Invoice(metaclass=PoolMeta):
'Account Invoice'
__name__ = 'account.invoice'
_states = {
'readonly': Eval('state') != 'draft',
}
account_analytic = fields.Many2One(
'analytic_account.account', 'Analytic Account',
domain=[('type', '=', 'normal')],
states=_states)
class InvoiceLine(metaclass=PoolMeta):
'Invoice Line'
__name__ = 'account.invoice.line'
@fields.depends(
'product', 'unit', '_parent_invoice.type', 'analytic_accounts',
'_parent_invoice.party', 'party', 'invoice', 'invoice_type',
'_parent_invoice.account_analytic', '_parent_invoice.invoice_date',
'_parent_invoice.accounting_date', 'company',
methods=['_get_tax_rule_pattern'])
def on_change_product(self):
super(InvoiceLine, self).on_change_product()
self.analytic_accounts = tuple()
try:
if self.invoice and self.invoice.account_analytic:
self.analytic_accounts += (
{'root': self.invoice.account_analytic.root,
'account': self.invoice.account_analytic},)
except Exception as e:
raise ValidationError(f"Se produjo un error: {e}")

View File

@@ -1,11 +0,0 @@
<?xml version="1.0"?>
<!--This file file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="invoice_view_form">
<field name="model">account.invoice</field>
<field name="inherit" ref="account_invoice.invoice_view_form"/>
<field name="name">invoice_form</field>
</record>
</data>
</tryton>

View File

@@ -1,15 +0,0 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:account.invoice,account_analytic:"
msgid "Analytic Account"
msgstr "Cuenta Analítica"
msgctxt "field:purchase.purchase,account_analytic:"
msgid "Analytic Account"
msgstr "Cuenta Analítica"
msgctxt "field:sale.sale,account_analytic:"
msgid "Analytic Account"
msgstr "Cuenta Analítica"

View File

@@ -1,36 +1,29 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of # This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms. # this repository contains the full copyright notices and license terms.
from trytond.pool import PoolMeta from trytond.pool import Pool, PoolMeta
from trytond.model import fields from trytond.model import ModelView, ModelSQL, fields
from trytond.pyson import Eval from trytond.pyson import Eval
from trytond.model.exceptions import ValidationError
from trytond.exceptions import UserError
class Purchase(metaclass=PoolMeta): class Purchase(metaclass=PoolMeta):
'Purchase Analytic Operation' 'Purchase Analytic Operation'
__name__ = 'purchase.purchase' __name__ = 'purchase.purchase'
_states = { account_analytic = fields.Many2One('analytic_account.account',
'readonly': Eval('state') != 'draft', 'Analytic Account', required=True,
} domain=[
('type', '=', 'normal'),
account_analytic = fields.Many2One( ])
'analytic_account.account', 'Analytic Account', required=True,
domain=[('type', '=', 'normal')],
states=_states)
class PurchaseLine(metaclass=PoolMeta): class PurchaseLine(metaclass=PoolMeta):
'Purchase Line Analytic Operation' 'Purchase Line Analytic Operation'
__name__ = 'purchase.line' __name__ = 'purchase.line'
@fields.depends( @fields.depends('product', 'unit', 'purchase',
'product', 'unit', 'purchase',
'_parent_purchase.party', '_parent_purchase.invoice_party', '_parent_purchase.party', '_parent_purchase.invoice_party',
'_parent_purchase.account_analytic', 'product_supplier', '_parent_purchase.account_analytic', 'product_supplier',
'analytic_accounts', 'analytic_accounts', methods=['compute_taxes', 'compute_unit_price',
methods=['compute_taxes', 'compute_unit_price', '_get_product_supplier_pattern'])
'_get_product_supplier_pattern'])
def on_change_product(self): def on_change_product(self):
if not self.product: if not self.product:
return return
@@ -48,7 +41,7 @@ class PurchaseLine(metaclass=PoolMeta):
self.unit = self.product.purchase_uom self.unit = self.product.purchase_uom
product_suppliers = list(self.product.product_suppliers_used( product_suppliers = list(self.product.product_suppliers_used(
**self._get_product_supplier_pattern())) **self._get_product_supplier_pattern()))
if len(product_suppliers) == 1: if len(product_suppliers) == 1:
self.product_supplier, = product_suppliers self.product_supplier, = product_suppliers
elif (self.product_supplier elif (self.product_supplier
@@ -62,8 +55,7 @@ class PurchaseLine(metaclass=PoolMeta):
self.analytic_accounts = tuple() self.analytic_accounts = tuple()
try: try:
self.analytic_accounts += ( self.analytic_accounts += ({'root': self.purchase.account_analytic.root,
{'root': self.purchase.account_analytic.root, 'account': self.purchase.account_analytic},)
'account': self.purchase.account_analytic},) except:
except Exception as e: pass
raise ValidationError(f"Se produjo un error: {e}")

27
sale.py
View File

@@ -1,9 +1,10 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of # This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms. # this repository contains the full copyright notices and license terms.
from trytond.pool import PoolMeta from trytond.pool import Pool, PoolMeta
from trytond.model import fields from trytond.model import ModelView, ModelSQL, fields
from trytond.model.exceptions import ValidationError from trytond.pyson import Eval
from trytond.exceptions import UserError
class Sale(metaclass=PoolMeta): class Sale(metaclass=PoolMeta):
'Sale Analytic Operation' 'Sale Analytic Operation'
@@ -14,11 +15,11 @@ class Sale(metaclass=PoolMeta):
domain=[ domain=[
('type', '=', 'normal'), ('type', '=', 'normal'),
]) ])
class SaleLine(metaclass=PoolMeta): class SaleLine(metaclass=PoolMeta):
'Sale Line Analytic Operation' 'Sale Line Analytic Operation'
__name__ = 'sale.line' __name__ = 'sale.line'
@fields.depends('product', 'unit', 'sale', @fields.depends('product', 'unit', 'sale',
'_parent_sale.party', '_parent_sale.invoice_party', '_parent_sale.party', '_parent_sale.invoice_party',
@@ -28,7 +29,7 @@ class SaleLine(metaclass=PoolMeta):
def on_change_product(self): def on_change_product(self):
if not self.product: if not self.product:
return return
party = None party = None
if self.sale: if self.sale:
party = self.sale.invoice_party or self.sale.party party = self.sale.invoice_party or self.sale.party
@@ -42,13 +43,13 @@ class SaleLine(metaclass=PoolMeta):
self.unit_price = self.compute_unit_price() self.unit_price = self.compute_unit_price()
self.type = 'line' self.type = 'line'
self.amount = self.on_change_with_amount() self.amount = self.on_change_with_amount()
self.analytic_accounts = tuple() self.analytic_accounts = tuple()
try: try:
self.analytic_accounts += ( self.analytic_accounts += ({'root': self.sale.account_analytic.root,
{'root': self.sale.account_analytic.root, 'account': self.sale.account_analytic},)
'account': self.sale.account_analytic},) except:
except Exception as e: pass
raise ValidationError(f"Se produjo un error: {e}")

View File

@@ -39,7 +39,7 @@ version = info.get('version', '0.0.1')
major_version, minor_version, _ = version.split('.', 2) major_version, minor_version, _ = version.split('.', 2)
major_version = int(major_version) major_version = int(major_version)
minor_version = int(minor_version) minor_version = int(minor_version)
name = 'trytond_analytic_operations' name = 'trytond_analytic_operation'
download_url = 'http://downloads.tryton.org/%s.%s/' % ( download_url = 'http://downloads.tryton.org/%s.%s/' % (
major_version, minor_version) major_version, minor_version)
@@ -85,20 +85,19 @@ setup(name=name,
download_url=download_url, download_url=download_url,
project_urls={ project_urls={
"Bug Tracker": 'https://bugs.tryton.org/', "Bug Tracker": 'https://bugs.tryton.org/',
"Documentation": "Documentation": 'https://docs.tryton.org/projects/modules-analytic-operation',
'https://docs.tryton.org/projects/modules-analytic-operation',
"Forum": 'https://www.tryton.org/forum', "Forum": 'https://www.tryton.org/forum',
"Source Code": 'https://hg.tryton.org/modules/analytic_operations', "Source Code": 'https://hg.tryton.org/modules/analytic_operation',
}, },
keywords='analitic, invoice, purchase, sale', keywords='analitic, invoice, purchase, sale',
package_dir={'trytond.modules.analytic_operations': '.'}, package_dir={'trytond.modules.analytic_operation': '.'},
packages=( packages=(
['trytond.modules.analytic_operations'] ['trytond.modules.analytic_operation']
+ ['trytond.modules.analytic_operations.%s' % p + ['trytond.modules.analytic_operation.%s' % p
for p in find_packages()] for p in find_packages()]
), ),
package_data={ package_data={
'trytond.modules.analytic_operations': (info.get('xml', []) 'trytond.modules.analytic_operation': (info.get('xml', [])
+ ['tryton.cfg', 'view/*.xml', 'locale/*.po', '*.fodt', + ['tryton.cfg', 'view/*.xml', 'locale/*.po', '*.fodt',
'icons/*.svg', 'tests/*.rst']), 'icons/*.svg', 'tests/*.rst']),
}, },
@@ -151,6 +150,6 @@ setup(name=name,
zip_safe=False, zip_safe=False,
entry_points=""" entry_points="""
[trytond.modules] [trytond.modules]
analytic_operations = trytond.modules.analytic_operations analytic_operation = trytond.modules.analytic_operation
""", # noqa: E501 """, # noqa: E501
) )

View File

@@ -5,7 +5,7 @@ from trytond.tests.test_tryton import ModuleTestCase
class AnalyticOperationTestCase(ModuleTestCase): class AnalyticOperationTestCase(ModuleTestCase):
"Test Analytic Operation module" "Test Analytic Operation module"
module = 'analytic_operations' module = 'analytic_operation'
del ModuleTestCase del ModuleTestCase

View File

@@ -4,8 +4,8 @@ envlist = {py37,py38,py39,py310}-{sqlite,postgresql}
[testenv] [testenv]
extras = test extras = test
commands = commands =
coverage run --include=./**//* -m unittest discover -s tests coverage run --include=./**/analytic_operation/* -m unittest discover -s tests
coverage report --include=./**/analytic_operations/* --omit=*/tests/* coverage report --include=./**/analytic_operation/* --omit=*/tests/*
deps = deps =
coverage coverage
postgresql: psycopg2 >= 2.7.0 postgresql: psycopg2 >= 2.7.0

View File

@@ -1,5 +1,5 @@
[tryton] [tryton]
version=7.6.0 version=6.4
depends: depends:
ir ir
purchase purchase
@@ -8,4 +8,3 @@ depends:
xml: xml:
purchase.xml purchase.xml
sale.xml sale.xml
invoice.xml

View File

@@ -1,10 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath
expr="/form/field[@name='reference']" position="after">
<label name="account_analytic"/>
<field name="account_analytic" xexpand="1"/>
</xpath>
</data>