Active Record

This commit is contained in:
Cédric Krier
2012-09-24 22:18:09 +02:00
parent 41ece280fb
commit eeced05eec
5 changed files with 929 additions and 1204 deletions
+35
View File
@@ -1,7 +1,42 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
from trytond.pool import Pool
from .purchase import *
from .configuration import *
from .invoice import *
from .stock import *
def register():
Pool.register(
Purchase,
PurchaseInvoice,
PurchaseIgnoredInvoice,
PurchaseRecreadtedInvoice,
PurchaseLine,
PurchaseLineTax,
PurchaseLineInvoiceLine,
PurchaseLineIgnoredMove,
PurchaseLineRecreatedMove,
Template,
Product,
ProductSupplier,
ProductSupplierPrice,
ShipmentIn,
Move,
HandleShipmentExceptionAsk,
HandleInvoiceExceptionAsk,
Configuration,
Invoice,
InvoiceLine,
module='purchase', type_='model')
Pool.register(
PurchaseReport,
module='purchase', type_='report')
Pool.register(
OpenSupplier,
HandleShipmentException,
HandleInvoiceException,
OpenProductQuantitiesByWarehouse,
module='purchase', type_='wizard')
+3 -5
View File
@@ -3,12 +3,12 @@
from trytond.model import ModelView, ModelSQL, ModelSingleton, fields
from trytond.pyson import Eval, Bool
__all__ = ['Configuration']
class Configuration(ModelSingleton, ModelSQL, ModelView):
'Purchase Configuration'
_name = 'purchase.configuration'
_description = __doc__
__name__ = 'purchase.configuration'
purchase_sequence = fields.Property(fields.Many2One('ir.sequence',
'Purchase Reference Sequence', domain=[
('company', 'in',
@@ -22,5 +22,3 @@ class Configuration(ModelSingleton, ModelSQL, ModelView):
], 'Invoice Method', states={
'required': Bool(Eval('context', {}).get('company', 0)),
}))
Configuration()
+86 -26
View File
@@ -1,50 +1,110 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
from trytond.model import Model, fields
from trytond.pool import Pool
from trytond.model import ModelView, Workflow, fields
from trytond.pool import Pool, PoolMeta
from trytond.transaction import Transaction
__all__ = ['Invoice', 'InvoiceLine']
__metaclass__ = PoolMeta
class Invoice(Model):
_name = 'account.invoice'
class Invoice:
__name__ = 'account.invoice'
purchase_exception_state = fields.Function(fields.Selection([
('', ''),
('ignored', 'Ignored'),
('recreated', 'Recreated'),
], 'Exception State'), 'get_purchase_exception_state')
purchases = fields.Many2Many('purchase.purchase-account.invoice',
'invoice', 'purchase', 'Purchases', readonly=True)
def copy(self, ids, default=None):
@classmethod
def __setup__(cls):
super(Invoice, cls).__setup__()
cls._error_messages.update({
'delete_purchase_invoice': 'You can not delete invoices ' \
'that come from a purchase!',
'reset_invoice_purchase': 'You cannot reset to draft ' \
'an invoice generated by a purchase.',
})
@classmethod
def get_purchase_exception_state(cls, invoices, name):
Purchase = Pool().get('purchase.purchase')
purchases = Purchase.search([
('invoices', 'in', [i.id for i in invoices]),
])
recreated = tuple(i for p in purchases for i in p.invoices_recreated)
ignored = tuple(i for p in purchases for i in p.invoices_ignored)
res = {}
for invoice in invoices:
if invoice in recreated:
res[invoice.id] = 'recreated'
elif invoice in ignored:
res[invoice.id] = 'ignored'
else:
res[invoice.id] = ''
return res
@classmethod
def delete(cls, invoices):
cursor = Transaction().cursor
if invoices:
cursor.execute('SELECT id FROM purchase_invoices_rel ' \
'WHERE invoice IN (' + ','.join(('%s',) * len(invoices)) + ')',
[i.id for i in invoices])
if cursor.fetchone():
cls.raise_user_error('delete_purchase_invoice')
super(Invoice, cls).delete(invoices)
@classmethod
def copy(cls, invoices, default=None):
if default is None:
default = {}
default = default.copy()
default.setdefault('purchases', None)
return super(Invoice, self).copy(ids, default=default)
return super(Invoice, cls).copy(invoices, default=default)
def paid(self, ids):
@classmethod
@ModelView.button
@Workflow.transition('draft')
def draft(cls, invoices):
Purchase = Pool().get('purchase.purchase')
purchases = Purchase.search([
('invoices', 'in', [i.id for i in invoices]),
])
if purchases:
cls.raise_user_error('reset_invoice_purchase')
return super(Invoice, cls).draft(invoices)
@classmethod
def paid(cls, invoices):
pool = Pool()
purchase_obj = pool.get('purchase.purchase')
super(Invoice, self).paid(ids)
invoices = self.browse(ids)
purchase_obj.process([p.id for i in invoices for p in i.purchases])
Purchase = pool.get('purchase.purchase')
super(Invoice, cls).paid(invoices)
Purchase.process([p for i in invoices for p in i.purchases])
def cancel(self, ids):
@classmethod
def cancel(cls, invoices):
pool = Pool()
purchase_obj = pool.get('purchase.purchase')
super(Invoice, self).cancel(ids)
invoices = self.browse(ids)
purchase_obj.process([p.id for i in invoices for p in i.purchases])
Invoice()
Purchase = pool.get('purchase.purchase')
super(Invoice, cls).cancel(invoices)
Purchase.process([p for i in invoices for p in i.purchases])
class InvoiceLine(Model):
_name = 'account.invoice.line'
class InvoiceLine:
__name__ = 'account.invoice.line'
purchase_lines = fields.Many2Many('purchase.line-account.invoice.line',
'invoice_line', 'purchase_line', 'Purchase Lines', readonly=True)
def copy(self, ids, default=None):
@classmethod
def copy(cls, lines, default=None):
if default is None:
default = {}
default = default.copy()
default.setdefault('purchase_lines', None)
return super(InvoiceLine, self).copy(ids, default=default)
InvoiceLine()
return super(InvoiceLine, cls).copy(lines, default=default)
+797 -1162
View File
File diff suppressed because it is too large Load Diff
+8 -11
View File
@@ -7,23 +7,22 @@ from trytond.pool import Pool
from trytond.transaction import Transaction
from trytond.pyson import PYSONDecoder, PYSONEncoder
__all__ = ['OpenProductQuantitiesByWarehouse']
class OpenProductQuantitiesByWarehouse(Wizard):
_name = 'stock.product_quantities_warehouse'
__name__ = 'stock.product_quantities_warehouse'
def do_open_(self, session, action):
pool = Pool()
product_obj = pool.get('product.product')
product_supplier_obj = pool.get('purchase.product_supplier')
def do_open_(self, action):
Product = Pool().get('product.product')
action, data = super(OpenProductQuantitiesByWarehouse,
self).do_open_(session, action)
self).do_open_(action)
product = product_obj.browse(Transaction().context['active_id'])
product = Product(Transaction().context['active_id'])
if product.product_suppliers:
product_supplier = product.product_suppliers[0]
supply_date = \
product_supplier_obj.compute_supply_date(product_supplier)
supply_date = product_supplier.compute_supply_date()
if supply_date != datetime.date.max:
search_value = \
PYSONDecoder().decode(action['pyson_search_value'])
@@ -35,5 +34,3 @@ class OpenProductQuantitiesByWarehouse(Wizard):
action['pyson_search_value'] = PYSONEncoder().encode(
search_value)
return action, data
OpenProductQuantitiesByWarehouse()