:::: MENU ::::

Odoo – Universidad Pablo de Olavide

Cuando llamaron a la Empresa desde la Universidad Pablo de Olavide preguntando por OpenERP nos quedamos todos un poco alucinados. ¿Una Universidad Pública interesada en que le demos formación sobre OpenERP? ¿Desarrollo en Python? …….. algo empezaba a sonar muy bien.

Y es que recuerdo cuando estudiaba en la Universidad, que eso de dar clases a los Alumnos sobre lo último en Tecnología …. pues como que no. Casi todo eran Matemáticas, Física, Desarrollo de Algoritmos, Java puro, …. pero ¿Python? ¿OpenObject? ¿JQuery? ….. Eso eran cosas del futuro. Que ignorantes eran (y son) por Dios.

Pues bien, parece que hay personas que quieren cambiar la manera de enseñar Informática a los futuros Ingenieros Informáticos y, eso es algo que apoyo cien por cien. Porque dentro de unos años, habrá personas que cuando salgan al mundo laboral, sabrán lo que hacen las empresas y no tengan que ir con tanto miedo al qué pasará.

Desde aquí quiero agradecer a estos 4 profesores de la Pablo de Olavide todo el trabajo que están llevando a cabo y, por supuesto, toda la suerte del mundo para seguir contribuyendo en una mejor enseñanza de mis futuros compañeros de profesión.

Saludos a todos.

Por cierto, me lo pasé genial en la formación 😉


Dispatcher en PrestaShop

Últimamente estamos avanzando bastante en la conexión de PrestaShop con OpenERP y ya casi lo tenemos funcionando en producción.

Una de las cosas que mas nos ha preocupado ha sido el “Dispatcher” de PrestaShop para la versión 1.4.0.17, ya que detectamos numerosos bugs para el buen uso del mismo con OpenERP. Y mas concretamente en servidores con 1and1.

Por si a alguien le interesa, aquí pongo el código del dispatcher.php que hemos reutilizado, localizado en la carpeta webservice de PrestaShop.

if (isset($_SERVER[''HTTP_AUTHORIZATION'']) && preg_match(''/Basic\\s+(.*)$/i'', $_SERVER[''HTTP_AUTHORIZATION''], $matches))
{
list($name, $password) = explode('':'', base64_decode($matches[1]));
$_SERVER[''PHP_AUTH_USER''] = strip_tags($name);
}


//echo "PHP_AUTH_USER:".$_SERVER[''PHP_AUTH_USER''];
//set http auth headers for apache+php-cgi work around if variable gets renamed by apache
if (isset($_SERVER[''REDIRECT_HTTP_AUTHORIZATION'']) && preg_match(''/Basic\\s+(.*)$/i'', $_SERVER[''REDIRECT_HTTP_AUTHORIZATION''], $matches))
{
list($name, $password) = explode('':'', base64_decode($matches[1]));
$_SERVER[''PHP_AUTH_USER''] = strip_tags($name);
}
ob_start();
require_once(dirname(__FILE__).''/../config/config.inc.php'');

// Use for image management (using the POST method of the browser to simulate the PUT method)
$method = isset($_REQUEST[”ps_method”]) ? $_REQUEST[”ps_method”] : $_SERVER[”REQUEST_METHOD”];

if (isset($_SERVER[”PHP_AUTH_USER”]))
$key = $_SERVER[”PHP_AUTH_USER”];
elseif (isset($_GET[”ws_key”]))
$key = $_GET[”ws_key”];
else
{
header($_SERVER[”SERVER_PROTOCOL”].” 401 Unauthorized”);
header(”WWW-Authenticate: Basic realm=”Welcome to PrestaShop Webservice, please enter the authentication key as the login. No password required.””);
die;
}

if (isset($_REQUEST[”xml”]))
{
// if a XML is in POST
$input_xml = stripslashes($_REQUEST[”xml”]);
}
else
{
// if no XML
$input_xml = NULL;

// if a XML is in PUT
if ($_SERVER[”REQUEST_METHOD”] == ”PUT”)
{
$putresource = fopen(“php://input”, “r”);
while ($putData = fread($putresource, 1024))
$input_xml .= $putData;
fclose($putresource);
}
}

$params = $_GET;
unset($params[”url”]);

$class_name = WebserviceKey::getClassFromKey($key);
$bad_class_name = false;
if (!class_exists($class_name))
{

$class_name = ”WebserviceRequest”;
$bad_class_name = true;
}
// fetch the request
$request = call_user_func(array($class_name, ”getInstance”));
$result = $request->fetch($key, $method, $_GET[”url”], $params, $bad_class_name, $input_xml);
// display result
if (ob_get_length() == 0)
header($result[”content_type”]);
else
header(”Content-Type: application/javascript”); // Useful for debug…
header($result[”status”]);
header($result[”x_powered_by”]);
header($result[”execution_time”]);
if (isset($result[”ps_ws_version”])){
header($result[”ps_ws_version”]);

}

if ($result[”type”] == ”xml”)
{
header($result[”content_sha1”]);
echo $result[”content”];
}
elseif ($result[”type”] == ”image”)
{
if ($result[”content_type”] == ”Content-Type: image/jpeg”)
imagejpeg(WebserviceRequest::getInstance()->_imageResource);
elseif ($result[”content_type”] == ”Content-Type: image/gif”)
imagegif(WebserviceRequest::getInstance()->_imageResource);
imagedestroy(WebserviceRequest::getInstance()->_imageResource);
}

ob_end_flush();

También es muy importante agregar al principio y al final del documento .htacces, localizado en la raiz de PrestaShop, lo siguiente:

RewriteBase /

RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]

Saludos a todos. Espero que os haya servido de ayuda.


LDAP Odoo 6.1

Cuando nos dispongamos a sincronizar usuarios de OpenERP con un Directorio Activo LDAP, en mi caso tipo Windows, existe un módulo para ello llamado user_ldap que nos facilita todo este trabajo.

A continuación paso a detallar la configuración de este módulo.

1 – Instalación

Desinstalar el módulo base_crypt de OpenERP. Ya que no es compatible con el módulo user_ldap.

Instalar el módulo user_ldap.

2 – Configuración

En OpenERP nos situamos en Setting – Compañías. Pinchamos en nuestra compañía. En la pestaña configuración de la compañía en cuestión, nos situamos en la zona de LDAP y pulsamos en Crear. Y aplicamos la siguiente configuración:

Servidor LDAP: ip del servidro LDAP

Puerto: 389

Binnddn: dominio\\administrator

Password: La que tenga

Base: OU=users,OU=accounts,

OU=dominio,DC=dominio,DC=sufijo

(Suponiendo que nuestros usuarios estén en users – accounts – dominio)

Filtro: sAMAccountName=%s

Crear usuario: activo

Modelo de usuario: El que quieras crear

Secuencia: 1

Guardamos los cambios y salimos de OpenERP

3 – Funcionamiento

Cuando los usuarios entren por primera vez en OpenERP con sus credenciales del LDAP se creará un nuevo usuario en OpenERP con los mismos datos que haya en el LDAP y con los permisos que tenga el Modelo de usuario que se le ha especificado. Ojo, el login para los usuarios será únicamente el nick del usuario que se la haya dado en el directorio activo, no la ruta completa.

Espero que os haya servido de ayuda, porque me ha costado un poco dar con las claves 😉 Saludos a todos.


Odoo – Log en carga de datos CSV

A la hora de cargar datos en OpenERP mediante la carga de un Módulo, gracias a los archivos CSV, me di cuenta que el Log de OpenERP no mostraba las filas que se iban cargando en la Base de Datos, por lo que tuve que tirar de un atajo. ¿Cuál?

Si nos metemos en la capa ORM (orm.py) del propio Servidor de OpenERP, veremos una función llamada “def process_liness”, pues si ponemos “_logger.warning(nbrmax+1)” justo después de “nbrmax = position+1”. Nos dirá justo la última fila del CSV donde se ha producido, por ejemplo,  un error.

Con este simple atajo ya podemos tener solucionado este gran problema en las cargas de datos con CSV y Módulos.

Espero que os sirva.


Carga de datos anidadas en OpenERP

Hoy os voy a mostrar cómo hacer una carga de Clientes con sus Cuentas Contables y Cuentas Bancarias mediante archivos CSV en OpenERP.

Este tipo de carga de datos se utiliza mucho para la carga de datos masivas, ya que de esta maneras podremos aprovechar todo el potencial que nos ofrece el Servidor de OpenERP.

Es altamente recomendable hacer uso de este tipo de carga de datos en OpenERP ya que es fácil, limpio y seguro.

El archivo init.py lo dejaremos en blanco.

El archivo __openerp__.py contendrá lo siguiente:

{

''name'': ''Carga de Clientes'',

''version'': ''1.0'',

''category'': '''',

''description'': """ Carga de Clientes """,

''author'': ''Javier Llamas'',

''website'': ''http://www.javierllamas.es'',

''depends'': [''base''],

''init_xml'': [],

''update_xml'': [

''account.account.csv'',

''res.partner.csv'',

''res.partner.address.csv'', 

''res.partner.bank.csv'', ],

''demo_xml'': [],

''test'': [ ],

''installable'': True,

''active'': False,

''certificate'': False,

}

En el archivo account.account.csv vamos a establecer los siguientes campos y vamos a poner como ejemplo la cuenta contable 430000020

"active","currency_mode","name","reconcile","user_type/id","type","parent_id","code"

"true","At Date","Cliente ejemplo","true","l10n_es.terceros_-_rec","Receivable","430","430000020"

Luego en el fichero res.partner.address.csv pondremos algunos datos ejemplos. Aquí la variable mas importante es partner_id:id que es la que nos hará de ancla con el fichero res.partner.csv y res.partner.bank.csv que veremos mas adelante.

"city","email","partner_id:id","mobile","name","phone","fax","zip","street"

"MURCIA","email@email.com","partner_1","000-000-000","Cliente Ejemplo","000-000-000","000-000-000","30000","C/ Ejemplo"

El fichero res.partner.csv estará formado por:

"active","customer","employee","name","supplier","website","id","property_account_receivable"

"true","true","false","Cliente Ejemplo","false","web.com","partner_1","430000020"

Y ya por último res.partner.bank. csv tendría las propiedades del Banco ligado a este cliente

"partner_id:id","owner_name","state","acc_number","street","city","default_bank"

"partner_1","Cliente Ejemplo","bank","0000-0000-00-0000000000","Calle nueva","MURCIA","True"

Y para terminar,  vamos a OpenERP e instalamos el módulo que hemos creado. Y ahora podemos ver cómo en la zona de Clientes se ha creado el nuevo registro.

Sencillo y rápido 😉

Saludos.


Páginas:123456