11
11
class dm_campaign_group(osv.osv):
12
12
_name = "dm.campaign.group"
14
def po_generate(self,cr, uid, ids, *args):
15
plines = self.browse(cr, uid ,ids)
17
raise osv.except_osv('Warning', "There's no purchase lines defined for this campaign")
19
if pline.state == 'pending':
20
if not pline.product_id.seller_ids:
21
raise osv.except_osv('Warning', "There's no supplier defined for this product : %s" % (pline.product_id.name,) )
23
# Create a po / supplier
24
for supplier in pline.product_id.seller_ids:
25
partner_id = supplier.id
26
partner = supplier.name
28
address_id = self.pool.get('res.partner').address_get(cr, uid, [partner.id], ['default'])['default']
30
raise osv.except_osv('Warning', "There's no delivery address defined for this partner : %s" % (partner.name,) )
31
pricelist_id = partner.property_product_pricelist_purchase.id
33
raise osv.except_osv('Warning', "There's no purchase pricelist defined for this partner : %s" % (partner.name,) )
34
price = self.pool.get('product.pricelist').price_get(cr, uid, [pricelist_id], pline.product_id.id, pline.quantity, False, {'uom': pline.uom_id.id})[pricelist_id]
35
print "pline.date_planned : ",pline.date_planned
36
newdate = DateTime.strptime(pline.date_planned, '%Y-%m-%d %H:%M:%S') - DateTime.RelativeDateTime(days=pline.product_id.product_tmpl_id.seller_delay or 0.0)
37
print "newdate :",newdate.strftime('%Y-%m-%d %H:%M:%S')
39
if not pline.campaign_id.offer_id:
40
raise osv.except_osv('Warning', "There's no offer defined for this campaign : %s" % (pline.campaign_id.name,) )
41
if not pline.campaign_id.proposition_ids:
42
raise osv.except_osv('Warning', "There's no proposition defined for this campaign : %s" % (pline.campaign_id.name,) )
46
if pline.type == 'manufacturing':
47
for step in pline.campaign_id.offer_id.step_ids:
48
for const in step.manufacturing_constraint_ids:
49
if pline.campaign_id.country_id in const.country_ids or not const.country_ids:
50
constraints.append("---------------------------------------------------------------------------")
51
constraints.append(const.name)
52
constraints.append(const.constraint)
53
elif pline.type == 'items':
54
raise osv.except_osv('Warning', "Purchase of items is not yet implemented")
55
for step in pline.campaign_id.offer_id.step_ids:
56
for item in step.product_ids:
57
constraints.append("---------------------------------------------------------------------------")
58
constraints.append(item.product_id.name)
59
constraints.append(item.purchase_constraints)
60
elif pline.type == 'customer_file':
61
raise osv.except_osv('Warning', "Purchase of customers files is not yet implemented")
62
elif pline.type == 'translation':
63
if not pline.campaign_id.lang_id:
64
raise osv.except_osv('Warning', "There's no language defined for this campaign : %s" % (pline.campaign_id.name,) )
66
constraints.append(pline.notes)
68
constraints.append(' ')
69
elif pline.type == False:
71
constraints.append(pline.notes)
73
constraints.append(' ')
76
purchase_id = self.pool.get('purchase.order').create(cr, uid, {
77
'origin': pline.campaign_id.name,
78
'partner_id': partner.id,
79
'partner_address_id': address_id,
81
'pricelist_id': pricelist_id,
82
'notes': "\n".join(constraints),
83
'dm_campaign_purchase_line': pline.id
86
''' If Translation Order => Get Number of documents in Offer '''
87
if pline.type == 'translation':
88
if pline.quantity == 0:
89
raise osv.except_osv('Warning',
90
"There's no documents for this offer: %s" % (pline.campaign_id.offer_id.name,) )
91
line = self.pool.get('purchase.order.line').create(cr, uid, {
92
'order_id': purchase_id,
93
'name': pline.campaign_id.name,
94
'product_qty': pline.quantity,
95
'product_id': pline.product_id.id,
96
'product_uom': pline.uom_id.id,
98
'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
99
'taxes_id': [(6, 0, [x.id for x in pline.product_id.product_tmpl_id.supplier_taxes_id])],
100
'account_analytic_id': pline.campaign_id.analytic_account_id,
103
''' Create po lines for each proposition'''
105
for propo in pline.campaign_id.proposition_ids:
107
if pline.type == 'customer_file' or pline.type == 'manufacturing' or pline.type == 'items':
108
if not propo.segment_ids:
109
raise osv.except_osv('Warning',
110
"There's no segment defined for this commercial proposition: %s" % (propo.name,) )
111
for segment in propo.segment_ids:
112
if segment.quantity_ordered:
113
if segment.quantity_ordered != 'AAA':
114
quantity += int(segment.quantity_ordered)
119
elif pline.type == 'manufacturing' or pline.type == 'items':
120
if not propo.segment_ids:
121
raise osv.except_osv('Warning',
122
"There's no segment defined for this commercial proposition: %s" % (propo.name,) )
123
for segment in propo.segment_ids:
124
if not segment.quantity_real:
125
raise osv.except_osv('Warning',
126
"There's no Ordered Quantity defined for the segment %s in proposition %s" % (segment.name,propo.name,) )
127
quantity += int(segment.quantity_real)
129
print "DEBUG - Segment Quantity : ",quantity
131
line = self.pool.get('purchase.order.line').create(cr, uid, {
132
'order_id': purchase_id,
134
'product_qty': quantity,
135
'product_id': pline.product_id.id,
136
'product_uom': pline.uom_id.id,
138
'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
139
'taxes_id': [(6, 0, [x.id for x in pline.product_id.product_tmpl_id.supplier_taxes_id])],
140
'account_analytic_id': propo.analytic_account_id.id,
141
# 'move_dest_id': res_id,
143
# self.write(cr, uid, [pline.id], {'state':'requested'})
146
# Set campaign supervision states
147
if pline.type == 'translation':
148
pline.campaign_id.write({'translation_state':'inprogress'})
149
elif pline.type == 'manufacturing':
150
pline.campaign_id.write({'manufacturing_state':'inprogress'})
151
elif pline.type == 'items':
152
pline.campaign_id.write({'items_state':'inprogress'})
153
elif pline.type == 'customer_file':
154
pline.campaign_id.write({'customer_file_state':'inprogress'})
14
159
'name': fields.char('Campaign group name', size=64, required=True),
160
'code': fields.char('Code', size=64, required=True),
15
161
'project_id' : fields.many2one('project.project', 'Project', readonly=True),
16
162
'campaign_ids': fields.one2many('dm.campaign', 'campaign_group_id', 'Campaigns', domain=[('campaign_group_id','=',False)]),
39
overlay = self.browse(cr,uid,[id])[0]
40
trademark_code = overlay.trademark_id.name or ''
185
overlay = self.browse(cr,uid,id)
186
trademark_code = overlay.trademark_id.code or ''
41
187
dealer_code = overlay.dealer_id.ref or ''
42
country_code = overlay.country_id.code or ''
44
code1='-'.join([trademark_code, dealer_code, country_code])
188
code1='-'.join([trademark_code, dealer_code])
49
'code' : fields.function(_overlay_code,string='Code',type="char",method=True,readonly=True),
193
'code' : fields.function(_overlay_code,string='Code',type='char',method=True,readonly=True),
50
194
'trademark_id' : fields.many2one('dm.trademark', 'Trademark', required=True),
51
195
'dealer_id' : fields.many2one('res.partner', 'Dealer',domain=[('category_id','ilike','Dealer')], context={'category':'Dealer'}, required=True),
52
'country_id' : fields.many2one('res.country', 'Country', required=True),
196
'country_ids' : fields.many2many('res.country', 'overlay_country_rel', 'overlay_id', 'country_id', 'Country', required=True),
53
197
'bank_account_id' : fields.many2one('account.account', 'Account'),
209
357
""" In campaign, if no trademark is given, it gets the 'recommended trademark' from offer """
210
358
if not camp.trademark_id:
211
359
super(osv.osv, self).write(cr, uid, camp.id, {'trademark_id':offers.recommended_trademark.id})
213
361
# check if an overlay exists else create it
214
overlay = self.pool.get('dm.overlay').search(cr, uid, [('trademark_id','=',camp.trademark_id.id), ('dealer_id','=',camp.dealer_id.id), ('country_id','=',camp.country_id.id)])
216
super(osv.osv, self).write(cr, uid, camp.id, {'overlay_id':overlay[0]}, context)
362
overlay_country_ids=[]
363
camp1 = self.browse(cr, uid, camp.id)
364
if camp1.trademark_id and camp1.dealer_id and camp1.country_id:
365
overlay = self.pool.get('dm.overlay').search(cr, uid, [('trademark_id','=',camp1.trademark_id.id), ('dealer_id','=',camp1.dealer_id.id)])
368
browse_overlay = self.pool.get('dm.overlay').browse(cr, uid, o_id)
369
overlay_country_ids = [country_ids.id for country_ids in browse_overlay.country_ids]
371
if overlay and (camp1.country_id.id in overlay_country_ids):
372
super(osv.osv, self).write(cr, uid, camp1.id, {'overlay_id':overlay[0]}, context)
373
elif overlay and not (camp1.country_id.id in overlay_country_ids):
374
overlay_country_ids.append(camp1.country_id.id)
375
self.pool.get('dm.overlay').write(cr, uid, browse_overlay.id, {'country_ids':[[6,0,overlay_country_ids]]}, context)
376
super(osv.osv, self).write(cr, uid, camp1.id, {'overlay_id':overlay[0]}, context)
378
overlay_country_ids.append(camp1.country_id.id)
379
overlay_ids1 = self.pool.get('dm.overlay').create(cr, uid, {'trademark_id':camp1.trademark_id.id, 'dealer_id':camp1.dealer_id.id, 'country_ids':[[6,0,overlay_country_ids]]}, context)
380
super(osv.osv, self).write(cr, uid, camp1.id, {'overlay_id':overlay_ids1}, context)
218
overlay_ids1 = self.pool.get('dm.overlay').create(cr, uid, {'trademark_id':camp.trademark_id.id, 'dealer_id':camp.dealer_id.id, 'country_id':camp.country_id.id}, context)
219
super(osv.osv, self).write(cr, uid, camp.id, {'overlay_id':overlay_ids1}, context)
382
super(osv.osv, self).write(cr, uid, camp1.id, {'overlay_id':0}, context)
223
386
def create(self,cr,uid,vals,context={}):
252
415
# check if an overlay exists else create it
253
416
data_cam1 = self.browse(cr, uid, id_camp)
254
overlay = self.pool.get('dm.overlay').search(cr, uid, [('trademark_id','=',data_cam1.trademark_id.id), ('dealer_id','=',data_cam1.dealer_id.id), ('country_id','=',data_cam1.country_id.id)])
256
super(osv.osv, self).write(cr, uid, data_cam1.id, {'overlay_id':overlay[0]}, context)
258
overlay_ids1 = self.pool.get('dm.overlay').create(cr, uid, {'trademark_id':data_cam1.trademark_id.id, 'dealer_id':data_cam1.dealer_id.id, 'country_id':data_cam1.country_id.id}, context)
259
super(osv.osv, self).write(cr, uid, data_cam1.id, {'overlay_id':overlay_ids1}, context)
417
overlay_country_ids = []
418
if data_cam1.trademark_id and data_cam1.dealer_id and data_cam1.country_id:
419
overlay = self.pool.get('dm.overlay').search(cr, uid, [('trademark_id','=',data_cam1.trademark_id.id), ('dealer_id','=',data_cam1.dealer_id.id)])
421
browse_overlay = self.pool.get('dm.overlay').browse(cr, uid, o_id)
422
overlay_country_ids = [country_ids.id for country_ids in browse_overlay.country_ids]
423
if overlay and (data_cam1.country_id.id in overlay_country_ids):
424
super(osv.osv, self).write(cr, uid, data_cam1.id, {'overlay_id':overlay[0]}, context)
425
elif overlay and not (data_cam1.country_id.id in overlay_country_ids):
426
overlay_country_ids.append(data_cam1.country_id.id)
427
self.pool.get('dm.overlay').write(cr, uid, browse_overlay.id, {'country_ids':[[6,0,overlay_country_ids]]}, context)
428
super(osv.osv, self).write(cr, uid, data_cam1.id, {'overlay_id':overlay[0]}, context)
430
overlay_country_ids.append(data_cam1.country_id.id)
431
overlay_ids1 = self.pool.get('dm.overlay').create(cr, uid, {'trademark_id':data_cam1.trademark_id.id, 'dealer_id':data_cam1.dealer_id.id, 'country_ids':[[6,0,overlay_country_ids]]}, context)
432
super(osv.osv, self).write(cr, uid, data_cam1.id, {'overlay_id':overlay_ids1}, context)
722
898
return newdate.strftime('%Y-%m-%d %H:%M:%S')
902
def _state_get(self, cr, uid, ids, name, args, context={}):
904
for pline in self.browse(cr, uid, ids):
905
print "DEBUG - pline : ", pline
908
if pline.purchase_order_ids:
909
print "DEBUG - po found"
910
for po in pline.purchase_order_ids:
914
result[pline.id]='delivered'
916
# self.write(cr, uid, [pline.id],{'date_delivery':time.strftime('%Y-%m-%d %H:%M:%S')})
917
if pline.type == 'translation':
918
trans_id = self.pool.get('dm.offer.translation').create(cr, uid,
919
{'offer_id': pline.campaign_id.offer_id.id,
920
'date': pline.date_delivery,
921
'language_id': pline.campaign_id.lang_id.id,
922
'translator_id': po.partner_id.id,
923
'notes': pline.notes,
928
if po.state == 'confirmed' or po.state == 'approved':
929
result[pline.id]='ordered'
931
if po.state == 'draft':
932
result[pline.id]='requested'
934
result[pline.id] = 'pending'
935
print "DEBUG - Result : ",result[pline.id]
726
939
'campaign_id': fields.many2one('dm.campaign', 'Campaign'),
727
940
'product_id' : fields.many2one('product.product', 'Product', required=True, context={'flag':True}),