Programacion Interactiva

Descubre una Nueva y Poderosa Herramienta.

FrameWork de Nueva Generacion

Acceso a tu Informacion desde cualquier Dispositivo con Navegador.

Enfoque en el Backend

Frontend de forma facil con Odoo y XML.

Creacion de Verticales

Creacion de nuevas Verticales Conquistando nuevos Mercados.

Tu marca aqui mismo

Llega a miles de personas.

Publicidad

viernes, 27 de noviembre de 2015

Script Instalar o Desinstalar modulo con la librería OERPLIB de forma externa a Odoo

Desinstalar o Instalar un modulo desde Python mediante un Script


Para el desarrollo de este Script, utilizaremos la librería oerplib, si utilizamos Ubuntu o Linux podemos descargar con el comando:

sudo pip install oerplib 

El código es el siguiente:

import oerplib

user = 'admin' # Usuario de la Base de datos 
passwd = 'admin' # Contraseña del Usuario de la Base de datos.
port = 8069 # Puerto en el que esta ejecutandose Odoo por default es el 8069
name_db = 'Base_Demo' # Nombre de la Base de Datos
module = 'modulo_desinstalar' # Modulo a Desinstalar

oerp = oerplib.OERP(server='localhost',protocol='xmlrpc',port=port)
oerp.login(user, passwd, database=name_db)
module_obj = oerp.get('ir.module.module')
module_id = module_obj.search([('name', '=', module)])

operacion = True
while(operacion):
    resp = raw_input('Que operacion necesita:\nInstalar modulo %s, Desinstalar modulo %s o Salir? i/d/s:'%(module,module))
    if resp == 'd':
        module_obj.button_immediate_uninstall(module_id)
    elif resp == 'i':
        module_obj.button_immediate_install(module_id)
    else:
        operacion = False

Lo único que necesitamos es guardarlo con un nombre y la extensión .py, para ejecutarlo basta con abrir una terminal, ubicarnos en la dura donde guardamos el script y ejecutar:

python script_instalacion.py


Script SQL Autocorreccion de Margenes

Corrección de Margenes Negativos o erróneos a partir de SQL



update sale_order set margin = amount_untaxed-(select sum(sol.purchase_price*sol.product_uos_qty) 
   from sale_order_line as sol join sale_order as so on so.id = sol.order_id and so.id=sale_order.id)

jueves, 26 de noviembre de 2015

Odoo POS Pop Ups

Odoo POS Pop Ups

In odoo retailers will be mostly concentrating on POS because that minimizes their effort to more extreme,….
Now on developer side it is tough work to customize that pos.. since it is collaboration of js, jquery with python…  Some times head ache.. :P :) ..
No problem now we will see how to create a pop up in odoo POS,,,,
For this you need some basic knowledge in
1) js, jquery
2)python
3)odoo qweb widgets
Now we are going to create a popup asking name to enter in pos….
create a module in odoo.. with init and openerp file…
Now normally on creation of wizard we used to create a form for pop right.. like that create one as below..
create model.py file with following code:
from openerp import api, fields, models
from openerp.osv import osv
class pos_model(models.Model):
_name = ‘pos.popup
name=fields.Char(‘Name’,size=30,required=True)
def okay_refresh(self,cr,uid,ids,context=None):
return{
‘type’:’ir.actions.client’,
‘tag’:’reload’,
}
view.xml file has this:
<?xml version=”1.0″ encoding=”utf-8″?>
<openerp>
<data>
<record model=”ir.actions.act_window” id=”create_pop_up”>
<field name=”name”>Pop up</field>
<field name=”res_model”>pos.popup</field>
<field name=”view_mode”>form</field>
</record>
<record id=”create_pop_form” model=”ir.ui.view”>
<field name=”name”>Pop up</field>
<field name=”model”>pos.popup</field>
<field name=”type”>form</field>
<field name=”arch” type=”xml”>
<form string=”Pop up” version=”7.0″>
<br />
<h2>Enter the name:</h2>
<br /><br />
<label for=”name” style=”clear:left;text-align:right;padding-right:10px;float:left;padding-left:5em “/>
<field name=”name” nolable=”1″ style=”float:left;padding-left:5em “/><br /><br />
<br />
<br />
<div style=”align:center;float:left;padding-left:12em “>
<button name=”ok_refresh” type=”object” string=”Okay”/>
</div>
</form>
</field>
</record>
Now its turn for POS module change..
TO add button to POS.. create static–>src–>xml–>pop_up.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<template id=”payment_screen”>
<t t-extend=”PosWidget”>
<t t-jquery=”div.pos-branding” t-operation=”inner”>
<button class=”popup-misc” style=”position:absolute;left:300px; top:7px;width: 100px; height: 37px; font-size:15px;”>Name popup</button>
</t>
</t>
</template>
Now create a file static–>src–>js–>pos_pop.js
in that paste it
openerp.module_name = function(instance){
var module = instance.point_of_sale; 
var QWeb = instance.web.qweb;
module.PosWidget.include({
build_widgets: function(){
var self = this;
this._super();
this.$el.find(‘.popup-misc’).click(function(){
self.do_action({
type: ‘ir.actions.act_window’,
res_model: “pos.popup”,
views: [[false, ‘form’]],
target: ‘new’,
context: {},
});
});
}
});
};
create a file template.xml in that paste the following code
<openerp>
<data>
<template id=”assets_frontend” inherit_id=”web.assets_common”>
<xpath expr=”.” position=”inside”>
<script type=”text/javascript” src=”/module_name/static/src/js/pos_pop.js”></script>
</xpath>
</template>
</data>
</openerp>
This will add your js to odoo frond end..
Finally add all the xml files in _openerp__.py

lunes, 23 de noviembre de 2015

Crear un Complemento en Odoo

En esta ocasión les comparto un tema de un error que probablemente a algunos les haya salido al momento de intentar validar una factura electrónica CFD o CFDI con los xsd publicados en el SAT

El error podrá venir en la forma :

 No matching global element declaration available, but demanded by the strict wildcard  

En mi ejemplo me mandaba
 Element '{http://www.sat.gob.mx/ventavehiculos}VentaVehiculos': No matching global element declaration available, but demanded by the strict wildcard  

El xml el que estaba validando simplemente tenía lo siguiente :

El sat en realidad no define dentro del xsd  de cfd v2.2 el nodo ventavehiculos, tal es el caso que aunque se declarara el namespace y schemalocation dentro de ese nodo al intentar validarlo del primer nodo mandaba error en algunos validadores, ya que el xsd de ventavehiculos se encuentra en otro archivo diferente
Si queremos validar un XML del SAT que contenga nodos que son opcionales para el SAT tendremos que bajar el xsd de cfd o cfdi vigente y hacer un import dentro del mismo a los xsd opcionales o también agregar los xsd que ustedes por ejemplo ocupen para la sección addenda

1:  <xs:schema xmlns="http://www.sat.gob.mx/cfd/2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:psgecfd="http://www.sat.gob.mx/psgecfd" xmlns:donat="http://www.sat.gob.mx/donat" xmlns:divisas="http://www.sat.gob.mx/divisas" xmlns:ecc="http://www.sat.gob.mx/ecc" xmlns:ecb="http://www.sat.gob.mx/ecb" xmlns:ecfd="http://www.southconsulting.com/schemas/strict" xmlns:detallista="http://www.sat.gob.mx/detallista" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:terceros="http://www.sat.gob.mx/terceros" targetNamespace="http://www.sat.gob.mx/cfd/2" elementFormDefault="qualified" attributeFormDefault="unqualified">  
2:       <xs:import namespace="http://www.sat.gob.mx/psgecfd" schemaLocation="psgecfd.xsd"/>  
3:       <xs:import namespace="http://www.sat.gob.mx/donat" schemaLocation="donat11.xsd"/>  
4:       <xs:import namespace="http://www.sat.gob.mx/divisas" schemaLocation="Divisas.xsd"/>  
5:       <xs:import namespace="http://www.sat.gob.mx/ecc" schemaLocation="ecc.xsd"/>  
6:       <xs:import namespace="http://www.sat.gob.mx/ecb" schemaLocation="ecb.xsd"/>  
7:       <xs:import namespace="http://www.southconsulting.com/schemas/strict" schemaLocation="ecfd.xsd"/>  
8:       <xs:include schemaLocation="INVOIC-VITRO2010.xsd"/>  
9:       <xs:import namespace="http://www.sat.gob.mx/detallista" schemaLocation="detallista.xsd"/>  
10:       <xs:import namespace="http://www.sat.gob.mx/implocal" schemaLocation="implocal.xsd"/>  
11:       <xs:import namespace="http://www.sat.gob.mx/terceros" schemaLocation="terceros11.xsd"/>  
12:       <xs:import namespace="http://www.sat.gob.mx/ventavehiculos" schemaLocation="ventavehiculos.xsd"/>  
13:       <xs:element name="Comprobante">  

miércoles, 18 de noviembre de 2015

Actualizar campos a partir de una segunda Tabla en PostreSQL

Actualización entre Tablas PostgreSQL


Postgres es una herramienta super poderosa te permite manipular una infinidad de datos en tiempos muy cortos, aprovechando este administrador de bases de datos podemos actualizar registros a una velocidad superior de una tabla a otra con un query bastante sencillo, este ejemplo que les voy a compartir actualiza el campo Empresa de la tabla account_move a partir de la tabla account_move_line:

UPDATE account_move SET partner_id=account_move_line.partner_id FROM account_move_line 
WHERE account_move_line.move_id=account_move.id and account_move.partner_id is null