Initial import from Docker volume
This commit is contained in:
14
modules/lot/build/lib/trytond/modules/lot/__init__.py
Executable file
14
modules/lot/build/lib/trytond/modules/lot/__init__.py
Executable file
@@ -0,0 +1,14 @@
|
||||
# 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 Pool
|
||||
|
||||
from . import lot
|
||||
|
||||
|
||||
def register():
|
||||
Pool.register(
|
||||
lot.Lot,
|
||||
lot.QtHist,
|
||||
lot.QtType,
|
||||
module='lot', type_='model')
|
||||
286
modules/lot/build/lib/trytond/modules/lot/lot.py
Executable file
286
modules/lot/build/lib/trytond/modules/lot/lot.py
Executable file
@@ -0,0 +1,286 @@
|
||||
# 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.model import fields
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Bool, Eval, Id
|
||||
from trytond.model import (ModelSQL, ModelView)
|
||||
from decimal import getcontext, Decimal, ROUND_HALF_UP
|
||||
from sql.aggregate import Count, Max, Min, Sum, Avg, BoolOr
|
||||
from sql import Column, Literal
|
||||
from sql.functions import CurrentTimestamp, DateTrunc
|
||||
import datetime
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class Lot(ModelSQL, ModelView):
|
||||
"Lot"
|
||||
__name__ = 'lot.lot'
|
||||
_rec_name = 'lot_name'
|
||||
|
||||
line = fields.Many2One(
|
||||
'purchase.line', "Line", ondelete='CASCADE',
|
||||
)
|
||||
sale_line = fields.Many2One(
|
||||
'sale.line', "Line", ondelete='CASCADE',
|
||||
)
|
||||
lot_name = fields.Char("Lot")
|
||||
lot_qt = fields.Integer("Quantity",states={
|
||||
'readonly': Eval('lot_himself', True),
|
||||
},)
|
||||
lot_unit = fields.Many2One('product.uom', "Unit",required=True)
|
||||
lot_product = fields.Many2One('product.product', "Product")
|
||||
lot_type = fields.Selection([
|
||||
(None, ''),
|
||||
('delivery', 'Delivery'),
|
||||
('loss', 'Loss'),
|
||||
('receive', 'Receive')
|
||||
], 'Lot type',required=True)
|
||||
lot_status = fields.Selection([
|
||||
(None, ''),
|
||||
('forecast', 'Forecast'),
|
||||
('nom', 'Nom'),
|
||||
('adjusted', 'Adjusted'),
|
||||
('trade', 'Trade')
|
||||
], 'Lot status',required=True)
|
||||
lot_quantity = fields.Numeric("Net Qt",digits='lot_unit',required=True)
|
||||
lot_unit_line = fields.Function(fields.Many2One('product.uom', "Unit",required=True),'get_unit')
|
||||
lot_premium = fields.Numeric("Prem/Disc", digits=(1,2))
|
||||
lot_premium_sale = fields.Numeric("Prem/Disc", digits=(1,2))
|
||||
lot_shipment = fields.Many2One('stock.shipment.in', "Shipment")
|
||||
lot_gross_quantity = fields.Numeric("Gross Qt",digits='lot_unit')
|
||||
lot_parent = fields.Many2One('purchase.lot',"Parent")
|
||||
lot_childs = fields.One2Many('purchase.lot','lot_parent',"Childs")
|
||||
lot_himself = fields.Many2One('purchase.lot',"Lot")
|
||||
lot_container = fields.Char("Container")
|
||||
lot_qt_hist = fields.One2Many('purchase.lot.qt','lot',"Qt history")
|
||||
|
||||
lot_unit_line = fields.Function(fields.Many2One('product.uom', "Unit"),'get_unit')
|
||||
lot_price = fields.Function(fields.Numeric("Price", digits=(1,2)),'get_lot_price')
|
||||
lot_price_sale = fields.Function(fields.Numeric("Price", digits=(1,2)),'get_lot_sale_price')
|
||||
|
||||
# lot_tu_net_qt = fields.Numeric("Net Takeup Qt")
|
||||
# lot_tu_gross_qt = fields.Numeric("Gross Takeup Qt")
|
||||
# lot_wr_net_qt = fields.Numeric("Net WR Qt")
|
||||
# lot_wr_gross_qt = fields.Numeric("Gross WR Qt")
|
||||
# lot_lr_net_qt = fields.Numeric("Net LR Qt")
|
||||
# lot_lr_gross_qt = fields.Numeric("Gross LR Qt")
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(Lot, cls).__setup__()
|
||||
cls._order.insert(0, ('lot_shipment', 'ASC'))
|
||||
|
||||
|
||||
@classmethod
|
||||
def default_lot_unit(cls):
|
||||
return 2 #kg
|
||||
|
||||
@classmethod
|
||||
def default_lot_qt(cls):
|
||||
return Decimal(0)
|
||||
|
||||
@classmethod
|
||||
def default_lot_gross_quantity(cls):
|
||||
return Decimal(0)
|
||||
|
||||
@classmethod
|
||||
def default_lot_status(cls):
|
||||
return 'trade'
|
||||
|
||||
@classmethod
|
||||
def default_lot_type(cls):
|
||||
return 'receive'
|
||||
|
||||
def get_unit(self,name):
|
||||
return 2 #kg
|
||||
|
||||
def get_lot_price(self,name=None):
|
||||
price = Decimal(0)
|
||||
if self.line:
|
||||
l = Pool().get('purchase.line')(self.line)
|
||||
premium = Decimal(0)
|
||||
if self.lot_premium:
|
||||
premium = self.lot_premium
|
||||
price = premium + l.unit_price
|
||||
return round(price,2)
|
||||
|
||||
def get_lot_sale_price(self,name=None):
|
||||
price = Decimal(0)
|
||||
# if self.sale_line:
|
||||
# l = Pool().get('sale.line')(self.sale_line)
|
||||
# premium = Decimal(0)
|
||||
# if self.lot_premium_sale:
|
||||
# premium = self.lot_premium_sale
|
||||
# price = premium + l.unit_price
|
||||
return round(price,2)
|
||||
|
||||
def get_sale_amount(self,name):
|
||||
round_context = getcontext()
|
||||
round_context.rounding = ROUND_HALF_UP
|
||||
price = self.get_lot_sale_price()
|
||||
# if price and not self.lot_wr_net_qt:
|
||||
# return round(price * self.lot_quantity * Decimal(2.2046),2)
|
||||
# elif price and self.lot_wr_net_qt:
|
||||
# return round(price * self.lot_wr_net_qt * Decimal(2.2046),2)
|
||||
return None
|
||||
|
||||
def get_amount(self,name):
|
||||
round_context = getcontext()
|
||||
round_context.rounding = ROUND_HALF_UP
|
||||
price = self.get_lot_price()
|
||||
# if price and not self.lot_wr_net_qt:
|
||||
# return round(price * self.lot_quantity * Decimal(2.2046),2)
|
||||
# elif price and self.lot_wr_net_qt:
|
||||
# return round(price * self.lot_wr_net_qt * Decimal(2.2046),2)
|
||||
return None
|
||||
|
||||
# @classmethod
|
||||
# def write(cls, *args):
|
||||
# super().write(*args)
|
||||
# lots = sum(args[::2], [])
|
||||
# to_write = []
|
||||
# for l in lots:
|
||||
# lotnetqt = Decimal(0)
|
||||
# lotgrossqt = Decimal(0)
|
||||
# if l.lot_lr_net_qt and l.lot_lr_net_qt > 0 and l.lot_lr_net_qt != l.lot_quantity:
|
||||
# lotnetqt = l.lot_lr_net_qt
|
||||
# lotgrossqt = l.lot_lr_gross_qt
|
||||
# elif l.lot_wr_net_qt and not l.lot_lr_net_qt and l.lot_wr_net_qt > 0 and l.lot_wr_net_qt != l.lot_quantity:
|
||||
# lotnetqt = l.lot_wr_net_qt
|
||||
# lotgrossqt = l.lot_wr_gross_qt
|
||||
# elif l.lot_tu_net_qt and not l.lot_lr_net_qt and not l.lot_wr_net_qt and l.lot_tu_net_qt > 0 and l.lot_tu_net_qt != l.lot_quantity:
|
||||
# lotnetqt = l.lot_tu_net_qt
|
||||
# lotgrossqt = l.lot_tu_gross_qt
|
||||
# if lotnetqt:
|
||||
# to_write.extend(([l], {
|
||||
# 'lot_quantity': lotnetqt,
|
||||
# 'lot_final_quantity': lotgrossqt,
|
||||
# }))
|
||||
# if to_write:
|
||||
# cls.write(*to_write)
|
||||
|
||||
# @classmethod
|
||||
# def create(cls, vlist):
|
||||
# pool = Pool()
|
||||
# vlist = [x.copy() for x in vlist]
|
||||
# for values in vlist:
|
||||
# parent = values.get('lot_parent')
|
||||
# if parent:
|
||||
# L = pool.get('position.lot')
|
||||
# l = L(parent)
|
||||
# balenw = round(Decimal((l.lot_quantity if l.lot_quantity else 0)/l.lot_bale),2)
|
||||
# balegw = round(Decimal((l.lot_final_quantity if l.lot_final_quantity else 0)/l.lot_bale),2)
|
||||
# balenwtu = round(Decimal((l.lot_tu_net_qt if l.lot_tu_net_qt else 0)/l.lot_bale),2)
|
||||
# balegwtu = round(Decimal((l.lot_tu_gross_qt if l.lot_tu_gross_qt else 0)/l.lot_bale),2)
|
||||
# balenwwr = round(Decimal((l.lot_wr_net_qt if l.lot_wr_net_qt else 0)/l.lot_bale),2)
|
||||
# balegwwr = round(Decimal((l.lot_wr_gross_qt if l.lot_wr_gross_qt else 0)/l.lot_bale),2)
|
||||
# balenwlr = round(Decimal((l.lot_lr_net_qt if l.lot_lr_net_qt else 0)/l.lot_bale),2)
|
||||
# balegwlr = round(Decimal((l.lot_lr_gross_qt if l.lot_lr_gross_qt else 0)/l.lot_bale),2)
|
||||
# nw = Decimal(int(values.get('lot_bale')) * balenw)
|
||||
# gw = Decimal(int(values.get('lot_bale')) * balegw)
|
||||
# nwtu = Decimal(int(values.get('lot_bale')) * balenwtu)
|
||||
# gwtu = Decimal(int(values.get('lot_bale')) * balegwtu)
|
||||
# nwwr = Decimal(int(values.get('lot_bale')) * balenwwr)
|
||||
# gwwr = Decimal(int(values.get('lot_bale')) * balegwwr)
|
||||
# nwlr = Decimal(int(values.get('lot_bale')) * balenwlr)
|
||||
# gwlr = Decimal(int(values.get('lot_bale')) * balegwlr)
|
||||
# l.lot_bale -= int(values.get('lot_bale'))
|
||||
# if l.lot_quantity:
|
||||
# l.lot_quantity -= nw
|
||||
# if l.lot_final_quantity:
|
||||
# l.lot_final_quantity -= gw
|
||||
# if l.lot_tu_net_qt:
|
||||
# l.lot_tu_net_qt -= nwtu
|
||||
# if l.lot_tu_gross_qt:
|
||||
# l.lot_tu_gross_qt -= gwtu
|
||||
# if l.lot_wr_net_qt:
|
||||
# l.lot_wr_net_qt -= nwwr
|
||||
# if l.lot_wr_gross_qt:
|
||||
# l.lot_wr_gross_qt -= gwwr
|
||||
# if l.lot_lr_net_qt:
|
||||
# l.lot_lr_net_qt -= nwlr
|
||||
# if l.lot_lr_gross_qt:
|
||||
# l.lot_lr_gross_qt -= gwlr
|
||||
# values['lot_quantity'] = nw
|
||||
# values['lot_final_quantity'] = gw
|
||||
# values['lot_tu_net_qt'] = nwtu
|
||||
# values['lot_tu_gross_qt'] = gwtu
|
||||
# values['lot_wr_net_qt'] = nwwr
|
||||
# values['lot_wr_gross_qt'] = gwwr
|
||||
# values['lot_lr_net_qt'] = nwlr
|
||||
# values['lot_lr_gross_qt'] = gwlr
|
||||
# L.save([l])
|
||||
|
||||
# return super(Lot, cls).create(vlist)
|
||||
|
||||
# @classmethod
|
||||
# def validate(cls, lots):
|
||||
# super(Lot, cls).validate(lots)
|
||||
# pool = Pool()
|
||||
# Valuation = pool.get('valuation.valuation')
|
||||
# Position = pool.get('trade.position')
|
||||
# for lot in lots:
|
||||
# L = pool.get('position.lot')
|
||||
# if not lot.lot_himself:
|
||||
# l = L(lot.id)
|
||||
# l.lot_himself = lot.id
|
||||
# L.save([l])
|
||||
# if lot.lot_parent:
|
||||
# pa = L(lot.lot_parent)
|
||||
# l = L(lot.id)
|
||||
# l.position = pa.position
|
||||
# l.lot_quality = pa.lot_quality
|
||||
# l.lot_unit = pa.lot_unit
|
||||
# L.save([l])
|
||||
|
||||
# @classmethod
|
||||
# def copy(cls, positions, default=None):
|
||||
# if default is None:
|
||||
# default = {}
|
||||
# else:
|
||||
# default = default.copy()
|
||||
# return super(Lot, cls).copy(lots, default=default)
|
||||
|
||||
# @classmethod
|
||||
# def delete(cls, lots):
|
||||
# positions = []
|
||||
# pool = Pool()
|
||||
# LL = pool.get('position.lot')
|
||||
# for lot in lots:
|
||||
# positions.append(lot.position)
|
||||
# if lot.lot_parent:
|
||||
# pa = LL(lot.lot_parent)
|
||||
# if pa:
|
||||
# pa.lot_bale += lot.lot_bale
|
||||
# pa.lot_quantity += lot.lot_quantity
|
||||
# pa.lot_final_quantity += lot.lot_final_quantity
|
||||
# if pa.lot_tu_net_qt:
|
||||
# pa.lot_tu_net_qt += lot.lot_tu_net_qt
|
||||
# pa.lot_tu_gross_qt += lot.lot_tu_gross_qt
|
||||
# if pa.lot_wr_net_qt:
|
||||
# pa.lot_wr_net_qt += lot.lot_wr_net_qt
|
||||
# pa.lot_wr_gross_qt += lot.lot_wr_gross_qt
|
||||
# if pa.lot_lr_net_qt:
|
||||
# pa.lot_lr_net_qt += lot.lot_lr_net_qt
|
||||
# pa.lot_lr_gross_qt += lot.lot_lr_gross_qt
|
||||
# LL.save([pa])
|
||||
# super(Lot, cls).delete(lots)
|
||||
|
||||
class QtType(ModelSQL, ModelView):
|
||||
"Type"
|
||||
__name__ = 'lot.qt.type'
|
||||
name = fields.Char("Name")
|
||||
|
||||
class QtHist(ModelSQL, ModelView):
|
||||
"Quantities"
|
||||
__name__ = 'lot.qt'
|
||||
|
||||
lot = fields.Many2One(
|
||||
'lot.lot', "Lot", ondelete='CASCADE',
|
||||
)
|
||||
quantity_type = fields.Many2One('lot.qt.type',"Type")
|
||||
quantity = fields.Numeric("Quantity")
|
||||
|
||||
|
||||
|
||||
57
modules/lot/build/lib/trytond/modules/lot/lot.xml
Executable file
57
modules/lot/build/lib/trytond/modules/lot/lot.xml
Executable file
@@ -0,0 +1,57 @@
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="lot_view_tree">
|
||||
<field name="model">lot.lot</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority" eval="10"/>
|
||||
<field name="name">lot_tree</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="lot_view_tree_sequence">
|
||||
<field name="model">lot.lot</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="name">lot_tree_sequence</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="lot_view_tree_sequence2">
|
||||
<field name="model">lot.lot</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="name">lot_tree_sequence2</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="lot_view_tree_sequence3">
|
||||
<field name="model">lot.lot</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="name">lot_tree_sequence3</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="lot_view_form">
|
||||
<field name="model">lot.lot</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">lot_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="lot_qt_view_tree">
|
||||
<field name="model">lot.qt</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority" eval="10"/>
|
||||
<field name="name">lot_qt_tree</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="lot_qt_view_tree_sequence">
|
||||
<field name="model">lot.qt</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="name">lot_qt_tree_sequence</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="lot_qt_type_view_tree">
|
||||
<field name="model">lot.qt.type</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority" eval="10"/>
|
||||
<field name="name">lot_qt_type_tree</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="lot_qt_type_view_tree_sequence">
|
||||
<field name="model">lot.qt.type</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="name">lot_qt_type_tree_sequence</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
9
modules/lot/build/lib/trytond/modules/lot/tryton.cfg
Executable file
9
modules/lot/build/lib/trytond/modules/lot/tryton.cfg
Executable file
@@ -0,0 +1,9 @@
|
||||
[tryton]
|
||||
version=7.2.7
|
||||
depends:
|
||||
ir
|
||||
purchase
|
||||
sale
|
||||
res
|
||||
xml:
|
||||
lot.xml
|
||||
26
modules/lot/build/lib/trytond/modules/lot/view/lot_form.xml
Executable file
26
modules/lot/build/lib/trytond/modules/lot/view/lot_form.xml
Executable file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0"?>
|
||||
<form col="4">
|
||||
<label name="lot_name"/>
|
||||
<field name="lot_name"/>
|
||||
<label name="lot_parent"/>
|
||||
<field name="lot_parent"/>
|
||||
<label name="lot_qt"/>
|
||||
<field name="lot_qt"/>
|
||||
<label name="lot_product"/>
|
||||
<field name="lot_product"/>
|
||||
<label name="lot_type"/>
|
||||
<field name="lot_type"/>
|
||||
<label name="lot_status"/>
|
||||
<field name="lot_status"/>
|
||||
<label name="lot_shipment"/>
|
||||
<field name="lot_shipment"/>
|
||||
<label name="lot_quantity"/>
|
||||
<field name="lot_quantity"/>
|
||||
<label name="lot_gross_quantity"/>
|
||||
<field name="lot_gross_quantity"/>
|
||||
<newline/>
|
||||
<label name="lot_unit"/>
|
||||
<field name="lot_unit"/>
|
||||
<newline/>
|
||||
<field name="lot_childs" colspan="4" mode="tree,form" view_ids="purchase.lot_view_tree_sequence2,purchase.lot_view_form"/>
|
||||
</form>
|
||||
4
modules/lot/build/lib/trytond/modules/lot/view/lot_qt_tree.xml
Executable file
4
modules/lot/build/lib/trytond/modules/lot/view/lot_qt_tree.xml
Executable file
@@ -0,0 +1,4 @@
|
||||
<tree>
|
||||
<field name="quantity_type"/>
|
||||
<field name="quantity"/>
|
||||
</tree>
|
||||
4
modules/lot/build/lib/trytond/modules/lot/view/lot_qt_tree_sequence.xml
Executable file
4
modules/lot/build/lib/trytond/modules/lot/view/lot_qt_tree_sequence.xml
Executable file
@@ -0,0 +1,4 @@
|
||||
<tree>
|
||||
<field name="quantity_type"/>
|
||||
<field name="quantity"/>
|
||||
</tree>
|
||||
3
modules/lot/build/lib/trytond/modules/lot/view/lot_qt_type_tree.xml
Executable file
3
modules/lot/build/lib/trytond/modules/lot/view/lot_qt_type_tree.xml
Executable file
@@ -0,0 +1,3 @@
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
@@ -0,0 +1,3 @@
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
12
modules/lot/build/lib/trytond/modules/lot/view/lot_tree.xml
Executable file
12
modules/lot/build/lib/trytond/modules/lot/view/lot_tree.xml
Executable file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<tree>
|
||||
<field name="lot_himself"/>
|
||||
<field name="line"/>
|
||||
<field name="lot_type"/>
|
||||
<field name="lot_status"/>
|
||||
<field name="lot_shipment"/>
|
||||
<field name="lot_quantity"/>
|
||||
<field name="lot_unit"/>
|
||||
<field name="lot_gross_quantity"/>
|
||||
<field name="lot_parent"/>
|
||||
</tree>
|
||||
16
modules/lot/build/lib/trytond/modules/lot/view/lot_tree_sequence.xml
Executable file
16
modules/lot/build/lib/trytond/modules/lot/view/lot_tree_sequence.xml
Executable file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0"?>
|
||||
<tree sequence="sequence" editable="1">
|
||||
<field name="lot_himself" width="80"/>
|
||||
<field name="lot_qt" width="80"/>
|
||||
<field name="lot_product" width="80"/>
|
||||
<field name="lot_type" width="80" optional="1"/>
|
||||
<field name="lot_status" width="80" optional="1"/>
|
||||
<field name="lot_shipment" width="120"/>
|
||||
<field name="lot_quantity" width="80"/>
|
||||
<field name="lot_unit" width="80"/>
|
||||
<field name="lot_gross_quantity" width="80"/>
|
||||
<field name="lot_premium" width="80"/>
|
||||
<field name="lot_price" width="80"/>
|
||||
<field name="lot_type" width="80"/>
|
||||
<field name="lot_status" width="80"/>
|
||||
</tree>
|
||||
8
modules/lot/build/lib/trytond/modules/lot/view/lot_tree_sequence2.xml
Executable file
8
modules/lot/build/lib/trytond/modules/lot/view/lot_tree_sequence2.xml
Executable file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<tree sequence="sequence" editable="1">
|
||||
<field name="lot_name" width="80"/>
|
||||
<field name="lot_qt" width="80"/>
|
||||
<field name="lot_quantity" width="80"/>
|
||||
<field name="lot_unit" width="80"/>
|
||||
<field name="lot_gross_quantity" width="80"/>
|
||||
</tree>
|
||||
14
modules/lot/build/lib/trytond/modules/lot/view/lot_tree_sequence3.xml
Executable file
14
modules/lot/build/lib/trytond/modules/lot/view/lot_tree_sequence3.xml
Executable file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0"?>
|
||||
<tree sequence="sequence" editable="1">
|
||||
<field name="lot_himself" width="80"/>
|
||||
<field name="lot_qt" width="80"/>
|
||||
<field name="lot_product" width="80"/>
|
||||
<field name="lot_type" width="80" optional="1"/>
|
||||
<field name="lot_status" width="80" optional="1"/>
|
||||
<field name="lot_shipment" width="120"/>
|
||||
<field name="lot_quantity" width="80"/>
|
||||
<field name="lot_unit" width="80"/>
|
||||
<field name="lot_gross_quantity" width="80"/>
|
||||
<field name="lot_premium_sale" width="80"/>
|
||||
<field name="lot_price_sale" width="80"/>
|
||||
</tree>
|
||||
Reference in New Issue
Block a user