7 |
use PAPO; |
use PAPO; |
8 |
my $uniqed=0; |
my $uniqed=0; |
9 |
</neb:Block> |
</neb:Block> |
10 |
<!-- <maintoolbar enabled=""/> --> |
|
11 |
<datasource name="focusDataSource" cache="1"/> |
<neb:Sub neb:src="itemizable.nebc" |
12 |
<datasource name="searchDataSource" cache="1"/> |
account_plan = "4" |
13 |
<!-- |
item = "product" |
14 |
datasource usado para la búsqueda (primer pantaia) |
item_name = "Producto" |
15 |
--> |
/> |
|
<datasource name="productResultDataSource" database="papo" |
|
|
table="_product_data, _product_code_data" |
|
|
cache="15" order_by="_product_data.canonical_name"> |
|
|
<condition> |
|
|
<and> |
|
|
<!-- pega product con product_code --> |
|
|
<eq> |
|
|
<cfield name="_product_data._table"/> |
|
|
<cfield name="_product_code_data.product"/> |
|
|
</eq> |
|
|
<!-- solamente códigos internos (id 1) --> |
|
|
<eq> |
|
|
<cfield name="_product_code_data.product_code_type"/> |
|
|
<cconst value="1"/> |
|
|
</eq> |
|
|
<!-- descarta productos muertos --> |
|
|
<null> |
|
|
<cfield name="_product_data._end_t"/> |
|
|
</null> |
|
|
<!-- descarta códigos de producto muertos --> |
|
|
<null> |
|
|
<cfield name="_product_code_data._end_t"/> |
|
|
</null> |
|
|
</and> |
|
|
</condition> |
|
|
</datasource> |
|
|
<!--datasource para dropdown de currency--> |
|
|
<datasource name="currencyDataSource" database="papo" table="_currency_type_data"> |
|
|
<condition> |
|
|
<and> |
|
|
<null> |
|
|
<cfield name="_currency_type_data._end_t"/> |
|
|
</null> |
|
|
</and> |
|
|
</condition> |
|
|
</datasource> |
|
|
|
|
|
<!-- Data source para la impresion --> |
|
|
<datasource name="printProductDataSource" database="papo" |
|
|
table="_product_data, _product_code_data, _product_store_data" |
|
|
cache="15" order_by="_product_data.canonical_name"> |
|
|
<joinconditions> |
|
|
<join type="left"> |
|
|
<join type="left"> |
|
|
<left_table name="_product_data"/> |
|
|
<right_table name="_product_code_data"/> |
|
|
<condition> |
|
|
<eq> |
|
|
<cfield name="_product_data._table"/> |
|
|
<cfield name="_product_code_data.product"/> |
|
|
</eq> |
|
|
</condition> |
|
|
</join> |
|
|
<right_table name="_product_store_data"/> |
|
|
<condition> |
|
|
<eq> |
|
|
<cfield name="_product_data._table"/> |
|
|
<cfield name="_product_store_data.product"/> |
|
|
</eq> |
|
|
</condition> |
|
|
</join> |
|
|
</joinconditions> |
|
|
<condition> |
|
|
<and> |
|
|
<!-- pega product con price --> |
|
|
<!-- <eq> --> |
|
|
<!-- <cfield name="_product_data._table"/> --> |
|
|
<!-- <cfield name="_price_data.product"/> --> |
|
|
<!-- </eq> --> |
|
|
<!-- solamente lista 1 --> |
|
|
<!-- <eq> --> |
|
|
<!-- <cfield name="_price_data.price_type"/> --> |
|
|
<!-- <cconst value="1"/> --> |
|
|
<!-- </eq> --> |
|
|
<!-- pega product con product_code --> |
|
|
<!-- <eq> --> |
|
|
<!-- <cfield name="_product_data._table"/> --> |
|
|
<!-- <cfield name="_product_code_data.product"/> --> |
|
|
<!-- </eq> --> |
|
|
<!-- solamente códigos internos (id 1) --> |
|
|
<eq> |
|
|
<cfield name="_product_code_data.product_code_type"/> |
|
|
<cconst value="1"/> |
|
|
</eq> |
|
|
<!-- pega product con product_store --> |
|
|
<!-- <eq> --> |
|
|
<!-- <cfield name="_product_data._table"/> --> |
|
|
<!-- <cfield name="_product_store_data.product"/> --> |
|
|
<!-- </eq> --> |
|
|
<!-- descarta productos muertos --> |
|
|
<null> |
|
|
<cfield name="_product_data._end_t"/> |
|
|
</null> |
|
|
<!-- descarta precios muertos --> |
|
|
<!-- <null> --> |
|
|
<!-- <cfield name="_price_data._end_t"/> --> |
|
|
<!-- </null> --> |
|
|
<!-- descarta códigos de producto muertos --> |
|
|
<null> |
|
|
<cfield name="_product_code_data._end_t"/> |
|
|
</null> |
|
|
<!-- descarta product_stores muertos --> |
|
|
<null> |
|
|
<cfield name="_product_store_data._end_t"/> |
|
|
</null> |
|
|
<!-- FALTA: product_store.storehouse --> |
|
|
</and> |
|
|
</condition> |
|
|
</datasource> |
|
|
|
|
|
<!-- lo mismo que arriba, el anterior es para buscar, este para |
|
|
ABM de uno en particular (segunda pantaia) --> |
|
|
<datasource name="productDataSource" database="papo" |
|
|
table="product, _product_data, price, _price_data, product_code, _product_code_data, product_tax, _product_tax_data" |
|
|
historytable="_product_data, _price_data, _product_code_data, _product_tax_data" |
|
|
order_by="_product_data.canonical_name,_product_code_data.code"> |
|
|
<condition> |
|
|
<and> |
|
|
<!-- pega product con su _data --> |
|
|
<eq> |
|
|
<cfield name="product.id"/> |
|
|
<cfield name="_product_data._table"/> |
|
|
</eq> |
|
|
<!-- descarta productos muertos --> |
|
|
<null> |
|
|
<cfield name="_product_data._end_t"/> |
|
|
</null> |
|
|
<!-- pega product con price --> |
|
|
<eq> |
|
|
<cfield name="product.id"/> |
|
|
<cfield name="_price_data.product"/> |
|
|
</eq> |
|
|
<!-- pega price con su _data --> |
|
|
<eq> |
|
|
<cfield name="price.id"/> |
|
|
<cfield name="_price_data._table"/> |
|
|
</eq> |
|
|
<!-- solamente lista 1 --> |
|
|
<eq> |
|
|
<cfield name="_price_data.price_type"/> |
|
|
<cconst value="1"/> |
|
|
</eq> |
|
|
<!-- descarta precios muertos --> |
|
|
<null> |
|
|
<cfield name="_price_data._end_t"/> |
|
|
</null> |
|
|
<!-- pega product con product_code --> |
|
|
<eq> |
|
|
<cfield name="product.id"/> |
|
|
<cfield name="_product_code_data.product"/> |
|
|
</eq> |
|
|
<!-- pega product_code con su _data --> |
|
|
<eq> |
|
|
<cfield name="product_code.id"/> |
|
|
<cfield name="_product_code_data._table"/> |
|
|
</eq> |
|
|
<!-- solamente códigos internos (id 1) --> |
|
|
<eq> |
|
|
<cfield name="_product_code_data.product_code_type"/> |
|
|
<cconst value="1"/> |
|
|
</eq> |
|
|
<!-- descarta códigos de producto muertos --> |
|
|
<null> |
|
|
<cfield name="_product_code_data._end_t"/> |
|
|
</null> |
|
|
<!-- pega product con product_tax --> |
|
|
<eq> |
|
|
<cfield name="product.id"/> |
|
|
<cfield name="_product_tax_data.product"/> |
|
|
</eq> |
|
|
<!-- pega product_tax con su _data --> |
|
|
<eq> |
|
|
<cfield name="product_tax.id"/> |
|
|
<cfield name="_product_tax_data._table"/> |
|
|
</eq> |
|
|
<!-- descarta product_taxes muertos --> |
|
|
<null> |
|
|
<cfield name="_product_tax_data._end_t"/> |
|
|
</null> |
|
|
<!-- solamente 'IVA' (id 1) --> |
|
|
<eq> |
|
|
<cfield name="_product_tax_data.tax"/> |
|
|
<cconst value="1"/> |
|
|
</eq> |
|
|
<!-- FALTA: product_store.storehouse --> |
|
|
</and> |
|
|
</condition> |
|
|
</datasource> |
|
|
|
|
|
<!-- datasources para dropdowns: con buscar los not null en _data estamos --> |
|
|
|
|
|
<datasource name="productClassificationDataSource" database="papo" |
|
|
table="_product_classification_data" order_by="name"> |
|
|
<condition> |
|
|
<and> |
|
|
<null> |
|
|
<cfield name="_end_t"/> |
|
|
</null> |
|
|
</and> |
|
|
</condition> |
|
|
</datasource> |
|
|
|
|
|
<datasource name="physicalStructureDataSource" database="papo" |
|
|
table="_physical_structure_data" order_by="name"> |
|
|
<condition> |
|
|
<null> |
|
|
<cfield name="_end_t"/> |
|
|
</null> |
|
|
</condition> |
|
|
</datasource> |
|
|
|
|
|
<datasource name="countryDataSource" database="papo" |
|
|
table="_country_data" order_by="name"> |
|
|
<condition> |
|
|
<null> |
|
|
<cfield name="_end_t"/> |
|
|
</null> |
|
|
</condition> |
|
|
</datasource> |
|
|
|
|
|
<datasource name="taxDataSource" database="papo" table="_tax_data"> |
|
|
<condition> |
|
|
<null> |
|
|
<cfield name="_end_t"/> |
|
|
</null> |
|
|
</condition> |
|
|
</datasource> |
|
|
|
|
|
<trigger name="startUp" type="On-Startup"> |
|
|
#cargo el own-pos entity id |
|
|
callTrigger('searchOwnPosData') |
|
|
</trigger> |
|
|
|
|
|
<neb:Sub neb:src="wait.nebc"/> |
|
|
|
|
|
<trigger name="printTrigger" type="NAMED"> |
|
|
callTrigger('startWaitingModeTrigger') |
|
|
import gnue.common.GConditions as GConditions |
|
|
import string |
|
|
import hack |
|
|
import printing |
|
|
|
|
|
table = [] |
|
|
table.append (printing.printDate ()) |
|
|
line = "\n\nListado de Productos\n\n\n" |
|
|
table.append(line) |
|
|
|
|
|
line = " | "+printing.printTitle("Código",13)+" | " |
|
|
line += printing.printTitle("Nombre",48)+" | " |
|
|
line += printing.printTitle("Stock",8)+" | " |
|
|
lineLen = len(line) |
|
|
table.append(line) |
|
|
line = "" |
|
|
for idx in range(lineLen): |
|
|
line += "-" |
|
|
table.append(line) |
|
|
|
|
|
productCondition = GConditions.GConditions() |
|
|
tmpAnd = GConditions.GCand(productCondition) |
|
|
if str(productSearchBlock.searchCodeEntry) or str(productSearchBlock.searchNameEntry): |
|
|
if str(productSearchBlock.searchCodeEntry): |
|
|
eq1 = GConditions.GClike(tmpAnd) |
|
|
GConditions.GCField(eq1,"_product_code_data.code") |
|
|
GConditions.GCConst(eq1,str(productSearchBlock.searchCodeEntry)+'%') |
|
|
if str(productSearchBlock.searchNameEntry): |
|
|
eq2 = GConditions.GClike(tmpAnd) |
|
|
GConditions.GCField(eq2,"_product_data.name") |
|
|
GConditions.GCConst(eq2,str(productSearchBlock.searchNameEntry)+'%') |
|
|
|
|
|
tmpOr = GConditions.GCor(tmpAnd) |
|
|
eq3 = GConditions.GClike(tmpOr) |
|
|
GConditions.GCField(eq3,"_product_store_data.storehouse") |
|
|
GConditions.GCConst(eq3,str(ownStorehouseBlock.ownStorehouseIdEntry)) |
|
|
tmpNull = GConditions.GCnull(tmpOr) |
|
|
GConditions.GCField(tmpNull,"_product_store_data.storehouse") |
|
|
|
|
|
productResulSet = printProductDataSource.createResultSet(productCondition) |
|
|
|
|
|
more = productResulSet.firstRecord(); |
|
|
|
|
|
while more: |
|
|
line = " | "+printing.printField(productResulSet.current.getField("_product_code_data.code"),13,'l')+" | " |
|
|
line += printing.printField(productResulSet.current.getField("_product_data.canonical_name"),48,'l')+" | " |
|
|
if productResulSet.current.getField("_product_store_data.level"): |
|
|
line += printing.printField("%0.2f" % productResulSet.current.getField("_product_store_data.level"),8,'r')+" | " |
|
|
else: |
|
|
line += printing.printField("0.00",8,'r')+" | " |
|
|
table.append(line) |
|
|
more = productResulSet.nextRecord() |
|
|
|
|
|
callTrigger('endWaitingModeTrigger') |
|
|
printing.previewPrint(table) |
|
|
</trigger> |
|
|
|
|
|
<trigger name="productCommitTrigger" type="NAMED"><![CDATA[ |
|
|
from hack import a2f |
|
|
bad=0 |
|
|
if not str(productBlock.codeEntry): |
|
|
self.genericBox('Por favor, ingrese un código para el producto.',['Aceptar']) |
|
|
bad = bad+1 |
|
|
if not a2f(productBlock.priceEntry): |
|
|
self.genericBox('Por favor, ingrese un precio para el producto.',['Aceptar']) |
|
|
bad = bad+1 |
|
|
if not bad: |
|
|
from gnue.common.GDataObjects import ConnectionError as DBError |
|
|
if productBlock.getCurrentRecord().isInserted(): |
|
|
productBlock.priceTypeEntry = 1 |
|
|
productBlock.productCodeTypeEntry = 1 |
|
|
productBlock.productTaxEntry = 1 |
|
|
productBlock.levelEntry = 0 |
|
|
try: |
|
|
productBlock.postChanges() |
|
|
commitConnection() |
|
|
except DBError, err: |
|
|
rollbackConnection() |
|
|
genericBox("Hay problemas para grabar los datos del producto\n"+str(err),['Aceptar']) |
|
|
else: |
|
|
try: |
|
|
productBlock.postChanges() |
|
|
commitConnection() |
|
|
except DBError, err: |
|
|
rollbackConnection() |
|
|
genericBox("Hay problemas para actualizar los datos del producto\n"+str(err),['Aceptar']) |
|
|
|
|
|
]]></trigger> |
|
|
|
|
|
<trigger name="productDeleteTrigger" type="NAMED"><![CDATA[ |
|
|
import hack |
|
|
hack.deleteCurrentRecord(productBlock) |
|
|
]]></trigger> |
|
|
|
|
|
<trigger name="productRollbackTrigger" type="NAMED"><![CDATA[ |
|
|
import hack |
|
|
productBlock.reset() |
|
|
callTrigger ('account_planForId') |
|
|
callTrigger ('product_classificationForId') |
|
|
callTrigger ('countryForId') |
|
|
]]></trigger> |
|
|
|
|
|
<trigger name="askForChangesTrigger" type="NAMED"><![CDATA[ |
|
|
import hack |
|
|
|
|
|
hack.confirmPageChanges(self, 'productCommitTrigger', productBlock) |
|
|
]]></trigger> |
|
|
|
|
|
<trigger name="productSearchTrigger" type="NAMED"><![CDATA[ |
|
|
try: |
|
|
from gnue.forms.GFEvent import GFEvent |
|
|
except ImportError: |
|
|
from gnue.common.events.Event import Event as GFEvent |
|
|
|
|
|
setStatusText('buscando...') |
|
|
|
|
|
self._object.dispatchEvent(GFEvent('beginWAIT')) |
|
|
productResultBlock.clear() |
|
|
productResultBlock.initQuery() |
|
|
if str(productSearchBlock.searchCodeEntry): |
|
|
productResultBlock.codeListEntry = str(productSearchBlock.searchCodeEntry)+'%' |
|
|
if str(productSearchBlock.searchNameEntry): |
|
|
productResultBlock.nameListEntry = '%'+str(productSearchBlock.searchNameEntry)+'%' # |
|
|
productResultBlock.processQuery() |
|
|
|
|
|
setStatusText('Aceptar') |
|
|
self._object.dispatchEvent(GFEvent('endWAIT')) |
|
|
|
|
|
if productResultBlock.isEmpty(): |
|
|
productSearchBlock.funnyLabel = ' no se encontraron registros' |
|
|
else: |
|
|
productSearchBlock.funnyLabel ='%6d registros encontrados' % productResultBlock.getRecordCount() |
|
|
|
|
|
]]></trigger> |
|
|
|
|
|
<page name="Búsqueda"> |
|
|
<trigger type="Pre-Focusout"><![CDATA[ |
|
|
productBlock.clear() |
|
|
if productResultBlock.getRecordCount() > 0 and not productResultBlock.getCurrentRecord().isEmpty(): |
|
|
productBlock.initQuery() |
|
|
productBlock.productIdEntry = ("%s" % productResultBlock.productIdREntry) |
|
|
productBlock.processQuery() |
|
|
productResultBlock.reset() |
|
|
]]></trigger> |
|
|
<lam:box height="1"/> |
|
|
<lam:box> |
|
|
<block name="productSearchBlock" datasource="searchDataSource"> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<lam:box width="1"/> |
|
|
<label text="Ingrese los datos del producto a buscar:"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<lam:box width="1"/> |
|
|
<lam:box> |
|
|
<label text="el Nombre (canónico):"/> |
|
|
<label text="el Código Interno:"/> |
|
|
</lam:box> |
|
|
<lam:box> |
|
|
<entry name="searchNameEntry"/> |
|
|
<entry name="searchCodeEntry"/> |
|
|
</lam:box> |
|
|
<lam:box width="1"/> |
|
|
<lam:box> |
|
|
<button label="Buscar" trigger="productSearchTrigger"/> |
|
|
<button label="Imprimir" trigger="printTrigger"/> |
|
|
</lam:box> |
|
|
<lam:box width="1"/> |
|
|
</lam:box> |
|
|
</block> |
|
|
</lam:box> |
|
|
<lam:box height="1"/> |
|
|
|
|
|
<lam:box> |
|
|
<block name="productResultBlock" datasource="productResultDataSource"> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<lam:box width="1"/> |
|
|
<entry name="productIdREntry" field="_product_data._table" hidden="y"/> |
|
|
<label text="Resultado"/> |
|
|
<lam:box width="1"/> |
|
|
<entry name="funnyLabel" style="label"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<lam:box width="1"/> |
|
|
<entry name="codeListEntry" field="_product_code_data.code" |
|
|
rows="15"/> |
|
|
<entry name="nameListEntry" field="_product_data.canonical_name" |
|
|
rows="15"/> |
|
|
<scrollbar page="12" height="15"/> |
|
|
</lam:box> |
|
|
</block> |
|
|
</lam:box> |
|
|
<lam:box height="1"/> |
|
|
</page> |
|
|
|
|
|
<page name="Gestión"> |
|
|
<neb:Sub neb:src="posDocument.nebc" ownPosBlock="ownPosBlock" |
|
|
ownPosEntityIdEntry="ownPosEntityIdEntry" |
|
|
searchOwnPosData="searchOwnPosData" |
|
|
ownStorehouseBlock ="ownStorehouseBlock" ownStorehouseIdEntry="ownStorehouseIdEntry" /> |
|
|
|
|
|
<!-- new_schema_begin --> |
|
|
<!-- block name="searchingPhysicalStructureBlock" datasource="physicalStructureDataSource"> |
|
|
<entry name="idEntry" field="_table" |
|
|
x="1" y="1" hidden="y"/> |
|
|
<entry name="nameEntry" field="name" |
|
|
x="1" y="1" hidden="y"/> |
|
|
</block --> |
|
|
|
|
|
<trigger type="Pre-Focusin"><![CDATA[ |
|
|
if str(productResultBlock.productIdREntry)!='': |
|
|
callTrigger ('product_classificationForId') |
|
|
callTrigger ('account_planForId') |
|
|
|
|
|
# if str(productBlock.physical_structureIdEntry)!='': |
|
|
# searchingPhysicalStructureBlock.clear() |
|
|
# searchingPhysicalStructureBlock.initQuery () |
|
|
# searchingPhysicalStructureBlock.idEntry= str(productBlock.physical_structureIdEntry) |
|
|
# searchingPhysicalStructureBlock.processQuery () |
|
|
# productBlock.physical_structureNameEntry= str(searchingPhtsicalStructureBlock.nameEntry) |
|
|
# else: |
|
|
# productBlock.physical_structureEntry= '' |
|
|
|
|
|
# use of the component's trigger |
|
|
callTrigger ('countryForId') |
|
|
]]></trigger> |
|
|
<!-- new_schema_end --> |
|
|
|
|
|
<trigger type="pre-Focusout" src="askForChangesTrigger"/> |
|
|
<box label="Datos"> |
|
|
<lam:box> |
|
|
<block name="productBlock" datasource="productDataSource" restrictInsert="y"> |
|
|
<entry name="priceTypeEntry" field="_price_data.price_type" hidden="y"/> |
|
|
<entry name="productCodeTypeEntry" field="_product_code_data.product_code_type" hidden="y"/> |
|
|
<entry name="productIdEntry" field="product.id" hidden="y"/> |
|
|
|
|
|
<lam:box lam:boxtype="h"> |
|
|
<label text="Nombre Canónico:"/> |
|
|
</lam:box> |
|
|
|
|
|
<lam:box lam:boxtype="h"> |
|
|
<entry name="canonical_nameEntry" field="_product_data.canonical_name"/> |
|
|
<lam:box width="1"/> |
|
|
<button label="Nuevo" trigger="newProductTrigger"> |
|
|
<trigger type="NAMED" name="newProductTrigger"><![CDATA[ |
|
|
from hack import confirmRollback |
|
|
|
|
|
confirmRollback (self, productBlock, 'productCommitTrigger', productBlock.canonical_nameEntry) |
|
|
]]></trigger> |
|
|
</button> |
|
|
<lam:box width="1"/> |
|
|
</lam:box> |
|
|
|
|
|
<lam:box lam:boxtype="h"> |
|
|
<neb:Sub neb:src="inlineSearch.nebc" label="Clasificación" |
|
|
table="product_classification" target_field="product.product_classification" target_block="productBlock" |
|
|
use_code="0" object_select_form="productClassificationSelect.gfd"/> |
|
|
<lam:box width="1"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<neb:Sub neb:src="accountPlanSearch.nebc" label="Cuenta contable" |
|
|
target_field="product.account_plan" target_block="productBlock"/> |
|
|
<!-- Hay que mejorar la búsqueda de la cuenta congable --> |
|
|
<lam:box width="1"/> |
|
|
</lam:box> |
|
|
<!--lam:box lam:boxtype="h"/> |
|
|
<lam:box width="1"/> |
|
|
<label text="Ubicación:"/> |
|
|
<lam:box width="1"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"/> |
|
|
<lam:box width="1"/> |
|
|
<entry name="physical_structureIdEntry" field="_product_data.location" hidden="y"/> |
|
|
<lam:box width="1"/> |
|
|
<entry name="physical_structureNameEntry" |
|
|
x="2" y="6" width="40"/> |
|
|
<button name="searchLocationButton" label="Buscar" trigger="searchLocationTrigger" |
|
|
x="42" y="6" width="10" height="1"> |
|
|
<trigger name="searchLocationTrigger" type="NAMED"> |
|
|
# aca deberia haber algo parecido a lo que hay en los otros trigger similares. |
|
|
self.genericBox('No implementado', ['Aceptar']); |
|
|
</trigger> |
|
|
</button> |
|
|
<button x="53" y="6" name="physical_structureButton" |
|
|
label="..." width="5" height="1" trigger="physical_structureTrigger"> |
|
|
<trigger type="NAMED" name="physical_structureTrigger"> |
|
|
self.genericBox('No implementado', ['Aceptar']); |
|
|
</trigger> |
|
|
</button--> |
|
|
|
|
|
<lam:box lam:boxtype="h"> |
|
|
<neb:Sub neb:src="inlineSearch.nebc" label="País de Origen" |
|
|
table="country" target_field="product.country" target_block="productBlock" |
|
|
code_field="iso3" code_width="4"/> |
|
|
<lam:box width="1"/> |
|
|
</lam:box> |
|
|
|
|
|
<lam:box lam:boxtype="h"> |
|
|
<lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<label text="Precio unitario base"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<entry name="priceEntry" field="_price_data.unit_price"/> |
|
|
<!--multicurrency--> |
|
|
<lam:box width="1"/> |
|
|
<label text="Moneda"/> |
|
|
<entry name="currencyTypeIdEntry" field="_price_data.currency_type" style="dropdown" |
|
|
foreign_key="currencyDataSource._table" foreign_key_description="name" |
|
|
default="1"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<label text="Código interno"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<entry name="codeEntry" field="_product_code_data.code"/> |
|
|
</lam:box> |
|
|
</lam:box> |
|
|
<lam:box width="1"/> |
|
|
<lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<label text="% IVA"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<entry name="productVATEntry" field="_product_tax_data.amount" default="21" |
|
|
width="10"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<!--/multicurrency--> |
|
|
<entry name="productTaxEntry" field="_product_tax_data.tax" hidden="y"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<label text="vendible"/> |
|
|
</lam:box> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<entry name="exludedEntry" field="_price_data.excluded" hidden="y" default="0"/> |
|
|
<entry name="salableValueEntry" field="_product_data.salable" default="1"/> |
|
|
</lam:box> |
|
|
</lam:box> |
|
|
</lam:box> |
|
|
|
|
|
<!-- <label x="1" y="13" text="Nivel mínimo"/> --> |
|
|
<!-- <entry x="1" y="14" hidden="y" name="levelEntry" field="_product_store_data.level"/> --> |
|
|
<!-- <entry x="1" y="14" name="lowaterEntry" --> |
|
|
<!-- field="_product_store_data.lowater" width="12"/> --> |
|
|
<!-- <label x="30" y="13" text="Nivel máximo"/> --> |
|
|
<!-- <entry x="30" y="14" name="hiwaterEntry" --> |
|
|
<!-- field="_product_store_data.hiwater" width="12" /> --> |
|
|
<lam:box height="3"/> |
|
|
<lam:box lam:boxtype="h"> |
|
|
<button label="Aceptar" trigger="productCommitTrigger"/> |
|
|
<lam:box width="1"/> |
|
|
<button label="Borrar" trigger="productDeleteTrigger"/> |
|
|
<lam:box width="1"/> |
|
|
<button label="Cancelar" trigger="productRollbackTrigger"/> |
|
|
</lam:box> |
|
|
<lam:box height="1"/> |
|
|
</block> |
|
|
</lam:box> |
|
|
</box> |
|
|
</page> |
|
16 |
|
|
17 |
</form> |
</form> |