Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class CreatePurchaseRequestQuotationAskSuppliers(ModelView):
- 'Create Purchase Request Quotation Ask Suppliers'
- __name__ = 'purchase.request.create_quotation.ask_suppliers'
- requests = fields.Many2Many('purchase.request', None, None, 'Requests',
- required=True, readonly=True)
- suppliers = fields.Many2Many('party.party', None, None, 'Suppliers',
- required=True)
- class CreatePurchaseRequestQuotation(Wizard):
- 'Create Purchase Request Quotation'
- __name__ = 'purchase.request.create_quotation'
- start = StateTransition()
- ask_suppliers = StateView(
- 'purchase.request.create_quotation.ask_suppliers',
- 'purchase_request_quotation.purchase_request_create_quotation_ask_suppliers', [
- Button('Cancel', 'end', 'tryton-cancel'),
- Button('Continue', 'start', 'tryton-go-next', default=True),
- ])
- @classmethod
- def __setup__(cls):
- super(CreatePurchaseRequestQuotation, cls).__setup__()
- cls._error_messages.update({
- 'previous_quotation': ('You already made a quotation with '
- 'one of the selected requests: "%(requests)s".'),
- })
- def default_ask_suppliers(self, fields):
- pool = Pool()
- values = {}
- request_quotation_state = []
- Request = pool.get('purchase.request')
- request_ids = Transaction().context['active_ids']
- requests = Request.search([
- ('id', 'in', request_ids),
- ('state', 'in', ['draft', 'quotation']),
- ])
- self.raise_user_warning('previous_quotation', {
- 'requests': ', '.join(r.rec_name
- for r in requests),
- })
- values['requests'] = requests
- for request in requests:
- if request.state == 'quotation':
- request_quotation_state.append(request)
- if request.party:
- values['suppliers'].append(request.party)
- if request_quotation_state:
- self.raise_user_warning('previous_quotation', {
- 'requests': ', '.join(r.rec_name
- for r in request_quotation_state),
- })
- return values
- def transition_start(self):
- pool = Pool()
- Request = pool.get('purchase.request')
- Quotation = pool.get('purchase.request.quotation')
- new_quotations = []
- request_ids = Transaction().context['active_ids']
- requests = Request.search([
- ('id', 'in', request_ids),
- ('state', 'in', ['draft', 'quotation']),
- ])
- for request in requests:
- new_quotations.append({
- 'company': request.company,
- 'origin': request,
- 'description': request.description,
- 'quantity': request.quantity,
- 'unit': request.uom,
- 'currency': request.currency,
- 'supply_date': (
- request.supply_date or datetime.date.max),
- })
- suppliers = []
- for supplier in getattr(self.ask_suppliers, 'suppliers', []):
- suppliers.append({
- 'supplier': supplier,
- })
- if suppliers:
- quotation_lines = []
- for (nq, s) in product(new_quotations, suppliers):
- merged = {}
- merged.update(nq)
- merged.update(s)
- quotation_lines.append(merged)
- Quotation.save(quotation_lines)
- quotations = sorted(quotation_lines,
- key=self._group_purchase_request_quotation_key)
- for key, grouped_quotations in groupby(quotations,
- key=self._group_purchase_request_quotation_key):
- group = self._new_group(dict(key))
- group.save()
- Quotation.write(grouped_quotations, {'group': group.id})
- return 'end'
- def _group_purchase_request_quotation_key(self, quotation):
- return (
- ('company', quotation.company),
- ('supplier', quotation.supplier),
- )
- def _new_group(self, values):
- pool = Pool()
- Group = pool.get('purchase.request.quotation.group')
- return Group(**values)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement