Allow modification of assembly_state for authorized group only (dp_custom.group_allow_change_pg_status = "Ändern des PG-Status erlauben")

Fix resequence of sale.order.line (create)
develop
Andreas Osim 2019-11-29 12:15:21 +01:00
parent 80e6350b8b
commit 6c11e12fc5
3 changed files with 16 additions and 96 deletions

View File

@ -391,101 +391,6 @@ class SaleOrder(models.Model):
order_id.action_confirm()
return {'id': order_id.id, 'name': order_id.name}
@api.model
def pg_create_quotation___1(self, vals):
"""
SST-3
:param vals:
:return:
"""
# print('1')
if not vals.get('portal_id', False):
raise ValidationError(
_("Der Kunde mit der Portal-ID \'%s\' kann nicht zugeordnet werden") % vals['portal_id'])
partner = self.env['res.partner'].search([('portal_id', '=', vals['portal_id'])])
if not partner.parent_id:
raise ValidationError(
_('Zu dem Kontakt mit der portal-ID %s existiert kein Unternehmen') % vals['portal_id'])
partner = partner.parent_id
vals['partner_id'] = partner.id
# print('2')
if not partner:
raise ValidationError(
_("Der Kunde mit der Portal-ID \'%s\' kann nicht zugeordnet werden") % vals['portal_id'])
del vals['portal_id']
delivery_partner = self.env['res.partner']
delivery_vals = {}
# print('3')
if vals.get('portal_delivery_id', False):
delivery_partner = self.env['res.partner'].search([('portal_id', '=', vals['portal_delivery_id'])])
delivery_vals['portal_id'] = vals['portal_delivery_id']
del vals['portal_delivery_id']
for key in list(vals.keys()):
if key.startswith('delivery_'):
delivery_vals[key.replace('delivery_', '')] = vals[key]
del vals[key]
# print('4')
delivery_partner.with_context(delivery_partner=True).check_not_specified_fields(delivery_vals)
delivery_vals = delivery_partner.correct_values(delivery_vals)
delivery_vals['parent_id'] = partner.id
if delivery_partner:
# print('4a')
allowed_update_keys = ['firstname', 'lastname', 'midname', 'email', 'phone']
for key in list(delivery_vals.keys()):
if key not in allowed_update_keys:
del delivery_vals[key]
# print('4a1')
delivery_partner.write(delivery_vals)
# print('4a2')
else:
# print('4b')
if not delivery_vals.get('type', False):
delivery_vals['type'] = 'delivery'
delivery_vals['property_delivery_carrier_id'] = partner.property_delivery_carrier_id.id
delivery_partner = delivery_partner.create(delivery_vals)
# print('5')
attachment_vals = vals.pop('attachment_ids', False)
order_line_vals = vals.get('order_lines', False)
# if 'attachment_ids' in vals: del vals['attachment_ids']
del vals['order_lines']
# print('6')
self.check_not_specified_fields(vals)
vals = self.correct_values(vals)
payment_term = partner.property_payment_term_id
if partner.retail_partner_id:
payment_term = partner.retail_partner_id.property_payment_term_id
addr = partner.address_get(['delivery', 'invoice'])
# print('7')
vals['partner_invoice_id'] = vals.setdefault('partner_invoice_id', addr['invoice'])
partner_invoice_id = self.env['res.partner'].browse([vals['partner_invoice_id']])
fiscal_position_id = False
# print('8')
if partner_invoice_id:
if partner_invoice_id.property_account_position_id:
fiscal_position_id = partner_invoice_id.property_account_position_id.id
vals.update({
'partner_id': partner.id,
'partner_invoice_id': partner_invoice_id.id,
'fiscal_position_id': fiscal_position_id,
'user_id': partner.user_id.id,
'payment_term_id': payment_term.id,
'partner_shipping_id': delivery_partner.id,
'incoterm': partner.sale_incoterm_id.id,
'carrier_id': delivery_partner.property_delivery_carrier_id.id
})
# print('9')
order_id = self.create(vals)
if attachment_vals:
order_id.pg_create_sale_order_attachments(attachment_vals)
if order_line_vals:
order_id.pg_create_order_lines(order_line_vals)
if vals.get('confirm_order'):
order_id.action_confirm()
return {'id': order_id.id, 'name': order_id.name}
@api.multi
def pg_create_sale_order_attachments(self, values):
self.ensure_one()
@ -567,6 +472,16 @@ class SaleOrder(models.Model):
'fiscal_position_id', 'user_id', 'payment_term_id', 'partner_delivery_id', 'partner_invoice_id',
'assembly_state', 'confirmation_nr', 'confirm_order', 'order_type', 'internal_notes', 'from_designbox', 'discount', 'hide_discount', 'desired_delivery_date', 'sequence']
@api.model
def create(self,vals):
order = super(SaleOrder, self).create(vals)
current_sequence = 0
for order_line in order.order_line:
current_sequence += 1
order_line.update({'sequence': current_sequence,})
return order
@api.multi
def write(self, vals):
res = super(SaleOrder, self).write(vals)

View File

@ -12,4 +12,8 @@
<field name="name">Informieren bei neuem Portalkunden</field>
<field name="comment">Informieren bei neuem Portalkunden</field>
</record>
<record id="group_allow_change_pg_status" model="res.groups">
<field name="name">Ändern des PG-Status erlauben</field>
<field name="comment">Ändern des PG-Status erlauben</field>
</record>
</odoo>

View File

@ -36,7 +36,8 @@
<field name="origin"/>
<field name="confirmation_nr"/>
<field name="order_type"/>
<field name="assembly_state"/>
<field name="assembly_state" groups="dp_custom.group_allow_change_pg_status"/>
<field name="assembly_state" attrs="{'readonly': True}" groups="!dp_custom.group_allow_change_pg_status"/>
<!--
<field name="pg9_call" widget="url" text="...gehe zu Auftrag in PG9"
attrs="{'invisible': [('order_type','not in',['T','D']),('assembly_state','in',['','created','failed'])]}"/>