Closed javierobcn closed 9 years ago
Buenas, Javier, ese error es debido a que se está accediendo a la secuencia de manera concurrente entre dos sesiones. Puede ser que mientras se creaba un pedido, también se estuviera ejecutando el cron de generación de pedidos, y de ahí el error.
De todas formas, la migración del módulo no debería llevar ningún problema, ya que al ser compatible con la antigua API, no hay que cambiar prácticamente nada.
Hola Pedro, sigo intentando migrar "sale_recurring_orders" a odoo 8... parece que la "Próxima fecha de expiración" no se actualiza después de generar los pedidos. ¿alguna idea? por lo demás todo va bien, pero me preocupa eso...
Esa fecha se actualiza automáticamente en caso de plazo indefinido, o manualmente si se pone plazo fijo renovable.
Pedro, entiendo, tengo plazo indefinido en todos los contratos y no se actualiza... ¿alguna idea?
No, pero se actualizará cuando llegue el momento de caducar
El contrato caducó el 15/05/2015 y se confirmó automáticamente el pedido correspondiente a esa fecha pero sigue teniendo como "próxima fecha de expiración" 15/05/2015 ... no se ha actualizado....
Pero eso es en v7 o v8?
Éste es el código que calcula la próxima fecha de expiración: https://github.com/serviciosbaeza/serviciosbaeza-odoo-addons/blob/7.0/sale_recurring_orders/recurring_orders.py#L65
Es en V8... voy a intentar depurar ese código a ver si veo algo...
Hola Pedro
Cuando creo o edito un contrato y lo guardo si que actualiza la fecha de ultima expiracion correctamente pasando por la funcion __get_next_expiration_date y guardando en la BD el valor correcto.
Sin embargo cuando se ejecuta el trabajo programado "revise_agreements_expirations_planned" ,que entiendo que es el que debería actualizar esa fecha, este self.write en las lineas 200/201 no parece actualizar el campo en la base de datos. Si que pasa por ahí, calcula la fecha y hace el write pero no guarda. Ese "force recalculate next_expiration_date" no parece funcionar, quizá sea algo de odoo 8
¿se mantienen los campos field.function en odoo 8?, lo pregunto por que en la documentación se habla de campos de tipo computed. No se si puede ir por ahí y tendremos que migrar ese campo a computed.
La compatibilidad con la API antigua asegura el que fields.function funcione. Haz si no un PR para ver lo que has hecho de código.
Parece que lo he resuelto, he agregado un campo en el self.write, si no hay ningún campo en el write parece que no hace nada...
Javier, puedes proponer el módulo en v8?
Disculpa Pedro, ¿a que te refieres con "proponer"?
Me refería a hacer un PR para integrar tu módulo en la rama y que quede publicado.
Hola Pedro
Me gustaría intentar migrar "sale_recurring_orders" a odoo 8 ¿lo ves factible e interesante? ¿alguna consideración?
En mi openerp 7 utilizo el módulo para generar pedidos periódicos, y me gustaría seguir haciendolo en odoo 8. He obtenido varios errores que he podido ir resolviendo tocando el código... basicamente algunos imports y algo relacionado con las fechas...
En este momento todo parece estar funcionando bien a nivel de interface, sin embargo parece que obtengo algún error cuando se ejecutan las tareas del cron, he visto estos errores en el log ¿se te ocurre que puede pasar?
2015-05-03 09:43:57,518 6202 ERROR bd_prod_migrated openerp.sql_db: bad query: INSERT INTO "sale_order_line" ("id", "product_uos_qty", "name", "product_uom", "sequence", "order_id", "price_unit", "product_uom_qty", "delay", "discount", "state", "invoiced", "th_weight", "product_uos", "product_packaging", "product_id", "create_uid", "write_uid", "create_date", "write_date") VALUES(nextval('sale_order_line_id_seq'), '1.000', 'HCloud WServer Mensual xxx.xxxxxxxx.com', 27, 10, 2670, '10.00', '1.000', 0.0, '0.00', 'draft', false, 0.0, NULL, NULL, 194, 1, 1, (now() at time zone 'UTC'), (now() at time zone 'UTC')) RETURNING id Traceback (most recent call last): File "/media/Datos/workspace_odoo/odoo_ri/openerp/sql_db.py", line 234, in execute res = self._obj.execute(query, params) TransactionRollbackError: could not serialize access due to concurrent update CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x"
2015-05-03 09:43:57,536 6202 ERROR bd_prod_migrated openerp.addons.base.ir.ir_cron: Call of self.pool.get('sale.recurring_orders.agreement').generate_next_year_ordersplanned(cr, uid, ()) failed in Job 12 Traceback (most recent call last): File "/media/Datos/workspace_odoo/odoo_ri/openerp/addons/base/ir/ir_cron.py", line 138, in _callback getattr(model, method_name)(cr, uid, args) File "/media/Datos/workspace_odoo/odoo_ri/openerp/api.py", line 241, in wrapper return old_api(self, args, _kwargs) File "/media/Datos/workspace_odoo/odoo_ri/addons/sale_recurring_orders/recurring_orders.py", line 363, in generate_next_year_orders_planned self.generate_next_year_orders(cr, uid, ids, context) File "/media/Datos/workspace_odoo/odoo_ri/openerp/api.py", line 241, in wrapper return old_api(self, _args, _kwargs) File "/media/Datos/workspace_odoo/odoo_ri/addons/sale_recurring_orders/recurring_orders.py", line 372, in generate_next_year_orders self.generate_agreement_orders(cr, uid, agreement, startDate, endDate, context) File "/media/Datos/workspace_odoo/odoo_ri/openerp/api.py", line 241, in wrapper return old_api(self, _args, _kwargs) File "/media/Datos/workspace_odoo/odoo_ri/addons/sale_recurring_orders/recurring_orders.py", line 321, in generate_agreement_orders order_id = self.create_order(cr, uid, agreement, date, lines_to_order[date], False, context=context) File "/media/Datos/workspace_odoo/odoo_ri/openerp/api.py", line 241, in wrapper return old_api(self, _args, _kwargs) File "/media/Datos/workspace_odoo/odoo_ri/addons/sale_recurring_orders/recurring_orders.py", line 245, in create_order order_line_obj.create(cr, uid, order_line, context=context) File "/media/Datos/workspace_odoo/odoo_ri/openerp/api.py", line 241, in wrapper return old_api(self, _args, _kwargs) File "/media/Datos/workspace_odoo/odoo_ri/addons/sale/sale.py", line 1059, in create return super(sale_order_line, self).create(cr, uid, values, context=context) File "/media/Datos/workspace_odoo/odoo_ri/openerp/api.py", line 241, in wrapper return old_api(self, _args, _kwargs) File "/media/Datos/workspace_odoo/odoo_ri/openerp/api.py", line 336, in old_api result = method(recs, _args, _kwargs) File "/media/Datos/workspace_odoo/odoo_ri/openerp/models.py", line 4059, in create record = self.browse(self._create(old_vals)) File "/media/Datos/workspace_odoo/odoo_ri/openerp/api.py", line 239, in wrapper return new_api(self, _args, _kwargs) File "/media/Datos/workspace_odoo/odoo_ri/openerp/api.py", line 462, in new_api result = method(self._model, cr, uid, _args, _kwargs) File "/media/Datos/workspace_odoo/odoo_ri/openerp/models.py", line 4197, in _create tuple([u[2] for u in updates if len(u) > 2]) File "/media/Datos/workspace_odoo/odoo_ri/openerp/sql_db.py", line 158, in wrapper return f(self, _args, _kwargs) File "/media/Datos/workspace_odoo/odoo_ri/openerp/sql_db.py", line 234, in execute res = self._obj.execute(query, params) TransactionRollbackError: could not serialize access due to concurrent update CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x"
Tras estos errores, la generación de pedidos se detiene y se me queda a medias...