changes for cp
This commit is contained in:
parent
7eeac6717d
commit
8c18ebc221
|
@ -18,6 +18,7 @@ from . import work
|
|||
from . import genetics
|
||||
from . import move
|
||||
from . import account
|
||||
from . import supplier_certificate
|
||||
|
||||
|
||||
def register():
|
||||
|
@ -25,6 +26,7 @@ def register():
|
|||
configuration.Configuration,
|
||||
sale.AduanaDetailedStart,
|
||||
account.PrintSupplierCertificateStart,
|
||||
account.InvoiceAuthorization,
|
||||
crop.Kind,
|
||||
crop.Activity,
|
||||
crop.Variety,
|
||||
|
@ -74,8 +76,12 @@ def register():
|
|||
sale.SaleLineKitComponent,
|
||||
sale.GroupingSalesStart,
|
||||
sale.PortfolioDetailedStart,
|
||||
supplier_certificate.SupplierCertificate,
|
||||
supplier_certificate.SupplierCetificateInvoiceLine,
|
||||
supplier_certificate.SupplierCetificateParty,
|
||||
product.Template,
|
||||
product.ProductStyle,
|
||||
product.HarmonizedTariffSchedule,
|
||||
production.Production,
|
||||
production.ProductionSummaryStart,
|
||||
production.MaterialsForecastStart,
|
||||
|
|
|
@ -25,6 +25,15 @@ from trytond.pool import Pool, PoolMeta
|
|||
from trytond.exceptions import UserError
|
||||
|
||||
|
||||
class InvoiceAuthorization(metaclass=PoolMeta):
|
||||
__name__ = 'account.invoice.authorization'
|
||||
|
||||
# @classmethod
|
||||
# def __setup__(cls):
|
||||
# super().__setup__()
|
||||
# cls.kind.selection.append(('supplier_certificate', "Supplier Certificate"))
|
||||
|
||||
|
||||
class PrintSupplierCertificateStart(ModelView):
|
||||
'Print Supplier Certificate Start'
|
||||
__name__ = 'farming.print_supplier_certificate.start'
|
||||
|
|
3
party.py
3
party.py
|
@ -10,6 +10,9 @@ class Party(metaclass=PoolMeta):
|
|||
export_route = fields.Char('Export Route', select=True)
|
||||
customs_globals = fields.One2Many('party.customs_global', 'party',
|
||||
'Custom Globals')
|
||||
# supplier billing information
|
||||
invoice_authorization = fields.Many2One('account.invoice.authorization',
|
||||
'Invoice Authorization', domain=[('state', '=', 'active'), ('type', '=', 'in')])
|
||||
|
||||
|
||||
class Company(metaclass=PoolMeta):
|
||||
|
|
12
product.py
12
product.py
|
@ -21,3 +21,15 @@ class Template(metaclass=PoolMeta):
|
|||
('indirect', 'Indirect'),
|
||||
], 'Cost Type')
|
||||
hts = fields.Char('HTS')
|
||||
harmonized_tariff_schedule = fields.Many2One('farming.harmonized_tariff_schedule',
|
||||
'Harmonized Tariff Schedule')
|
||||
# exportation info
|
||||
|
||||
|
||||
class HarmonizedTariffSchedule(ModelSQL, ModelView):
|
||||
"""HarmonizedTariffSchedule"""
|
||||
__name__ = 'farming.harmonized_tariff_schedule'
|
||||
name = fields.Char('Name', states={'required': True})
|
||||
code = fields.Char('Code', states={'required': True})
|
||||
uom = fields.Many2One('product.uom', 'uom',
|
||||
states={'required': True})
|
||||
|
|
30
product.xml
30
product.xml
|
@ -21,5 +21,35 @@ The COPYRIGHT file at the top level of this repository contains the full copyrig
|
|||
<field name="inherit" ref="product.template_view_form"/>
|
||||
<field name="name">template_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="harmonized_tariff_schedule_view_tree">
|
||||
<field name="model">farming.harmonized_tariff_schedule</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority">11</field>
|
||||
<field name="name">harmonized_tariff_schedule_tree</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="harmonized_tariff_schedule_view_form">
|
||||
<field name="model">farming.harmonized_tariff_schedule</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">harmonized_tariff_schedule_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_harmonized_tariff_schedule_tree">
|
||||
<field name="name">Harmonized Tariff Schedule</field>
|
||||
<field name="res_model">farming.harmonized_tariff_schedule</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_harmonized_tariff_schedule_view_tree1">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view" ref="harmonized_tariff_schedule_view_tree"/>
|
||||
<field name="act_window" ref="act_harmonized_tariff_schedule_tree"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_harmonized_tariff_schedule_view_tree2">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view" ref="harmonized_tariff_schedule_view_form"/>
|
||||
<field name="act_window" ref="act_harmonized_tariff_schedule_tree"/>
|
||||
</record>
|
||||
<menuitem name="Harmonized Tariff Schedule" parent="product.menu_main_product"
|
||||
sequence="80" id="menu_harmonized_tariff_schedule"
|
||||
action="act_harmonized_tariff_schedule_tree"/>
|
||||
</data>
|
||||
</tryton>
|
||||
|
|
|
@ -0,0 +1,256 @@
|
|||
from trytond.model import fields, ModelSQL, ModelView, Unique, Workflow
|
||||
from trytond.pool import Pool
|
||||
# from trytond.transaction import Transaction
|
||||
# from trytond.wizard import Button, StateTransition, StateView, Wizard
|
||||
from trytond.pyson import Eval
|
||||
from decimal import Decimal
|
||||
from trytond.exceptions import UserError
|
||||
from lxml import etree
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
class SupplierCertificate(Workflow, ModelSQL, ModelView):
|
||||
"""Supplier Certificate"""
|
||||
__name__ = 'farming.supplier_certificate'
|
||||
|
||||
number = fields.Char('Number', states={
|
||||
'readonly': True
|
||||
})
|
||||
# supplier = fields.Many2Many('party.party', 'Supplier')
|
||||
suppliers = fields.Many2Many('farming.supplier_certificate-party.party', 'supplier_certificate',
|
||||
'party', 'Party')
|
||||
provider_link = fields.Char('Link Mail')
|
||||
start_date = fields.Date('Start Date')
|
||||
end_date = fields.Date('End Date')
|
||||
invoice_lines = fields.Many2Many('farming.supplier_certificate-account_invoice_line', 'supplier_certificate',
|
||||
'invoice_line', 'Invoice Lines', domain=[
|
||||
('invoice.type', '=', 'in'),
|
||||
('invoice.party', 'in', Eval('suppliers')),
|
||||
('product.exportable', '=', True),
|
||||
('invoice.invoice_date', '>=', Eval('start_date')),
|
||||
('invoice.invoice_date', '<=', Eval('end_date')),
|
||||
], depends=['suppliers', 'start_date', 'end_date'])
|
||||
# ('invoice', '=', Eval('invoice')),
|
||||
state = fields.Selection([
|
||||
('draft', 'Draft'),
|
||||
('cancelled', 'Cancelled'),
|
||||
('done', 'Done'),
|
||||
('processed', 'Processed'),
|
||||
], 'State', readonly=True, select=True)
|
||||
total_amount = fields.Function(fields.Numeric('Total_amount'), 'get_total_amount')
|
||||
vat_amount = fields.Function(fields.Numeric('Vat Amount'), 'get_vat_amount')
|
||||
xml_certificate = fields.Text('XML Certificate')
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(SupplierCertificate, cls).__setup__()
|
||||
cls._transitions |= set((
|
||||
('draft', 'processed'),
|
||||
('processed', 'done'),
|
||||
('processed', 'cancelled'),
|
||||
))
|
||||
cls._buttons.update({
|
||||
'draft': {
|
||||
'invisible': Eval('state').in_(['draft', 'processed', 'done'])
|
||||
},
|
||||
'cancel': {
|
||||
'invisible': Eval('state').in_(['cancelled', 'draft', 'done']),
|
||||
},
|
||||
'process': {
|
||||
'invisible': Eval('state') != 'draft',
|
||||
},
|
||||
'done': {
|
||||
'invisible': Eval('state').in_(['draft', 'cancelled', 'done']),
|
||||
},
|
||||
'create_certificate': {
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('draft')
|
||||
def draft(cls, records):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('cancelled')
|
||||
def cancel(cls, records):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('processed')
|
||||
def process(cls, records):
|
||||
for record in records:
|
||||
record.set_number()
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('done')
|
||||
def done(cls, records):
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def default_state():
|
||||
return 'draft'
|
||||
|
||||
def get_total_amount(self, name):
|
||||
total_amount = 0
|
||||
if self.invoice_lines:
|
||||
for invoice_line in self.invoice_lines:
|
||||
total_amount += invoice_line.amount
|
||||
return Decimal(total_amount)
|
||||
|
||||
def get_vat_amount(self, name):
|
||||
total_amount_taxes = 0
|
||||
TAX = Pool().get('account.tax')
|
||||
iva = TAX(2)
|
||||
if self.invoice_lines:
|
||||
for invoice_line in self.invoice_lines:
|
||||
# total_amount_taxes += invoice_line.amount * iva.rate * Decimal(invoice_line.quantity)
|
||||
total_amount_taxes += invoice_line.amount * iva.rate
|
||||
return Decimal(total_amount_taxes)
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
def create_certificate(cls, certificates):
|
||||
for record in certificates:
|
||||
date_exp = record.start_date + timedelta(days=6)
|
||||
flimexp = date_exp.strftime("%Y-%m-%d")
|
||||
root = etree.Element("mas", nsmap={"xsi": "http://www.w3.org/2001/XMLSchema-instance"})
|
||||
root.set("{http://www.w3.org/2001/XMLSchema-instance}noNamespaceSchemaLocation", "../xsd/640.xsd")
|
||||
cantreg = etree.SubElement(root, "CantReg")
|
||||
cantreg.text = str(len(record.invoice_lines))
|
||||
cab = etree.SubElement(root, "Cab")
|
||||
elements_to_add = {
|
||||
"Ano": str(record.start_date.year),
|
||||
"CodCpt": "1",
|
||||
"Formato": "640",
|
||||
"Version": "1",
|
||||
"NumEnvio": record.number,
|
||||
"FecEnvio": str(datetime.today().isoformat()).split('.')[0],
|
||||
"FecInicial": str(record.start_date),
|
||||
"FecFinal": str(record.start_date),
|
||||
"ValorTotal": "31",
|
||||
"CantReg": str(len(record.suppliers))
|
||||
}
|
||||
for tag, text in elements_to_add.items():
|
||||
element = etree.Element(tag)
|
||||
element.text = text
|
||||
cab.append(element)
|
||||
pool = Pool()
|
||||
Authorization = pool.get('account.invoice.authorization')
|
||||
for supplier in record.suppliers:
|
||||
resolution_number = supplier.invoice_authorization.number
|
||||
start_date_auth = supplier.invoice_authorization.start_date_auth
|
||||
invoice_lines = []
|
||||
vtcons = 0
|
||||
vtexen = 0
|
||||
for line in record.invoice_lines:
|
||||
try:
|
||||
autorization, = Authorization.search([('id', '=', line.invoice.authorization)])
|
||||
except:
|
||||
autorization = '9999'
|
||||
if line.invoice.party == supplier:
|
||||
harmonized_tariff_schedule = line.product.harmonized_tariff_schedule
|
||||
invoice_line_dict = {
|
||||
'nfact': line.invoice.reference,
|
||||
'ffac': str(line.invoice.invoice_date),
|
||||
'resfac': resolution_number,
|
||||
'fres': str(start_date_auth),
|
||||
'tipo': '1',
|
||||
'subp': harmonized_tariff_schedule.code,
|
||||
'desc': line.product.description if line.product.description else line.product.name,
|
||||
'cunfi': f"{line.quantity:.6f}",
|
||||
'unfi': harmonized_tariff_schedule.uom.symbol,
|
||||
'cunco': line.unit.symbol,
|
||||
'unco': 'NAR',
|
||||
'vuni': line.unit_price,
|
||||
'amount': round(float(line.unit_price) * line.quantity, 6),
|
||||
'tiva': '19.00',
|
||||
'vexen': round((float(line.unit_price) * line.quantity) * 0.19, 6),
|
||||
'codins': line.product.code,
|
||||
}
|
||||
vtcons += invoice_line_dict['amount']
|
||||
vtexen += invoice_line_dict['vexen']
|
||||
invoice_lines.append(invoice_line_dict)
|
||||
cp = etree.SubElement(root, "cp")
|
||||
cp.set("cpto", "1")
|
||||
cp.set("tdoc", supplier.type_document)
|
||||
cp.set("ndoc", supplier.id_number)
|
||||
if supplier.type_document == '31':
|
||||
cp.set("razsoc", supplier.name)
|
||||
else:
|
||||
cp.set("apl1", supplier.patient.first_family_name)
|
||||
cp.set("apl2", supplier.patient.second_family_name)
|
||||
cp.set("nom1", supplier.first_name)
|
||||
cp.set("nom2", supplier.second_name)
|
||||
cp.set("cantfac", "1")
|
||||
cp.set("vtcons", f"{vtcons:.6f}")
|
||||
cp.set("vtexen", f"{vtexen:.6f}")
|
||||
cp.set("flimexp", flimexp)
|
||||
cp.set("nitems", str(len(invoice_lines)))
|
||||
for line in invoice_lines:
|
||||
cphoja2 = etree.SubElement(cp, "cphoja2")
|
||||
cphoja2.set("nfact", line['nfact'])
|
||||
cphoja2.set("ffac", line['ffac'])
|
||||
cphoja2.set("resfac", line['resfac'])
|
||||
cphoja2.set("fres", line['fres'])
|
||||
cphoja2.set("tipo", '1')
|
||||
cphoja2.set("subp", line['subp'])
|
||||
cphoja2.set("desc", line['desc'])
|
||||
cphoja2.set("cunfi", line['cunfi'])
|
||||
cphoja2.set("unco", 'NAR')
|
||||
cphoja2.set("vuni", f"{line['vuni']:.6f}")
|
||||
cphoja2.set("vtotal", f"{line['amount']:.6f}")
|
||||
cphoja2.set("tiva", '19.00')
|
||||
cphoja2.set("vexen", f"{line['vexen']:.6f}")
|
||||
cphoja2.set("codins", line['codins'])
|
||||
|
||||
tree = etree.ElementTree(root)
|
||||
record.xml_certificate = etree.tostring(tree, xml_declaration=True, pretty_print=True, encoding="ISO-8859-1").decode("ISO-8859-1")
|
||||
record.save()
|
||||
|
||||
def set_number(self):
|
||||
pool = Pool()
|
||||
Config = pool.get('account.configuration')
|
||||
config = Config(1)
|
||||
if self.number:
|
||||
return
|
||||
if not config.sequence_supplier_certificate:
|
||||
raise UserError('No existe secuencia de certificado de proveedor')
|
||||
number = config.certificate_sequence.get()
|
||||
self.write([self], {'number': number})
|
||||
|
||||
|
||||
class SupplierCetificateInvoiceLine(ModelSQL):
|
||||
'Supplier certificate - invoice Line'
|
||||
__name__ = 'farming.supplier_certificate-account_invoice_line'
|
||||
_table = 'supplier_certificate-account_invoice_line'
|
||||
supplier_certificate = fields.Many2One('farming.supplier_certificate',
|
||||
'Supplier Certificate', select=True, required=True, ondelete='CASCADE')
|
||||
invoice_line = fields.Many2One('account.invoice.line', 'Invoice Line',
|
||||
ondelete='CASCADE', select=True, required=True)
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(SupplierCetificateInvoiceLine, cls).__setup__()
|
||||
table = cls.__table__()
|
||||
|
||||
cls._sql_constraints += [
|
||||
('invoice_line_uniq', Unique(table, table.invoice_line),
|
||||
'invoice line already exists!'),
|
||||
]
|
||||
|
||||
|
||||
class SupplierCetificateParty(ModelSQL):
|
||||
'Supplier certificate - invoice Line'
|
||||
__name__ = 'farming.supplier_certificate-party.party'
|
||||
_table = 'supplier_certificate-party_party'
|
||||
supplier_certificate = fields.Many2One('farming.supplier_certificate',
|
||||
'Supplier Certificate', select=True, required=True, ondelete='CASCADE')
|
||||
party = fields.Many2One('party.party', 'Party',
|
||||
ondelete='CASCADE', select=True, required=True)
|
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- This file is part product_barcode module for 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="supplier_certificate_view_form">
|
||||
<field name="model">farming.supplier_certificate</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">supplier_certificate_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="supplier_certificate_view_tree">
|
||||
<field name="model">farming.supplier_certificate</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">supplier_certificate_tree</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="supplier_certificate_line_view_form">
|
||||
<field name="model">farming.supplier_certificate.line</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">supplier_certificate_line_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="supplier_certificate_line_view_tree">
|
||||
<field name="model">farming.supplier_certificate.line</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">supplier_certificate_line_tree</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_supplier_certificate_form">
|
||||
<field name="name">Supplier Certificate</field>
|
||||
<field name="res_model">farming.supplier_certificate</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_supplier_certificate_form_view1">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view" ref="supplier_certificate_view_tree"/>
|
||||
<field name="act_window" ref="act_supplier_certificate_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_supplier_certificate_form_view2">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view" ref="supplier_certificate_view_form"/>
|
||||
<field name="act_window" ref="act_supplier_certificate_form"/>
|
||||
</record>
|
||||
|
||||
|
||||
<menuitem
|
||||
parent="account_invoice.menu_invoices"
|
||||
action="act_supplier_certificate_form"
|
||||
sequence="10"
|
||||
id="menu_invoice_in_form"/>
|
||||
|
||||
<record model="ir.ui.view" id="add_invoice_lines_start_view_form">
|
||||
<field name="model">farming.add_invoice_line.start</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">add_invoice_line_start_form</field>
|
||||
</record>
|
||||
<record model="ir.action.wizard" id="wizard_add_invoice_lines">
|
||||
<field name="name">Add Invoice Lines</field>
|
||||
<field name="wiz_name">farming.add_invoice_line</field>
|
||||
</record>
|
||||
<record model="ir.action.keyword" id="action_create_order_line_keyword">
|
||||
<field name="keyword">form_action</field>
|
||||
<field name="model">farming.supplier_certificate,-1</field>
|
||||
<field name="action" ref="wizard_add_invoice_lines"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</tryton>
|
|
@ -33,3 +33,4 @@ xml:
|
|||
work.xml
|
||||
genetics.xml
|
||||
message.xml
|
||||
supplier_certificate.xml
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
<?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. -->
|
||||
<form>
|
||||
<label name="name"/>
|
||||
<field name="name"/>
|
||||
<label name="code"/>
|
||||
<field name="code"/>
|
||||
<label name="uom"/>
|
||||
<field name="uom"/>
|
||||
</form>
|
|
@ -0,0 +1,8 @@
|
|||
<?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. -->
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="uom"/>
|
||||
</tree>
|
|
@ -9,4 +9,8 @@ this repository contains the full copyright notices and license terms. -->
|
|||
<field name="freight_forwader"/>
|
||||
<field name="customs_globals" colspan="4"/>
|
||||
</xpath>
|
||||
<xpath expr="/form/notebook/page[@id='supplier']" position="inside">
|
||||
<label name="invoice_authorization"/>
|
||||
<field name="invoice_authorization"/>
|
||||
</xpath>
|
||||
</data>
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
<?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. -->
|
||||
<form>
|
||||
<label name="number"/>
|
||||
<field name="number"/>
|
||||
<label name="start_date"/>
|
||||
<field name="start_date"/>
|
||||
<label name="end_date"/>
|
||||
<field name="end_date"/>
|
||||
<!-- <label name="provider_link"/>
|
||||
<field name="provider_link" widget="url" xexpand="1" width="40"/> -->
|
||||
<notebook colspan="6">
|
||||
<page string="Suppliers" id="suppliers" col="4">
|
||||
<field name="suppliers" colspan="4"/>
|
||||
</page>
|
||||
<page string="Invoice Lines" id="main_info" col="4">
|
||||
<field name="invoice_lines" colspan="4"/>
|
||||
<group col="2" colspan="2" id="states" yfill="1">
|
||||
<label name="state"/>
|
||||
<field name="state"/>
|
||||
<newline/>
|
||||
</group>
|
||||
<group col="2" colspan="2" id="totals" yfill="1">
|
||||
<label name="total_amount" xalign="1.0" xexpand="1"/>
|
||||
<field name="total_amount" symbol="currency" xalign="1.0" xexpand="0"/>
|
||||
<label name="vat_amount" xalign="1.0" xexpand="1"/>
|
||||
<field name="vat_amount" symbol="currency" xalign="1.0" xexpand="0"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="xml" id="xml_cp" col="1">
|
||||
<label name="xml_certificate"/>
|
||||
<field name="xml_certificate"/>
|
||||
</page>
|
||||
|
||||
</notebook>
|
||||
<group col='4' colspan='4' id="buttons">
|
||||
<button name="draft" string="Draft" icon="tryton-clear"/>
|
||||
<button name="process" string="Process" icon="tryton-forward"/>
|
||||
<button name="create_certificate" string="create_certificate" icon="tryton-forward"/>
|
||||
<button name="done" string="Done" icon="tryton-forward"/>
|
||||
<button name="cancel" string="cancel" icon="tryton-forward"/>
|
||||
</group>
|
||||
</form>
|
|
@ -0,0 +1,9 @@
|
|||
<?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. -->
|
||||
<form>
|
||||
<label name="invoice"/>
|
||||
<field name="invoice"/>
|
||||
<label name="invoice_line"/>
|
||||
<field name="invoice_line"/>
|
||||
</form>
|
|
@ -0,0 +1,7 @@
|
|||
<?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. -->
|
||||
<tree>
|
||||
<field name="invoice"/>
|
||||
<field name="invoice_line"/>
|
||||
</tree>
|
|
@ -0,0 +1,10 @@
|
|||
<?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. -->
|
||||
<tree>
|
||||
<field name="number"/>
|
||||
<!-- <field name="supplier"/> -->
|
||||
<field name="state"/>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
</tree>
|
|
@ -11,4 +11,9 @@ this repository contains the full copyright notices and license terms. -->
|
|||
<label name="hts"/>
|
||||
<field name="hts"/>
|
||||
</xpath>
|
||||
<xpath expr="/form/notebook/page[@id='suppliers']/field[@name='purchase_uom']"
|
||||
position="after">
|
||||
<label name="harmonized_tariff_schedule"/>
|
||||
<field name="harmonized_tariff_schedule"/>
|
||||
</xpath>
|
||||
</data>
|
||||
|
|
Loading…
Reference in New Issue