Active Record
This commit is contained in:
+35
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user