:::: MENU ::::
Posts tagged with: odoo

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.


Nuevo avance en Migraciones de OpenERP

Ayer OpenERP montó un Sistema Web con el cual podéis migrar vuestras Bases de Datos. Por ejemplo podréis migrar Bases de Datos desde la 5.0 a la 6.1. Pero esto sólo migrará las bases de datos que vengan de serie con OpenERP. Es decir, que si tenéis módulos propietarios no se producirán los cambios en esas tablas y tal vez no os funcionen. Lo explico mejor ……

Este tema es algo que trae de cabeza a la comunidad de OpenERP, según parece OpenERP está haciendo todo lo posible por que su sistemas se migren sin problemas. Pero lo que no gusta a la comunidad son sus precios y las políticas de contratos de las migraciones (aquí está el negocio de OpenERP, que alguno parece que no se entera), algo que puede ser discutible. Pero bueno ahí están dando la cara y diciendo que pueden migrar sus versiones.

El pequeño gran problema para un usuario final, es cuando tu contratas a una empresa externa a OpenERP para que te cree cierto módulo propietario. Pues ahí OpenERP no se mete, ya que ese módulo te lo tiene que migrar la empresa que has contratado. Creo que es algo lógico, cada uno se hace responsable de lo que crea. Así es la vida.

La noticia del lanzamiento de esta Web se comentó en el último congreso celebrado en San Sebastián y por fin se ha hecho realidad.

Lo malo de esto es que antes hay que pasar por caja. El Software Libre también es un negocio, nunca se os olvide.

La web es http://migration.openerp.com/.

Saludos.


Páginas:123