/[papo]/papo/forms/product.neb
ViewVC logotype

Diff of /papo/forms/product.neb

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.14 by apronotti, Fri Sep 19 17:54:25 2003 UTC revision 1.15 by mhepp, Tue Sep 23 20:14:24 2003 UTC
# Line 7  Line 7 
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>

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26