Provisionen

Column Selection
Design Improvemente
This commit is contained in:
jopster
2024-08-23 15:14:23 +02:00
parent 789df92466
commit 3a396eceb5
126 changed files with 37833 additions and 866 deletions
Regular → Executable
+207 -21
View File
@@ -64,7 +64,7 @@ class dsscontracts(models.Model):
_name = "dss.contracts"
_description = "DigitalSignage Vertraege"
_rec_name = "contract_auto_name"
_inherit = ['mail.thread','mail.activity.mixin']
_inherit = ['mail.thread','mail.activity.mixin','dss.triggermodel']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
cruuid = fields.Char(related='uuid')
contract_id = fields.Char("Kundennummer",store=True,tracking=True)
@@ -74,6 +74,18 @@ class dsscontracts(models.Model):
contract_state_order = fields.Integer(related='contract_state.order',store=True)
contract_auto_id = fields.Char("Kundennummer",tracking=True,help="Wird berechnet aus Projektnummer + Kunden ID")
contract_auto_name = fields.Char('Vertragskennug',tracking=True,help="Wird berechnet aus Kundennummer + Vertragskennung")
contract_payment_done = fields.Boolean('Zahlungeingang erfolgt',tracking=True)
contract_payment_done_date = fields.Date('Zahlungeingang Datum',tracking=True)
remark = fields.Html('Bemerkung',tracking=True)
contract_writer = fields.Many2one('res.partner', tracking=True)
vertragssumme = fields.Float('Vertragssumme :', tracking=True)
provisionstyp = fields.Many2one('dss.provisionstypen', tracking=True)
provisionsteilcalc = fields.Float('Berechnete Provision :',computed='_compute_prov')
provisions = fields.Many2many('dss.provision',tracking=True)
provisionspayedpercent = fields.Float('Ausgezahlte Provision % :',computed='_compute_provisionspayedpercent')
grafiker = fields.Many2one('res.partner', placeholder="wenn vom Projekt abweichend", domain="['&',('dssinternpartner','=',True),('dssinternpartner_grafik','=',True)]", tracking=True, string="abw. Grafiker",help="Grafiker nur wenn abweichend vom Projektgrafiker")
contract_remark = fields.Html('Vertragshinweise',tracking=True)
@@ -81,6 +93,8 @@ class dsscontracts(models.Model):
project_id = fields.Integer(related='project.projectid', string='Project ID')
projectIid = fields.Integer('Project IID',tracking=True)
project_ad_structure = fields.Many2one(related='project.grundsystem_default_adstructure', string='Aufbau')
project_grundsystem_typ = fields.Char(related='project.grundsystem_typ', tracking=True)
project_grafiker = fields.Many2one(related="project.project_grafiker",tracking=True)
client = fields.Many2one('res.partner',string="Kunde (wenn angelegt)",domain="['&',('dsspartner','=',True),('dsspartner_werbung','=',True)]",tracking=True,help="Nur zu Benutzen wenn Kunden als Kontakt angelegt wurde")
client_id = fields.Char(string="KundenID (2Stellen)",help="Nur der 2 stellige letzte Teil der Kundennummer",tracking=True)
@@ -133,6 +147,8 @@ class dsscontracts(models.Model):
contract_date = fields.Date('Vertragsdatum',tracking=True)
start_date = fields.Date('Start/Auslief.datum',tracking=True)
contract_cancel_mon = fields.Integer('Kündigungsfrist Monaten',tracking=True)
contract_cancel_date = fields.Date('Kündigungsfrist Errechnet', tracking=True)
contract_auto_extend = fields.Boolean('autom. V.Verlängerung',tracking=True)
contract_auto_extend_time = fields.Char('Verl. Monate',tracking=True)
@@ -159,13 +175,12 @@ class dsscontracts(models.Model):
ads_last_work_state = fields.Many2one(related='ads_last_ad.work_state', string="Arbeitschritt letzt Kamp",help="Arbeitsstatus des letzten Werbekampagnen Eintrags",store=True,readonly=False,group_expand='_expand_ads_last_work_state')
ads_last_work_state_color = fields.Char(related='ads_last_ad.work_state_color')
ads_last_work_state_text = fields.Char(related='ads_last_ad.work_state_text',store=True,readonly=False)
ads_last_work_state_info = fields.Char(related='ads_last_ad.work_state_info')
ads_last_work_state_info = fields.Char(related='ads_last_ad.work_state_info',store=True,readonly=False)
ads_last_todo_state = fields.Many2one(related='ads_last_ad.todo_state',string="Aufgabe letzt Kamp", help="Aufgabenstatus des letzten Werbekampagnen Eintrags",store=True,readonly=False,group_expand='_expand_ads_last_todo_state')
ads_last_todo_state_until = fields.Date(related='ads_last_ad.todo_state_until')
ads_last_todo_state_color = fields.Char(related='ads_last_ad.todo_state_color')
ads_last_todo_state_text = fields.Char(related='ads_last_ad.todo_state_text',store=True,readonly=False)
vnnox_zugang_erstellt = fields.Boolean('Vnnox Zugang ?',tracking=True)
vnnox_zugang_username = fields.Char('Vnnox Username',tracking=True)
vnnox_zugang_password = fields.Char('Vnnox Passwort',tracking=True)
@@ -174,7 +189,7 @@ class dsscontracts(models.Model):
xibo_zugang_erstellt = fields.Boolean('Xibo Zugang ?',tracking=True)
xibo_zugang_username = fields.Char('Xibo Username',tracking=True)
xibo_zugang_password = fields.Char('Xibo Passwort',tracking=True)
vnnox_zugang_gesendet = fields.Boolean('Xibo Zugang gesendet?',tracking=True)
xibo_zugang_gesendet = fields.Boolean('Xibo Zugang gesendet?',tracking=True)
lmw_zugang_erstellt = fields.Boolean('LMW Zugang ?',tracking=True)
lmw_zugang_username = fields.Char('LMW Username',tracking=True)
@@ -204,6 +219,34 @@ class dsscontracts(models.Model):
cloudlink = fields.Char('Cloud Verzeichnis',help='Verzeichnis für den Kunde innerhalb des Projekt Ordners')
@api.depends('vertragssumme')
def _compute_prov(self):
_logger.info('contract Provision Berechnung : C_' + str(self.id));
if self.provisionstyp.provisionbase == 'VSUM':
if not self.provisionstyp.provisioncalc:
prozent=self.provisionstyp.provisionprozent
basis=self.vertragssumme
value = (basis/100)*prozent
self.provisionsteilcalc = value
def _compute_provisionspayedpercent(self):
addval = 0
for prov in self.provisions:
_logger.info('contract Provision Payed_part : C_' + str(self.id)+' / '+str(prov.provisionprozent));
addval = addval + prov.provisionprozent
_logger.info('Contract Provision payed : C_' + str(self.id)+' V '+str(addval));
self.provisionspayedpercent = addval
@api.onchange('provisionstyp')
def _onchange_provtype(self):
self._compute_prov()
self._compute_provisionspayedpercent()
@api.onchange('vertragssumme')
def _onchange_vsumme(self):
self._compute_prov()
self._compute_provisionspayedpercent()
@api.model
def _expand_ads_last_work_state(self,states,domain,order):
if dss_settings.dssSettings._get_settingvalue(self,'show_expand_contract_group_ad_work_state'):
@@ -248,12 +291,8 @@ class dsscontracts(models.Model):
if resstr is None :
resstr = 'nicht ermittelbar'
_logger.info('Contract_client_id_change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name));
if not self.contract_auto_name:
self.contract_auto_name = resstr
if not self.contract_auto_id:
self.contract_auto_id = cidstr
if self.contract_auto_id == "":
self.contract_auto_id = cidstr
self.contract_auto_name = resstr
self.contract_auto_id = cidstr
@api.onchange('project_id')
def _onchange_project_id(self):
@@ -263,16 +302,12 @@ class dsscontracts(models.Model):
else:
cname = record.contract_name
resstr = "%s%s %s" % (record.project_id,record.client_id,cname)
cidstr = "%s%s" % (record.project_id,record.client_id)
cidstr: String = "%s%s" % (record.project_id,record.client_id)
if resstr is None :
resstr = 'nicht ermittelbar'
_logger.info('project_id_change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name));
if not self.contract_auto_name:
self.contract_auto_name = resstr
if not self.contract_auto_id:
self.contract_auto_id = cidstr
if self.contract_auto_id == "":
self.contract_auto_id = cidstr
self.contract_auto_name = resstr
self.contract_auto_id = cidstr
@api.onchange('contract_name')
def _onchange_contract_name(self):
@@ -319,6 +354,66 @@ class dsscontracts(models.Model):
# contract=super().create(vals)
# return contract
def action_info_click_ls(self):
view=self.env.ref("DigitalSignage.dss_contracts_infofeld_form")
return {
'type': 'ir.actions.act_window',
'view_mode': 'form' ,
'view_id': view.id,
'res_model': 'dss.contracts' ,
'target': 'new' ,
'display_name' : 'Text ändern',
'views':[(view.id,'form')],
'res_id': self.id ,
}
def action_state_click_ls(self):
view=self.env.ref("DigitalSignage.dss_contracts_viewstate_ls_form")
return {
'type': 'ir.actions.act_window',
'view_mode': 'form' ,
'view_id': view.id,
'res_model': 'dss.contracts' ,
'target': 'new' ,
'display_name' : 'Status ändern',
'views':[(view.id,'form')],
'res_id': self.id ,
}
def action_state_click_lws(self):
view=self.env.ref("DigitalSignage.dss_contracts_viewstate_lws_form")
return {
'type': 'ir.actions.act_window',
'view_mode': 'form' ,
'view_id': view.id,
'res_model': 'dss.contracts' ,
'target': 'new' ,
'display_name' : 'Status ändern',
'views':[(view.id,'form')],
'res_id': self.id ,
}
def action_state_click_lds(self):
view=self.env.ref("DigitalSignage.dss_contracts_viewstate_lds_form")
return {
'type': 'ir.actions.act_window',
'view_mode': 'form' ,
'view_id': view.id,
'res_model': 'dss.contracts' ,
'target': 'new' ,
'display_name' : 'Status ändern',
'views':[(view.id,'form')],
'res_id': self.id ,
}
# return {
#'effect':{
# 'fadeout':'slow',
# 'message':'Status Geklickt',
# 'type':'rainbow_man',
# }
# }
''
@api.model
def _default_uuid(self):
@@ -387,7 +482,7 @@ class dsscontracts(models.Model):
return ""
def pyaction_dss_contract_addcalendar_rf_runtime(self):
self.runtime_calendar_event.unlink()
self.env['calendar.event'].search([('id', '=', self.runtime_calendar_event)]).unlink()
event = {
'start': self.runtime_finish.strftime('%Y-%m-%d %H:%M:%S'),
'stop': self.runtime_finish.strftime('%Y-%m-%d %H:%M:%S'),
@@ -416,9 +511,9 @@ class dsscontracts(models.Model):
else:
addyears = 0
addmonths = bmonths - (addyears*12)
enddatum = startdatum + relativedelta(months=addmonths,years=addyears)
enddatum = startdatum + relativedelta(months=addmonths,years=addyears,days=-1)
elif self.runtimesystem == "T":
enddatum = startdatum + relativedelta(days=self.runtime_t)
enddatum = startdatum + relativedelta(days=self.runtime_t-1)
enddatum = enddatum + relativedelta(days=self.runtime_t)
elif self.runtimesystem == "E":
enddatum = startdatum
@@ -433,6 +528,67 @@ class dsscontracts(models.Model):
self.runtime_finish = enddatum
if not self.contract_cancel_mon:
cancelmonths = 0
else:
cancelmonths = self.contract_cancel_mon
self.contract_cancel_date = enddatum - relativedelta(months=cancelmonths)
def pyaction_dss_contract_calc_runtime_end(self):
if self.start_date:
startdatum= self.start_date
else:
startdatum= self.contract_date
if startdatum :
if self.runtimesystem == "M":
bmonths = 0
bmonths = self.runtime_m+self.runtime_bonus_m
if bmonths > 12:
addyears=bmonths//12
else:
addyears = 0
addmonths = bmonths - (addyears*12)
enddatum = startdatum + relativedelta(months=addmonths,years=addyears,days=-1)
elif self.runtimesystem == "T":
enddatum = startdatum + relativedelta(days=self.runtime_t-1)
enddatum = enddatum + relativedelta(days=self.runtime_t)
elif self.runtimesystem == "E":
enddatum = startdatum
if self.runtime_events:
mydate = startdatum
for event in self.runtime_events:
if mydate.strftime('%Y-%m-%d') < event.eventenddate.strftime('%Y-%m-%d'):
mydate = event.eventenddate
enddatum = mydate
elif self.runtimesystem == "S":
enddatum = self.runtime_finish
if not self.contract_cancel_mon:
cancelmonths = 0
else:
cancelmonths = self.contract_cancel_mon
self.contract_cancel_date = enddatum - relativedelta(months=cancelmonths)
def pyopen_provadd_form_view(self):
_logger.info('Open Add Provision')
view=self.env.ref("DigitalSignage.dss_provision_add_form")
self._compute_prov()
provision=self.env['dss.provision'].create({'contract':self.id,'provisiongesamt':self.provisionsteilcalc,'paydate':date.today()})
_logger.info('Open Add Provision '+str(view)+' P_'+str(provision))
# self.provisions=[(4,[provision.id])]
return {
'type': 'ir.actions.act_window',
'view_mode': 'form' ,
'view_type': 'form' ,
'view_id': view.id,
'res_model': 'dss.provision' ,
'target': 'new' ,
'display_name' : 'Neu Provision einfügen',
'views':[(view.id,'form')],
'res_id':provision.id,
}
def tokampagne(self):
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+' - prüfe Letzte Aktuelle Kampagne')
@@ -458,7 +614,7 @@ class dsscontracts(models.Model):
resstr = 'nicht ermittelbar'
_logger.debug(resstr)
self.contract_auto_name = resstr
_logger.info('Click auf Werbekampagne : C_' + str(self.id) + 'A_' + str(ds.id) + ' - Contract_autoname gesetzt '+ str(resstr)+'/'+str(cidstr))
_logger.info('Click auf Werbekampagne : C_' + str(self.id) + 'A_' + str(ds.id) + ' - Contract_autoname gesetzt '+ str(resstr))
# prüfen ob LetzteKampagne medien hat
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(ds.id)+' - Suche evtl Medien der Kampagne ')
medias = self.env['dss.mediarelations'].search(['&',('contract','=',self.id),('ad','=',ds.id)])
@@ -696,3 +852,33 @@ class dsscontracts(models.Model):
for record in self:
self.tokampagne()
def trigger_action_init(self):
_logger.info('Contract Cron Running - Start '+str(self)+' start searching')
jobcontracts = self.env['dss.contracts'].search([('run_trigger', '=', True)])
_logger.info('Contract Cron Running - Start '+str(self)+' Found '+str(len(jobcontracts))+' Trigger')
for record in jobcontracts:
if not record:
_logger.info('Contract Cron Running No Contracts Delivered - searching')
else:
_logger.info('Contract Cron Running C_' + str(record.id) + ' Check Trigger')
if record.run_trigger:
_logger.info('Contract Cron Running C_' + str(record.id) + ' Prüfe Triggergruppe TG_' + str(record.triggergroup.id))
triggergroup = record.triggergroup
if not triggergroup:
_logger.info('Contract Cron Running C_' + str(record.id) + ' Triggergruppe TG_' + str(record.triggergroup.id)+' not found')
pass
else:
for trigger in triggergroup.triggers:
if not trigger:
pass
else:
_logger.info('Contract Cron Running C_' + str(record) + ' in Triggergruppe TG_' + str(record.triggergroup)+' Prüfe Trigger T_'+str(trigger))
if trigger._check_trigger():
_logger.info('Contract Cron Trigger T_' + str(trigger)+' executed ')
_logger.info('Contract Cron Running - Finished')