[MERGE] Fwd-port 8.0 up to 139d868

This commit is contained in:
Olivier Dony
2014-07-07 15:32:47 +02:00
23 changed files with 167 additions and 362 deletions
+1 -1
View File
@@ -98,7 +98,7 @@ class account_invoice(models.Model):
def _compute_reconciled(self):
self.reconciled = self.test_paid()
if not self.reconciled and self.state == 'paid':
self.signal_open_test()
self.signal_workflow('open_test')
@api.model
def _get_reference_type(self):
+1 -1
View File
@@ -104,7 +104,7 @@ class account_fiscal_position(osv.osv):
# partner manually set fiscal position always win
if partner.property_account_position:
return part.property_account_position.id
return partner.property_account_position.id
# if no delivery use invocing
if delivery_id:
@@ -1,3 +1,3 @@
.oe_systray #oe_attendance_sign_in_out_icon {
font-color: white;
color: white;
}
@@ -14,7 +14,6 @@
/* button */
.oe_systray #oe_topbar_imbutton_icon {
color: white;
margin-right: 10px;
}
.oe_topbar_item.oe_topbar_imbutton .oe_e {
position: relative;
+2 -2
View File
@@ -884,7 +884,7 @@ class mrp_production(osv.osv):
production = self.browse(cr, uid, production_id, context=context)
if not production.move_lines and production.state == 'ready':
# trigger workflow if not products to consume (eg: services)
self.signal_button_produce(cr, uid, [production_id])
self.signal_workflow(cr, uid, [production_id], 'button_produce')
produced_qty = self._get_produced_qty(cr, uid, production, context=context)
@@ -944,7 +944,7 @@ class mrp_production(osv.osv):
stock_mov_obj.action_done(cr, uid, [extra_move_id], context=context)
self.message_post(cr, uid, production_id, body=_("%s produced") % self._description, context=context)
self.signal_button_produce_done(cr, uid, [production_id])
self.signal_workflow(cr, uid, [production_id], 'button_produce_done')
return True
def _costs_generate(self, cr, uid, production):
+1 -1
View File
@@ -114,7 +114,7 @@ class procurement_order(osv.osv):
procurement.refresh()
self.production_order_create_note(cr, uid, procurement, context=context)
production_obj.action_compute(cr, uid, [produce_id], properties=[x.id for x in procurement.property_ids])
production_obj.signal_button_confirm(cr, uid, [produce_id])
production_obj.signal_workflow(cr, uid, [produce_id], 'button_confirm')
else:
res[procurement.id] = False
self.message_post(cr, uid, [procurement.id], body=_("No BoM exists for this product!"), context=context)
+2 -2
View File
@@ -159,7 +159,7 @@ class StockMove(osv.osv):
'consumed_for': consumed_for}, context=context)
self.action_done(cr, uid, res, context=context)
production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])])
production_obj.signal_button_produce(cr, uid, production_ids)
production_obj.signal_workflow(cr, uid, production_ids, 'button_produce')
for new_move in res:
if new_move != move.id:
#This move is not already there in move lines of production order
@@ -181,7 +181,7 @@ class StockMove(osv.osv):
#If we are not scrapping our whole move, tracking and lot references must not be removed
production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])])
for prod_id in production_ids:
production_obj.signal_button_produce(cr, uid, [prod_id])
production_obj.signal_workflow(cr, uid, [prod_id], 'button_produce')
for new_move in new_moves:
production_obj.write(cr, uid, production_ids, {'move_lines': [(4, new_move)]})
res.append(new_move)
+5 -5
View File
@@ -497,7 +497,7 @@ class pos_session(osv.osv):
_('Error!'),
_("You cannot confirm all orders of this session, because they have not the 'paid' status"))
else:
pos_order_obj.signal_done(cr, uid, [order.id])
pos_order_obj.signal_workflow(cr, uid, [order.id], 'done')
return True
@@ -581,14 +581,14 @@ class pos_order(osv.osv):
order_ids.append(order_id)
try:
self.signal_paid(cr, uid, [order_id])
self.signal_workflow(cr, uid, [order_id], 'paid')
except Exception as e:
_logger.error('Could not fully process the POS Order: %s', tools.ustr(e))
if to_invoice:
self.action_invoice(cr, uid, [order_id], context)
order_obj = self.browse(cr, uid, order_id, context)
self.pool['account.invoice'].signal_invoice_open(cr, uid, [order_obj.invoice_id.id])
self.pool['account.invoice'].signal_workflow(cr, uid, [order_obj.invoice_id.id], 'invoice_open')
return order_ids
@@ -933,8 +933,8 @@ class pos_order(osv.osv):
inv_line['invoice_line_tax_id'] = [(6, 0, [x.id for x in line.product_id.taxes_id] )]
inv_line_ref.create(cr, uid, inv_line, context=context)
inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context)
self.signal_invoice(cr, uid, [order.id])
inv_ref.signal_validate(cr, uid, [inv_id])
self.signal_workflow(cr, uid, [order.id], 'invoice')
inv_ref.signal_workflow(cr, uid, [inv_id], 'validate')
if not inv_ids: return {}
+8 -8
View File
@@ -328,7 +328,7 @@ class purchase_order(osv.osv):
raise osv.except_osv(_('Invalid Action!'), _('In order to delete a purchase order, you must cancel it first.'))
# automatically sending subflow.delete upon deletion
self.signal_purchase_cancel(cr, uid, unlink_ids)
self.signal_workflow(cr, uid, unlink_ids, 'purchase_cancel')
return super(purchase_order, self).unlink(cr, uid, unlink_ids, context=context)
@@ -519,7 +519,7 @@ class purchase_order(osv.osv):
This function prints the request for quotation and mark it as sent, so that we can see more easily the next step of the workflow
'''
assert len(ids) == 1, 'This option should only be used for a single id at a time'
self.signal_send_rfq(cr, uid, ids)
self.signal_workflow(cr, uid, ids, 'send_rfq')
return self.pool['report'].get_action(cr, uid, ids, 'purchase.report_purchasequotation', context=context)
def wkf_confirm_order(self, cr, uid, ids, context=None):
@@ -680,19 +680,19 @@ class purchase_order(osv.osv):
_('Unable to cancel the purchase order %s.') % (purchase.name),
_('First cancel all receptions related to this purchase order.'))
self.pool.get('stock.picking') \
.signal_button_cancel(cr, uid, map(attrgetter('id'), purchase.picking_ids))
.signal_workflow(cr, uid, map(attrgetter('id'), purchase.picking_ids), 'button_cancel')
for inv in purchase.invoice_ids:
if inv and inv.state not in ('cancel', 'draft'):
raise osv.except_osv(
_('Unable to cancel this purchase order.'),
_('You must first cancel all invoices related to this purchase order.'))
self.pool.get('account.invoice') \
.signal_invoice_cancel(cr, uid, map(attrgetter('id'), purchase.invoice_ids))
.signal_workflow(cr, uid, map(attrgetter('id'), purchase.invoice_ids), 'invoice_cancel')
self.pool['purchase.order.line'].write(cr, uid, [l.id for l in purchase.order_line],
{'state': 'cancel'})
self.write(cr, uid, ids, {'state': 'cancel'})
self.set_order_line_status(cr, uid, ids, 'cancel', context=context)
self.signal_purchase_cancel(cr, uid, ids)
self.signal_workflow(cr, uid, ids, 'purchase_cancel')
return True
def _prepare_order_line_move(self, cr, uid, order, order_line, picking_id, group_id, context=None):
@@ -933,7 +933,7 @@ class purchase_order(osv.osv):
# make triggers pointing to the old orders point to the new order
for old_id in old_ids:
self.redirect_workflow(cr, uid, [(old_id, neworder_id)])
self.signal_purchase_cancel(cr, uid, [old_id])
self.signal_workflow(cr, uid, [old_id], 'purchase_cancel')
return orders_info
@@ -1370,7 +1370,7 @@ class mail_mail(osv.Model):
if mail_sent and mail.model == 'purchase.order':
obj = self.pool.get('purchase.order').browse(cr, uid, mail.res_id, context=context)
if obj.state == 'draft':
self.pool.get('purchase.order').signal_send_rfq(cr, uid, [mail.res_id])
self.pool.get('purchase.order').signal_workflow(cr, uid, [mail.res_id], 'send_rfq')
return super(mail_mail, self)._postprocess_sent_message(cr, uid, mail=mail, context=context, mail_sent=mail_sent)
@@ -1423,7 +1423,7 @@ class mail_compose_message(osv.Model):
context = context or {}
if context.get('default_model') == 'purchase.order' and context.get('default_res_id'):
context = dict(context, mail_post_autofollow=True)
self.pool.get('purchase.order').signal_send_rfq(cr, uid, [context['default_res_id']])
self.pool.get('purchase.order').signal_workflow(cr, uid, [context['default_res_id']], 'send_rfq')
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
@@ -245,7 +245,7 @@ class purchase_requisition(osv.osv):
for quotation in tender.purchase_ids:
if (self.check_valid_quotation(cr, uid, quotation, context=context)):
#use workflow to set PO state to confirm
po.signal_purchase_confirm(cr, uid, [quotation.id])
po.signal_workflow(cr, uid, [quotation.id], 'purchase_confirm')
#get other confirmed lines per supplier
for po_line in tender.po_line_ids:
@@ -268,13 +268,13 @@ class purchase_requisition(osv.osv):
vals = self._prepare_po_line_from_tender(cr, uid, tender, line, new_po, context=context)
poline.copy(cr, uid, line.id, default=vals, context=context)
#use workflow to set new PO state to confirm
po.signal_purchase_confirm(cr, uid, [new_po])
po.signal_workflow(cr, uid, [new_po], 'purchase_confirm')
#cancel other orders
self.cancel_unconfirmed_quotations(cr, uid, tender, context=context)
#set tender to state done
self.signal_done(cr, uid, [tender.id])
self.signal_workflow(cr, uid, [tender.id], 'done')
return True
def cancel_unconfirmed_quotations(self, cr, uid, tender, context=None):
@@ -282,7 +282,7 @@ class purchase_requisition(osv.osv):
po = self.pool.get('purchase.order')
for quotation in tender.purchase_ids:
if quotation.state in ['draft', 'sent', 'bid']:
self.pool.get('purchase.order').signal_purchase_cancel(cr, uid, [quotation.id])
self.pool.get('purchase.order').signal_workflow(cr, uid, [quotation.id], 'purchase_cancel')
po.message_post(cr, uid, [quotation.id], body=_('Cancelled by the call for bids associated to this request for quotation.'), context=context)
return True
+52 -52
View File
@@ -328,7 +328,7 @@ msgstr "Cancelada"
#. module: sale
#: view:sale.order.line:0
msgid "Sales Order Lines related to a Sales Order of mine"
msgstr "Linhas da ordem de vendas relacionadas com uma ordem de vendas minha"
msgstr "Linhas da ordem de venda relacionadas com uma ordem de venda minha"
#. module: sale
#: selection:sale.order,state:0
@@ -589,7 +589,7 @@ msgstr "Ordem de venda confirmada"
#. module: sale
#: view:sale.order:0
msgid "Sales Order that haven't yet been confirmed"
msgstr "Ordem de Vendas que ainda não foram confirmadas"
msgstr "Ordens de Venda que ainda não foram confirmadas"
#. module: sale
#: view:sale.order:0
@@ -898,11 +898,11 @@ msgid ""
"1.The state of this sales order line is either \"draft\" or \"cancel\"!\n"
"2.The Sales Order Line is Invoiced!"
msgstr ""
"Fatura não pode ser criada para esta linha de Ordem de vendas devido a uma "
"Fatura não pode ser criada para esta linha de Ordem de venda devido a uma "
"das seguintes razões:\n"
"1.O estado desta linha ordem de vendas esteja como \"Projeto\" ou "
"1.O estado desta linha de ordem de venda seja \"Projeto\" ou "
"\"cancelada\"!\n"
"2.A linha da ordem de vendas é faturada!"
"2.A linha da ordem de venda é faturada!"
#. module: sale
#: view:sale.order.line.make.invoice:0
@@ -1092,7 +1092,7 @@ msgstr "Termos e condições"
#: model:ir.ui.menu,name:sale.menu_sale_order
#: view:sale.order:0
msgid "Sales Orders"
msgstr "Ordens de Vendas"
msgstr "Ordens de Venda"
#. module: sale
#: help:sale.order,amount_tax:0
@@ -1230,7 +1230,7 @@ msgid ""
"if the shipping policy is 'Payment before Delivery'."
msgstr ""
"O vendedor cria uma fatura manualmente, se a política de entrega da ordem de "
"vendas é 'Entrega Manual em Processamento'. A fatura é criada "
" é 'Entrega Manual em Processamento'. A fatura é criada "
"automaticamente se a política de entrega é 'Pagamento depois da Entrega'."
#. module: sale
@@ -1336,7 +1336,7 @@ msgstr ""
#. module: sale
#: help:sale.order,origin:0
msgid "Reference of the document that generated this sales order request."
msgstr "Da referência do documento que gerou a ordem do pedido de vendas."
msgstr "Da referência do documento que gerou a ordem do pedido de ."
#. module: sale
#: code:addons/sale/sale.py:955
@@ -1431,7 +1431,7 @@ msgstr "Faturas de clientes"
#. module: sale
#: model:process.node,note:sale.process_node_order0
msgid "Confirmed sales order to invoice."
msgstr "Confirmação da fatura da ordem de vendas."
msgstr "Confirmação da fatura da ordem de venda."
#. module: sale
#: field:sale.order.line,sequence:0
@@ -1505,7 +1505,7 @@ msgstr "Fatura"
#. module: sale
#: view:sale.order.line:0
msgid "My Sales Order Lines"
msgstr "Minhas linhas da ordem de vendas"
msgstr "Minhas linhas da ordens de venda"
#. module: sale
#: model:process.transition.action,name:sale.process_transition_action_cancel0
@@ -2034,7 +2034,7 @@ msgstr ""
#. module: sale
#: view:sale.report:0
msgid "Ordered month of the sales order"
msgstr "Ordenado pelo mês da ordem de vendas"
msgstr "Ordenado pelo mês da ordem de venda"
#. module: sale
#: model:process.transition,name:sale.process_transition_saleinvoice0
@@ -2054,7 +2054,7 @@ msgid ""
"generates an invoice or a delivery order as soon as it is confirmed by the "
"salesman."
msgstr ""
"Dependendo da ordem de vendas e controle das faturas, estas pode ser "
"Dependendo da ordem de venda e controle das faturas, estas pode ser "
"baseadas em entregas ou em quantidades encomendadas. Assim, uma ordem de "
"venda pode gerar uma fatura ou uma ordem de entrega, assim que é confirmada "
"pelo vendedor."
@@ -2084,7 +2084,7 @@ msgstr "Termo do Pagamento"
#. module: sale
#: view:sale.order:0
msgid "Sales Order ready to be invoiced"
msgstr "Ordem de vendas pronta a ser faturada"
msgstr "Ordem de venda pronta a ser faturada"
#. module: sale
#: field:sale.config.settings,group_invoice_so_lines:0
@@ -2170,7 +2170,7 @@ msgstr ""
#. module: sale
#: view:sale.report:0
msgid "Ordered date of the sales order"
msgstr "Data do Pedido da ordem de vendas"
msgstr "Data do Pedido da ordem de venda"
#~ msgid "Quantity (UoM)"
#~ msgstr "Quantidade (UdM)"
@@ -2474,7 +2474,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ msgstr "Contas de Pagamento"
#~ msgid "Sales orders"
#~ msgstr "Ordens de Vendas"
#~ msgstr "Ordens de Venda"
#~ msgid "Draft Invoice"
#~ msgstr "Factura Rascunho"
@@ -2598,7 +2598,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ msgstr "Somente Entregar Ordem de Venda"
#~ msgid "Sales order lines"
#~ msgstr "Linhas da ordens de vendas"
#~ msgstr "Linhas de ordens de venda"
#~ msgid "Packing OUT is created for stockable products."
#~ msgstr "Saída de Embalagem é criada para produtos armazenáveis."
@@ -2774,7 +2774,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ msgstr "Tem de associar um lote de produção a este artigo"
#~ msgid "Margins in Sales Orders"
#~ msgstr "Fusão de ordens de vendas"
#~ msgstr "Fusão de ordens de venda"
#~ msgid "You invoice has been successfully created!"
#~ msgstr "A sua fatura foi criada com êxito!"
@@ -2830,7 +2830,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ msgstr "Aprovisionamento do material vendido"
#~ msgid "Sales Order Dates"
#~ msgstr "Datas da Ordem de Vendas"
#~ msgstr "Datas da Ordem de Venda"
#~ msgid "Sales Application Configuration"
#~ msgstr "Configuração da Aplicação de Vendas"
@@ -2956,7 +2956,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ "directamente e aguardar que o utilizador clique no botão 'Factura' para "
#~ "gerar a factura do projecto. \n"
#~ " - A escolha 'Factura contra Entrega' irá gerar a factura com base em "
#~ "ordens de vendas, quando todas as listas de recolha forem concluídas.\n"
#~ "ordens de venda, quando todas as listas de recolha forem concluídas.\n"
#~ " - A escolha 'Factura da Recolha' é usada para criar uma factura durante o "
#~ "processo de recolha."
@@ -2974,7 +2974,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ "For every sales order line, a procurement order is created to supply the "
#~ "sold product."
#~ msgstr ""
#~ "Para cada linha de pedido de vendas, uma ordem de aquisição é criada para "
#~ "Para cada linha de pedido de venda, uma ordem de aquisição é criada para "
#~ "fornecer o artigo vendido."
#~ msgid "Setup your sales workflow and default values."
@@ -3008,10 +3008,10 @@ msgstr "Data do Pedido da ordem de vendas"
#~ " "
#~ msgstr ""
#~ "\n"
#~ " O módulo base para gerir cotações e pedidos de vendas.\n"
#~ " O módulo base para gerir cotações e pedidos de venda.\n"
#~ "\n"
#~ " * Fluxo de trabalho com etapas de validação:\n"
#~ " - Cotação -> Ordem de Vendas -> Factura\n"
#~ " - Cotação -> Ordem de Venda -> Factura\n"
#~ " * Métodos de facturação:\n"
#~ " - Facturas ordenadas (antes ou depois do envio)\n"
#~ " - Factura na entrega\n"
@@ -3159,7 +3159,7 @@ msgstr "Data do Pedido da ordem de vendas"
#, python-format
#~ msgid "The sales order '%s' has been cancelled."
#~ msgstr "A ordem de vendas '%s' foi cancelada"
#~ msgstr "A ordem de venda '%s' foi cancelada"
#~ msgid ""
#~ "* The 'Draft' state is set when the related sales order in draft state. "
@@ -3172,13 +3172,13 @@ msgstr "Data do Pedido da ordem de vendas"
#~ " \n"
#~ "* The 'Cancelled' state is set when a user cancel the sales order related."
#~ msgstr ""
#~ "* O estado 'Rascunho' é definido quando a ordem de vendas relacionada se "
#~ "* O estado 'Rascunho' é definido quando a ordem de venda relacionada se "
#~ "encontra em estado 'Rascunho'. \n"
#~ "* O estado 'Confirmado' é definido quando a ordem de vendas relacionada é "
#~ "* O estado 'Confirmado' é definido quando a ordem de venda relacionada é "
#~ "confirmada. \n"
#~ "* O estado 'Excepção' é definido quando a ordem relacionada é definida como "
#~ "uma excepção. \n"
#~ "* O estado 'Feito' é definido quando a linha da ordem de vendas foi "
#~ "* O estado 'Feito' é definido quando a linha da ordem de venda foi "
#~ "escolhida. \n"
#~ "* O estado 'Cancelado' é definido quando o utilizador cancela a ordem de "
#~ "vendar relacionada."
@@ -3193,23 +3193,23 @@ msgstr "Data do Pedido da ordem de vendas"
#~ msgstr "Configure a aplicação da gerência de vendas"
#~ msgid "Sales Order Layout Improvement"
#~ msgstr "Melhoria do Layout da Ordem vendas"
#~ msgstr "Melhoria do Layout da Ordem de venda"
#~ msgid ""
#~ "One Procurement order for each sales order line and for each of the "
#~ "components."
#~ msgstr ""
#~ "Uma ordem de Aquisições para cada linha de pedido de vendas e para cada um "
#~ "Uma ordem de Aquisições para cada linha de pedido de venda e para cada um "
#~ "dos componentes."
#, python-format
#~ msgid "Cannot delete Sales Order(s) which are already confirmed !"
#~ msgstr ""
#~ "Não é possível eliminar a(s) ordem(s) de vendas que já foram confirmadas !"
#~ "Não é possível eliminar a(s) ordem(s) de venda que já foram confirmadas !"
#, python-format
#~ msgid "The sales order '%s' has been set in draft state."
#~ msgstr "A ordem de vendas '%s' foi definida com o estado rascunho."
#~ msgstr "A ordem de venda '%s' foi definida com o estado rascunho."
#~ msgid ""
#~ "If you have more than one shop reselling your company products, you can "
@@ -3243,7 +3243,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ "Provides some features to improve the layout of the Sales Order reports."
#~ msgstr ""
#~ "Fornece alguns recursos para melhorar a apresentação dos relatórios da Ordem "
#~ "de vendas."
#~ "de venda."
#~ msgid "Based on Tasks' Work"
#~ msgstr "Baseada nas tarefas' Trabalho"
@@ -3264,7 +3264,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ "Sale Order Lines that are confirmed, done or in exception state and haven't "
#~ "yet been invoiced"
#~ msgstr ""
#~ "Linhas da ordem de vendas estão confirmadas, concluídas ou em estado de "
#~ "Linhas da ordem de venda estão confirmadas, concluídas ou em estado de "
#~ "exceção e ainda não foram faturados"
#~ msgid "Invoice based on deliveries"
@@ -3304,7 +3304,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ "'para gerar o rascunho da fatura com base na ordem de venda ou as linhas da "
#~ "ordem de venda.\n"
#~ " - A opção 'Fatura após Entrega' irá gerar o rascunho da fatura baseada na "
#~ "ordem de vendas depois de todas as listas de picking terem sido terminadas.\n"
#~ "ordem de venda depois de todas as listas de picking terem sido terminadas.\n"
#~ " - A opção 'Fatura baseada nas entregas' é usada para criar uma fatura "
#~ "durante o processo de picking."
@@ -3328,7 +3328,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ msgstr "Não pode mover os artigos de ou para um local de tipo vista."
#~ msgid "Based on Sales Orders"
#~ msgstr "Baseado na ordem de vendas"
#~ msgstr "Baseado na ordem de venda"
#~ msgid "Line Sequence"
#~ msgstr "Sequência da linha"
@@ -3371,7 +3371,7 @@ msgstr "Data do Pedido da ordem de vendas"
#, python-format
#~ msgid "Cannot delete a sales order line which is in state '%s'!"
#~ msgstr ""
#~ "Não é possível excluir uma linha da ordem de vendas que esteja no estado "
#~ "Não é possível excluir uma linha da ordem de venda que esteja no estado "
#~ "'%s'!"
#, python-format
@@ -3382,7 +3382,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ msgstr "Cobram a entrega?"
#~ msgid "Sales order created in current month"
#~ msgstr "Ordens de vendas criadas este mês"
#~ msgstr "Ordens de venda criadas este mês"
#~ msgid ""
#~ "If 'on order', it triggers a procurement when the sale order is confirmed to "
@@ -3403,7 +3403,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ msgstr "${object.company_id.name} Order (Ref ${object.name or 'n/a' })"
#~ msgid "Confirmed sale order lines, not yet delivered"
#~ msgstr "Linhas da ordem de vendas confirmadas, mas ainda não foram entregues"
#~ msgstr "Linhas da ordem de venda confirmadas, mas ainda não entregues"
#~ msgid "Setup your Invoicing Method"
#~ msgstr "Configure o seu método de faturação"
@@ -3415,19 +3415,19 @@ msgstr "Data do Pedido da ordem de vendas"
#~ msgstr "Ordem de Impressão"
#~ msgid "Sale order lines done"
#~ msgstr "Linhas da ordem de vendas concluídas"
#~ msgstr "Linhas da ordem de venda concluídas"
#~ msgid "Sale Order Lines ready to be invoiced"
#~ msgstr "Linhas da ordem de vendas prontas para serem faturadas"
#~ msgstr "Linhas da ordem de venda prontas para serem faturadas"
#~ msgid "Sale Order Lines that are in 'done' state"
#~ msgstr "Linhas da ordem de vendas que estejam no estado 'Concluído'"
#~ msgstr "Linhas da ordem de venda que estejam no estado 'Concluído'"
#~ msgid "Main Method Based On"
#~ msgstr "Métodos principais baseados"
#~ msgid "Sales order created in current year"
#~ msgstr "Ordens de Vendas criadas este ano"
#~ msgstr "Ordens de Venda criadas este ano"
#~ msgid "Contract/Analytic Account"
#~ msgstr "Contrato / Conta Analítica"
@@ -3450,7 +3450,7 @@ msgstr "Data do Pedido da ordem de vendas"
#~ msgstr "Sem stock suficiente ! : "
#~ msgid "Sales order created in last month"
#~ msgstr "Ordem de vendas criadas no mês passado"
#~ msgstr "Ordem de venda criadas no mês passado"
#~ msgid "Deliver & invoice on demand"
#~ msgstr "Entrega & Fatura a pedido"
@@ -3467,8 +3467,8 @@ msgstr "Data do Pedido da ordem de vendas"
#~ "sales orders partially, by lines of sales order. You do not need this list "
#~ "if you invoice from the delivery orders or if you invoice sales totally."
#~ msgstr ""
#~ "Aqui está uma lista de cada pedido de vendas a ser faturado. Pode faturar "
#~ "ordens de venda parcialmente, por linhas de pedido de vendas. Não precisa "
#~ "Aqui está uma lista de cada pedido de venda a ser faturado. Pode faturar "
#~ "ordens de venda parcialmente, por linhas de pedido de venda. Não precisa "
#~ "desta lista se faturar os pedidos de entrega ou se facturar a venda "
#~ "totalmente."
@@ -3488,12 +3488,12 @@ msgstr "Data do Pedido da ordem de vendas"
#~ "configuration of the sales order, a draft invoice will be generated so that "
#~ "you just have to confirm it when you want to bill your customer."
#~ msgstr ""
#~ "Pedidos de Vendas ajudá-lo a gerir citações e ordens de seus clientes. "
#~ "Ordens de Venda ajudam-no a gerir citações e ordens de seus clientes. "
#~ "OpenERP sugere que se comece a criar um orçamento. Uma vez confirmada, a "
#~ "cotação será convertida numa ordem de venda. O OpenERP pode gerir vários "
#~ "tipos de artigos, possibilitando que uma ordem de venda desencadeie tarefas, "
#~ "ordens de entrega, ordens de produção, compras e assim por diante. Com base "
#~ "na configuração da ordem de vendas, uma fatura projeto será gerada para que "
#~ "na configuração da ordem de venda, uma fatura projeto será gerada para que "
#~ "só tenha que confirmar isso quando quiser faturar o cliente."
#~ msgid "Order Line"
@@ -3788,10 +3788,10 @@ msgstr "Data do Pedido da ordem de vendas"
#~ "parts to the sales order. There is 1 pick list by sales order line which "
#~ "evolves with the availability of parts."
#~ msgstr ""
#~ "O formulário da Lista Pick é criado assim que a ordem de vendas é "
#~ "O formulário da Lista Pick é criado assim que a ordem de venda é "
#~ "confirmada, ao mesmo tempo que a ordem de aquisição. Ele representa a "
#~ "atribuição de peças para a ordem de vendas. Há uma lista de seleção de linha "
#~ "da ordem de vendas que evolui com a disponibilidade das peças."
#~ "atribuição de peças para a ordem de venda. Há uma lista de seleção de linha "
#~ "da ordem de venda que evolui com a disponibilidade das peças."
#~ msgid "Sales by Month"
#~ msgstr "Vendas por mês"
@@ -3802,14 +3802,14 @@ msgstr "Data do Pedido da ordem de vendas"
#~ "production of products regarding to the rules and to the sales order's "
#~ "parameters. "
#~ msgstr ""
#~ "A ordem de aquisição é criada automaticamente, logo que uma ordem de vendas "
#~ "A ordem de aquisição é criada automaticamente, logo que uma ordem de venda "
#~ "é confirmada ou a fatura é paga. Que impulsiona a compra e a produção de "
#~ "artigos em relação às regras e aos parâmetros da ordem de vendas. "
#~ "artigos em relação às regras e aos parâmetros da ordem de venda. "
#, python-format
#~ msgid "You must first cancel all invoices attached to this sales order."
#~ msgstr ""
#~ "É necessário cancelar todas as faturas ligadas a esta ordem de vendas."
#~ "É necessário cancelar todas as faturas ligadas a esta ordem de venda."
#~ msgid "Invoice Based on Deliveries"
#~ msgstr "Fatura Baseada em Entregas"
+1 -1
View File
@@ -60,7 +60,7 @@ class sale_make_invoice(osv.osv_memory):
for i in o.invoice_ids:
newinv.append(i.id)
# Dummy call to workflow, will not create another invoice but bind the new invoice to the subflow
order_obj.signal_manual_invoice(cr, uid, [o.id for o in orders if o.order_policy == 'manual'])
order_obj.signal_workflow(cr, uid, [o.id for o in orders if o.order_policy == 'manual'], 'manual_invoice')
result = mod_obj.get_object_reference(cr, uid, 'account', 'action_invoice_tree1')
id = result and result[1] or False
result = act_obj.read(cr, uid, [id], context=context)[0]
+2 -2
View File
@@ -159,7 +159,7 @@ class sale_order(osv.osv):
raise osv.except_osv(
_('Cannot cancel sales order!'),
_('You must first cancel all delivery order(s) attached to this sales order.'))
stock_obj.signal_button_cancel(cr, uid, [p.id for p in sale.picking_ids])
stock_obj.signal_workflow(cr, uid, [p.id for p in sale.picking_ids], 'button_cancel')
return super(sale_order, self).action_cancel(cr, uid, ids, context=context)
def action_wait(self, cr, uid, ids, context=None):
@@ -356,7 +356,7 @@ class stock_move(osv.osv):
if move.procurement_id and move.procurement_id.sale_line_id:
sale_ids.append(move.procurement_id.sale_line_id.order_id.id)
if sale_ids:
self.pool.get('sale.order').signal_ship_except(cr, uid, sale_ids)
self.pool.get('sale.order').signal_workflow(cr, uid, sale_ids, 'ship_except')
return super(stock_move, self).action_cancel(cr, uid, ids, context=context)
def _create_invoice_line_from_vals(self, cr, uid, move, invoice_line_vals, context=None):
@@ -76,7 +76,7 @@
!python {model: sale.order}: |
invoice_ids = self.browse(cr, uid, ref("sale.sale_order_8")).invoice_ids
first_invoice_id = invoice_ids[0]
self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, [first_invoice_id.id])
self.pool.get('account.invoice').signal_workflow(cr, uid, [first_invoice_id.id], 'invoice_cancel')
-
I check order status in "Invoice Exception" and related invoice is in cancel state.
-
@@ -190,7 +190,7 @@
so = self.browse(cr, uid, ref("sale_order_service"))
account_invoice_obj = self.pool.get('account.invoice')
for invoice in so.invoice_ids:
account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id])
account_invoice_obj.signal_workflow(cr, uid, [invoice.id], 'invoice_open')
-
I pay the invoice
-
@@ -76,7 +76,7 @@ class make_procurement(osv.osv_memory):
'location_id': wh.lot_stock_id.id,
'company_id': wh.company_id.id,
})
procurement_obj.signal_button_confirm(cr, uid, [procure_id])
procurement_obj.signal_workflow(cr, uid, [procure_id], 'button_confirm')
id2 = data_obj._get_id(cr, uid, 'procurement', 'procurement_tree_view')
id3 = data_obj._get_id(cr, uid, 'procurement', 'procurement_form_view')
+33 -147
View File
@@ -8,7 +8,6 @@
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "EntypoRegular";
src: url("/web/static/src/font/entypo-webfont.eot") format("eot");
@@ -19,7 +18,6 @@
font-weight: normal;
font-style: normal;
}
#oe_main_menu_navbar {
min-height: 34px;
z-index: 1001;
@@ -39,6 +37,39 @@
margin-bottom: 0px;
}
.oe_systray {
margin-right: 0px !important;
}
.oe_notification {
z-index: 1600;
}
.oe_webclient_timezone_notification a {
color: white;
text-decoration: underline;
}
.oe_webclient_timezone_notification p {
margin-top: 1em;
}
.oe_webclient_timezone_notification dt {
font-weight: bold;
}
.oe_timezone_systray span {
margin-top: 1px;
background-color: #f6cf3b;
}
.navbar .oe_topbar_name {
max-width: 150px;
display: inline-block;
height: 15px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.openerp {
padding: 0;
margin: 0;
@@ -800,23 +831,6 @@
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
}
.openerp .oe_notification {
z-index: 1500;
}
.openerp .oe_webclient_timezone_notification a {
color: white;
text-decoration: underline;
}
.openerp .oe_webclient_timezone_notification p {
margin-top: 1em;
}
.openerp .oe_webclient_timezone_notification dt {
font-weight: bold;
}
.openerp .oe_timezone_systray span {
margin-top: 1px;
background-color: #f6cf3b;
}
.openerp .oe_dialog_warning {
width: 100%;
}
@@ -847,133 +861,6 @@
.openerp .oe_content_full_screen .oe_topbar, .openerp .oe_content_full_screen .oe_leftbar {
display: none;
}
.openerp .navbar .oe_topbar_anonymous_login {
background-color: #dc5f59;
color: #eeeeee;
background-color: #be4343;
background-image: -webkit-gradient(linear, left top, left bottom, from(#fc8787), to(maroon));
background-image: -webkit-linear-gradient(top, #fc8787, maroon);
background-image: -moz-linear-gradient(top, #fc8787, maroon);
background-image: -ms-linear-gradient(top, #fc8787, maroon);
background-image: -o-linear-gradient(top, #fc8787, maroon);
background-image: linear-gradient(to bottom, #fc8787, #800000);
}
.openerp .navbar .oe_topbar_anonymous_login a {
display: block;
padding: 5px 10px 7px;
line-height: 20px;
height: 30px;
text-decoration: none;
color: white;
background: transparent;
-webkit-transition: all 0.2s ease-out;
-moz-transition: all 0.2s ease-out;
-ms-transition: all 0.2s ease-out;
-o-transition: all 0.2s ease-out;
transition: all 0.2s ease-out;
}
.openerp .navbar .oe_topbar_anonymous_login a:hover {
background: rgba(0, 0, 0, 0.1);
color: white;
text-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset;
}
.openerp .navbar .oe_topbar_item {
display: block;
padding: 5px 10px 26px;
line-height: 20px;
height: 20px;
text-decoration: none;
color: #eeeeee;
vertical-align: top;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
-webkit-transition: all 0.2s ease-out;
-moz-transition: all 0.2s ease-out;
-ms-transition: all 0.2s ease-out;
-o-transition: all 0.2s ease-out;
transition: all 0.2s ease-out;
}
.openerp .navbar .oe_topbar_item:hover {
background: rgba(0, 0, 0, 0.2);
text-shadow: black 0px 0px 3px;
color: white;
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
}
.openerp .navbar .oe_topbar_avatar {
width: 24px;
height: 24px;
margin: -2px 2px 0 0;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
.openerp .navbar .oe_topbar_avatar {
vertical-align: top;
}
.openerp .navbar .oe_dropdown_arrow:after {
border-top: 4px solid white;
}
.openerp .navbar .dropdown_menu {
top: 32px;
background: #333333;
background: rgba(37, 37, 37, 0.9);
border-color: #999999;
border-color: rgba(0, 0, 0, 0.2);
border-style: solid;
border-width: 0 2px 1px;
-moz-border-radius: 0 0 6px 6px;
-webkit-border-radius: 0 0 6px 6px;
border-radius: 0 0 6px 6px;
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
}
.openerp .navbar .dropdown_menu li {
float: none;
padding: 3px 12px;
}
.openerp .navbar .dropdown_menu li a {
color: #eeeeee;
}
.openerp .navbar .dropdown_menu li:hover {
background-color: #212121;
background-image: -webkit-gradient(linear, left top, left bottom, from(#292929), to(#191919));
background-image: -webkit-linear-gradient(top, #292929, #191919);
background-image: -moz-linear-gradient(top, #292929, #191919);
background-image: -ms-linear-gradient(top, #292929, #191919);
background-image: -o-linear-gradient(top, #292929, #191919);
background-image: linear-gradient(to bottom, #292929, #191919);
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.openerp .navbar .oe_topbar_name {
max-width: 150px;
display: inline-block;
height: 15px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.openerp .nav li a {
padding: 6px 8px 4px 8px;
}
.openerp .oe_user_menu {
float: right;
padding: 0;
margin: 0;
}
.openerp .oe_user_menu li {
list-style-type: none;
float: left;
}
.openerp .oe_user_menu .oe_dropdown_menu {
right: -1px;
}
.openerp .oe_leftbar {
display: none;
width: 220px;
@@ -3114,7 +3001,6 @@
top: 0px;
}
}
.kitten-mode-activated {
background-size: cover;
background-attachment: fixed;
+31 -106
View File
@@ -158,6 +158,37 @@ $sheet-padding: 16px
#oe_main_menu_navbar.navbar
margin-bottom: 0px
.oe_systray
margin-right: 0px !important
// Notifications {{{
.oe_notification
z-index: 1600
.oe_webclient_timezone_notification
a
color: white
text-decoration: underline
p
margin-top: 1em
dt
font-weight: bold
.oe_timezone_systray
span
margin-top: 1px
background-color: #f6cf3b
// }}}
// Top Menu {{{
.navbar
.oe_topbar_name
max-width: 150px
display: inline-block
height: 15px // Customize to manage caret when topbar_name is over sized.
text-overflow: ellipsis
white-space: nowrap
overflow: hidden // Customize to bring ellipsis when topbar_name is over sized.
// }}}
.openerp
// Global style {{{
padding: 0
@@ -690,23 +721,6 @@ $sheet-padding: 16px
border-bottom-right-radius: 8px
border-bottom-left-radius: 8px
// }}}
// Notifications {{{
.oe_notification
z-index: 1500
.oe_webclient_timezone_notification
a
color: white
text-decoration: underline
p
margin-top: 1em
dt
font-weight: bold
.oe_timezone_systray
span
margin-top: 1px
background-color: #f6cf3b
// }}}
// CrashManager {{{
.oe_dialog_warning
width: 100%
@@ -738,95 +752,6 @@ $sheet-padding: 16px
.oe_topbar, .oe_leftbar
display: none
// }}}
// Top Menu {{{
.navbar
.oe_topbar_anonymous_login
background-color: #dc5f59
color: #eeeeee
@include vertical-gradient(#FC8787, #800000)
a
display: block
padding: 5px 10px 7px
line-height: 20px
height: 30px
text-decoration: none
color: white
background: transparent
@include transition(all 0.2s ease-out)
a:hover
background: rgba(0,0,0,0.1)
color: white
text-shadow: 0px 0px 3px rgba(0,0,0,0.2)
@include box-shadow(0 1px 2px rgba(0,0,0,0.2) inset)
.oe_topbar_item
display: block
padding: 5px 10px 26px
line-height: 20px
height: 20px
text-decoration: none
color: #eee
vertical-align: top
text-shadow: 0 1px 1px rgba(0,0,0,0.2)
@include transition(all 0.2s ease-out)
&:hover
background: rgba(0,0,0,0.2)
text-shadow: black 0px 0px 3px
color: white
@include box-shadow(0 1px 2px rgba(0,0,0,0.4) inset)
.oe_topbar_avatar
width: 24px
height: 24px
margin: -2px 2px 0 0
@include radius(3px)
.oe_topbar_avatar
vertical-align: top
.oe_dropdown_arrow:after
border-top: 4px solid white
.dropdown_menu
top: 32px
background: #333
background: rgba(37,37,37,0.9)
border-color: #999
border-color: rgba(0, 0, 0, 0.2)
border-style: solid
border-width: 0 2px 1px
@include radius(0 0 6px 6px)
@include background-clip()
li
float: none
padding: 3px 12px
a
color: #eee
&:hover
@include vertical-gradient(#292929, #191919)
@include box-shadow(none)
.oe_topbar_name
max-width: 150px
display: inline-block
height: 15px // Customize to manage caret when topbar_name is over sized.
text-overflow: ellipsis
white-space: nowrap
overflow: hidden // Customize to bring ellipsis when topbar_name is over sized.
// oe menu is the list of the buttons on the left side of the bar.
// So why aren't the buttons oe_topbar_items ? This sad state of affairs
// is a leftover from an uncomplete refactoring when the left and top menu
// were merged. You are welcome to refactor and clean this up
.nav li a
padding: 6px 8px 4px 8px
.oe_user_menu
float: right
padding: 0
margin: 0
li
list-style-type: none
float: left
.oe_dropdown_menu
right: -1px
// }}}
// Webclient.leftbar {{{
.oe_leftbar
display: none
+1 -1
View File
@@ -65,7 +65,7 @@ class sale_quote(http.Controller):
if token != order.access_token:
return request.website.render('website.404')
attachments=sign and [('signature.png', sign.decode('base64'))] or []
order_obj.signal_order_confirm(request.cr, SUPERUSER_ID, [order_id], context=request.context)
order_obj.signal_workflow(request.cr, SUPERUSER_ID, [order_id], 'order_confirm', context=request.context)
message = _('Order signed by %s') % (signer,)
self.__message_post(message, order_id, type='comment', subtype='mt_comment', attachments=attachments)
return True
+7 -7
View File
@@ -8,7 +8,7 @@ msgstr ""
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-11-24 14:57+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Last-Translator: krnkris <krnkris@freemail.hu>\n"
"Language-Team: Hungarian <openerp-hungarian-team@lists.launchpad.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -103,7 +103,7 @@ msgstr "Indiai bérszámfejtés"
#: help:ir.cron,model:0
msgid ""
"Model name on which the method to be called is located, e.g. 'res.partner'."
msgstr "Modell név ahogyan az megnevezve megtalálható, p.l. 'res.partner'."
msgstr "Modell név elnevezése szerint megtalálható, p.l. 'res.partner'."
#. module: base
#: view:ir.module.module:0
@@ -4000,7 +4000,7 @@ msgstr "Időszakos értékelések, Felbecsülések, Felmérések"
#: model:ir.actions.act_window,name:base.ir_property_form
#: model:ir.ui.menu,name:base.menu_ir_property_form_all
msgid "Configuration Parameters"
msgstr "Konfiguráció Paraméterek"
msgstr "Beállítási Paaraméterek"
#. module: base
#: constraint:ir.cron:0
@@ -4171,9 +4171,9 @@ msgid ""
"separated list of valid field names (optionally followed by asc/desc for the "
"direction)"
msgstr ""
"Invalid \"order\" specified. A valid \"order\" specification is a comma-"
"separated list of valid field names (optionally followed by asc/desc for the "
"direction)"
"Érvénytelen \"megrendelés\" meghatározás. Az érvénnyes \"megrendelés\" egy vesszővel"
"elválasztott lista érvényes mező nevekkel (választhatóan növekvő/csökkenő sorrendbe "
"állítva)"
#. module: base
#: model:ir.model,name:base.model_ir_module_module_dependency
@@ -4217,7 +4217,7 @@ msgstr ""
#. module: base
#: model:res.groups,name:base.group_survey_user
msgid "Survey / User"
msgstr "Felmérés / felhasználó"
msgstr "Felmérés / Felhasználó"
#. module: base
#: view:ir.module.module:0
+2 -2
View File
@@ -848,9 +848,9 @@ class ir_actions_server(osv.osv):
def run_action_trigger(self, cr, uid, action, eval_context=None, context=None):
""" Trigger a workflow signal, depending on the use_relational_model:
- `base`: base_model_pool.signal_<TRIGGER_NAME>(cr, uid, context.get('active_id'))
- `base`: base_model_pool.signal_workflow(cr, uid, context.get('active_id'), <TRIGGER_NAME>)
- `relational`: find the related model and object, using the relational
field, then target_model_pool.signal_<TRIGGER_NAME>(cr, uid, target_id)
field, then target_model_pool.signal_workflow(cr, uid, target_id, <TRIGGER_NAME>)
"""
obj_pool = self.pool[action.model_id.model]
if action.use_relational_model == 'base':
+9 -14
View File
@@ -3231,8 +3231,16 @@ class BaseModel(object):
record._cache.update(record._convert_to_cache(vals))
# store failed values in cache for the records that could not be read
missing = self - self.browse(ids)
fetched = self.browse(ids)
missing = self - fetched
if missing:
extras = fetched - self
if extras:
raise AccessError(
_("Database fetch misses ids ({}) and has extra ids ({}), may be caused by a type incoherence in a previous request").format(
', '.join(map(repr, missing._ids)),
', '.join(map(repr, extras._ids)),
))
# store an access error exception in existing records
exc = AccessError(
_('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: %s, Operation: %s)') % \
@@ -4937,19 +4945,6 @@ class BaseModel(object):
""" stuff to do right after the registry is built """
pass
def __getattr__(self, name):
if name.startswith('signal_'):
# self.signal_XXX() sends signal XXX to the record's workflow
signal_name = name[7:]
assert signal_name
return (lambda *args, **kwargs:
self.signal_workflow(*args, signal=signal_name, **kwargs))
get = getattr(super(BaseModel, self), '__getattr__', None)
if get is None:
raise AttributeError("%r has no attribute %r" % (type(self).__name__, name))
return get(name)
def _patch_method(self, name, method):
""" Monkey-patch a method for all instances of this model. This replaces
the method called `name` by `method` in `self`'s class.
+1 -1
View File
@@ -30,7 +30,7 @@ RELEASE_LEVELS_DISPLAY = {ALPHA: ALPHA,
# properly comparable using normal operarors, for example:
# (6,1,0,'beta',0) < (6,1,0,'candidate',1) < (6,1,0,'candidate',2)
# (6,1,0,'candidate',2) < (6,1,0,'final',0) < (6,1,2,'final',0)
version_info = (8, 0, 0, ALPHA, 1)
version_info = (9, 0, 0, ALPHA, 1)
version = '.'.join(map(str, version_info[:2])) + RELEASE_LEVELS_DISPLAY[version_info[3]] + str(version_info[4] or '')
series = serie = major_version = '.'.join(map(str, version_info[:2]))