Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.55 KB | None | 0 0
  1. class CreatePurchaseRequestQuotationAskSuppliers(ModelView):
  2.     'Create Purchase Request Quotation Ask Suppliers'
  3.     __name__ = 'purchase.request.create_quotation.ask_suppliers'
  4.  
  5.     requests = fields.Many2Many('purchase.request', None, None, 'Requests',
  6.                     required=True, readonly=True)
  7.     suppliers = fields.Many2Many('party.party', None, None, 'Suppliers',
  8.                     required=True)
  9.  
  10.  
  11. class CreatePurchaseRequestQuotation(Wizard):
  12.     'Create Purchase Request Quotation'
  13.     __name__ = 'purchase.request.create_quotation'
  14.  
  15.     start = StateTransition()
  16.     ask_suppliers = StateView(
  17.         'purchase.request.create_quotation.ask_suppliers',
  18.         'purchase_request_quotation.purchase_request_create_quotation_ask_suppliers', [
  19.             Button('Cancel', 'end', 'tryton-cancel'),
  20.             Button('Continue', 'start', 'tryton-go-next', default=True),
  21.             ])
  22.  
  23.     @classmethod
  24.     def __setup__(cls):
  25.         super(CreatePurchaseRequestQuotation, cls).__setup__()
  26.         cls._error_messages.update({
  27.                 'previous_quotation': ('You already made a quotation with '
  28.                     'one of the selected requests: "%(requests)s".'),
  29.                 })
  30.  
  31.     def default_ask_suppliers(self, fields):
  32.         pool = Pool()
  33.         values = {}
  34.         request_quotation_state = []
  35.         Request = pool.get('purchase.request')
  36.  
  37.         request_ids = Transaction().context['active_ids']
  38.         requests = Request.search([
  39.                     ('id', 'in', request_ids),
  40.                     ('state', 'in', ['draft', 'quotation']),
  41.                     ])
  42.         self.raise_user_warning('previous_quotation', {
  43.                             'requests': ', '.join(r.rec_name
  44.                                 for r in requests),
  45.                             })
  46.         values['requests'] = requests
  47.         for request in requests:
  48.             if request.state == 'quotation':
  49.                 request_quotation_state.append(request)
  50.             if request.party:
  51.                 values['suppliers'].append(request.party)
  52.         if request_quotation_state:
  53.             self.raise_user_warning('previous_quotation', {
  54.                             'requests': ', '.join(r.rec_name
  55.                                 for r in request_quotation_state),
  56.                             })
  57.         return values
  58.  
  59.     def transition_start(self):
  60.         pool = Pool()
  61.         Request = pool.get('purchase.request')
  62.         Quotation = pool.get('purchase.request.quotation')
  63.  
  64.         new_quotations = []
  65.         request_ids = Transaction().context['active_ids']
  66.         requests = Request.search([
  67.                     ('id', 'in', request_ids),
  68.                     ('state', 'in', ['draft', 'quotation']),
  69.                     ])
  70.         for request in requests:
  71.             new_quotations.append({
  72.                         'company': request.company,
  73.                         'origin': request,
  74.                         'description': request.description,
  75.                         'quantity': request.quantity,
  76.                         'unit': request.uom,
  77.                         'currency': request.currency,
  78.                         'supply_date': (
  79.                             request.supply_date or datetime.date.max),
  80.                         })
  81.         suppliers = []
  82.         for supplier in getattr(self.ask_suppliers, 'suppliers', []):
  83.             suppliers.append({
  84.                     'supplier': supplier,
  85.                     })
  86.         if suppliers:
  87.             quotation_lines = []
  88.             for (nq, s) in product(new_quotations, suppliers):
  89.                 merged = {}
  90.                 merged.update(nq)
  91.                 merged.update(s)
  92.                 quotation_lines.append(merged)
  93.             Quotation.save(quotation_lines)
  94.  
  95.             quotations = sorted(quotation_lines,
  96.                             key=self._group_purchase_request_quotation_key)
  97.             for key, grouped_quotations in groupby(quotations,
  98.                     key=self._group_purchase_request_quotation_key):
  99.                     group = self._new_group(dict(key))
  100.                     group.save()
  101.                     Quotation.write(grouped_quotations, {'group': group.id})
  102.  
  103.         return 'end'
  104.  
  105.     def _group_purchase_request_quotation_key(self, quotation):
  106.         return (
  107.             ('company', quotation.company),
  108.             ('supplier', quotation.supplier),
  109.             )
  110.  
  111.     def _new_group(self, values):
  112.         pool = Pool()
  113.         Group = pool.get('purchase.request.quotation.group')
  114.         return Group(**values)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement