def propagate_contact_details(self, ar=None): ContactDetailTypes = rt.models.phones.ContactDetailTypes watcher = ChangeWatcher(self) for cdt in ContactDetailTypes.get_list_items(): self.propagate_contact_detail(cdt) if ar is not None: watcher.send_update(ar)
def after_ui_save(self, ar, cw): super(Account, self).after_ui_save(ar, cw) if self.primary: mi = self.partner for o in mi.sepa_accounts.exclude(id=self.id): if o.primary: o.primary = False o.save() ar.set_response(refresh_all=True) watcher = ChangeWatcher(mi) for k in PRIMARY_FIELDS: setattr(mi, k, getattr(self, k)) mi.save() watcher.send_update(ar)
def after_ui_save(self, ar, cw): super(Account, self).after_ui_save(ar, cw) if self.primary: mi = self.partner for o in mi.sepa_accounts.exclude(id=self.id): if o.primary: o.primary = False o.save() ar.set_response(refresh_all=True) watcher = ChangeWatcher(mi) for k in PRIMARY_FIELDS: setattr(mi, k, getattr(self, k)) mi.save() watcher.send_update(ar.request)
def set_workflow_state(row, ar, state_field, target_state): """Called by workflow actions (:class:`ChangeStateAction <lino.core.workflows.ChangeStateAction>`) to perform the actual state change. """ watcher = ChangeWatcher(row) old = getattr(row, state_field.attname) target_state.choicelist.before_state_change(row, ar, old, target_state) row.before_state_change(ar, old, target_state) setattr(row, state_field.attname, target_state) row.save() target_state.choicelist.after_state_change(row, ar, old, target_state) row.after_state_change(ar, old, target_state) watcher.send_update(ar.request) row.after_ui_save(ar, watcher)
def after_ui_save(self, ar, cw): super(ContactDetail, self).after_ui_save(ar, cw) mi = self.partner if mi is None: return if self.primary and self.detail_type: for o in mi.phones_by_partner.exclude(id=self.id).filter( detail_type=self.detail_type): if o.primary: o.primary = False o.save() ar.set_response(refresh_all=True) k = self.detail_type.field_name if k: watcher = ChangeWatcher(mi) setattr(mi, k, self.value) watcher.send_update(ar) mi.save()
def PUT(self, **kw): # ~ dblogger.info("%s.PUT(%s)",self.__class__.__name__,kw) obj = self.get_object(kw) if obj is None: if self.allow_put2post: dblogger.info("%s:%s : PUT becomes POST", kw["alias"], kw["id"]) kw["method"] = "POST" return self.POST(**kw) else: dblogger.warning("%s:%s : PUT ignored (row does not exist)", kw["alias"], kw["id"]) return watcher = ChangeWatcher(obj) if self.PUT_special(watcher, **kw): return self.set_timestamp(kw["time"]) self.applydata(obj, kw["data"]) dblogger.info("%s:%s (%s) : PUT %s", kw["alias"], kw["id"], dd.obj2str(obj), kw["data"]) self.validate_and_save(obj) watcher.send_update(REQUEST)
def form2obj_and_save(ar, data, elem, is_new): """ Parses the data from HttpRequest to the model instance and saves it. This is used by `ApiList.post` and `ApiElement.put`, and by `Restful.post` and `Restful.put`. 20140505 : no longer used by ApiList and ApiElement, but still by Restful.* """ if is_new: watcher = None else: watcher = ChangeWatcher(elem) ar.ah.store.form2obj(ar, data, elem, is_new) elem.full_clean() if is_new or watcher.is_dirty(): pre_ui_save.send(sender=elem.__class__, instance=elem, ar=ar) elem.before_ui_save(ar) kw2save = {} if is_new: kw2save.update(force_insert=True) else: kw2save.update(force_update=True) elem.save(**kw2save) if is_new: on_ui_created.send(elem, request=ar.request) ar.success(_("%s has been created.") % obj2unicode(elem)) else: watcher.send_update(ar) ar.success(_("%s has been updated.") % obj2unicode(elem)) else: ar.success(_("%s : nothing to save.") % obj2unicode(elem)) elem.after_ui_save(ar, watcher)
def form2obj_and_save(ar, data, elem, is_new): """Parses the data from HttpRequest to the model instance and saves it This is used by `ApiList.post` and `ApiElement.put`, and by `Restful.post` and `Restful.put`. 20140505 : no longer used by ApiList and ApiElement, but still by Restful.* """ if is_new: watcher = None else: watcher = ChangeWatcher(elem) ar.ah.store.form2obj(ar, data, elem, is_new) elem.full_clean() if is_new or watcher.is_dirty(): pre_ui_save.send(sender=elem.__class__, instance=elem, ar=ar) elem.before_ui_save(ar) kw2save = {} if is_new: kw2save.update(force_insert=True) else: kw2save.update(force_update=True) elem.save(**kw2save) if is_new: on_ui_created.send(elem, request=ar.request) ar.success(_("%s has been created.") % obj2unicode(elem)) else: watcher.send_update(ar.request) ar.success(_("%s has been updated.") % obj2unicode(elem)) else: ar.success(_("%s : nothing to save.") % obj2unicode(elem)) elem.after_ui_save(ar, watcher)
def run_from_ui(self, ar, **kw): # replaces the default implementation obj = ar.selected_rows[0] # obj is a User instance client = ar.master_instance watcher = ChangeWatcher(client) coaching = pcsw.Coaching( client=client, user=obj, start_date=settings.SITE.today(), type=obj.coaching_type) coaching.full_clean() coaching.save() dd.on_ui_created.send(coaching, request=ar.request) client.client_state = pcsw.ClientStates.coached client.full_clean() client.save() watcher.send_update(ar.request) self.emit_message(ar, client) ar.success(ar.action_param_values.notify_body, alert=True, refresh_all=True, **kw)
def POST(self, **kw): # ~ dblogger.info("%s.POST(%s)",self.__class__.__name__,kw) # ~ self.prepare_data(kw['data']) obj = self.get_object(kw) if obj is None: obj = self.create_object(kw) if obj is None: dblogger.warning("%s:%s (%s) : ignored POST %s", kw["alias"], kw["id"], obj, kw["data"]) return # ~ watcher = changes.Watcher(obj,True) self.set_timestamp(kw["time"]) self.applydata(obj, kw["data"]) dblogger.info("%s:%s (%s) : POST %s", kw["alias"], kw["id"], dd.obj2str(obj), kw["data"]) self.validate_and_save(obj) dd.on_ui_created.send(sender=obj, request=REQUEST) # ~ changes.log_create(REQUEST,obj) else: watcher = ChangeWatcher(obj) dblogger.info("%s:%s : POST becomes PUT", kw["alias"], kw["id"]) self.set_timestamp(kw["time"]) self.applydata(obj, kw["data"]) dblogger.info("%s:%s (%s) : POST %s", kw["alias"], kw["id"], dd.obj2str(obj), kw["data"]) self.validate_and_save(obj) watcher.send_update(REQUEST)
def applydata(self, obj, data, **mapper): mapper.update(id="IDPAR", remarks="MEMO", bank_account1="COMPTE1", bank_account2="COMPTE2") ADR_applydata(obj, data) # ,**mapper) # ~ kw.update(street2kw(join_words(data['RUE'], store_date(data, obj, "DATCREA", "created") if data.has_key("LANGUE"): obj.language = isolang(data["LANGUE"]) # ~ dblogger.info("20111223 %r",data) if data.has_key("ATTRIB"): # ~ obj.newcomer = ("N" in data['ATTRIB']) # ~ obj.is_obsolete = ("A" in data['ATTRIB'] or "W" in data['ATTRIB']) obj.is_obsolete = "W" in data["ATTRIB"] if issubclass(obj.__class__, Person): # ~ mapper.update(title='ALLO') title = data.get("ALLO", "") if title in ("Herr", "Herrn", "Frau", u"Fräulein", "Madame", "Monsieur"): title = "" obj.title = title if data.has_key("FIRME"): for k, v in name2kw(data["FIRME"]).items(): setattr(obj, k, v) if data.has_key("NAME2"): setattr(obj, "addr1", data["NAME2"]) if obj.__class__ is Client: par2client(data, obj) mapper.update(gesdos_id="NB1") if data.has_key("NB2"): obj.national_id = data["NB2"] # ~ if obj.national_id: # ~ if not is_valid_ssin(obj.national_id): # ~ dblogger.info("%s : invalid SSIN %s",dd.obj2str(obj),obj.national_id) # ~ obj.national_id = None # ~ else 20121108: # ~ obj.national_id = str(obj.id) # ~ if obj.is_deprecated: # ~ obj.national_id += ' (A)' if data.has_key("ATTRIB") and "N" in data["ATTRIB"]: obj.client_state = pcsw.ClientStates.newcomer elif data["IDPRT"] == "I": obj.client_state = pcsw.ClientStates.former # ~ else: obj.client_state = pcsw.ClientStates.coached # ~ elif obj.national_id and is_valid_ssin(obj.national_id): # ~ obj.client_state = pcsw.ClientStates.coached # ~ else: # ~ obj.client_state = pcsw.ClientStates.invalid # ~ if data.has_key('NB1'): # ~ obj.gesdos_id = data['NB1'] # ~ if not obj.national_id: # ~ obj.national_id = str() if data.has_key("IDUSR"): username = settings.TIM2LINO_USERNAME(data["IDUSR"]) if username: # ~ print 20130222, username u = users.User.get_by_username(username) # ~ u = users.User.objects.get(username=username) """ typical cases: - imported client has been assigned a coach in Lino, then filled IDUSR and removed PARATTR_N in TIM """ else: u = None if obj.pk is None: # must pre-save the client here to save related # coachings obj.save() try: coaching = pcsw.Coaching.objects.get(client=obj, primary=True) except pcsw.Coaching.DoesNotExist, e: try: coaching = pcsw.Coaching.objects.get(client=obj, user=u, end_date__isnull=True) watcher = ChangeWatcher(coaching) coaching.primary = True coaching.save() watcher.send_update(REQUEST) # ~ watcher.log_diff(REQUEST) except pcsw.Coaching.DoesNotExist, e: if u is not None: coaching = pcsw.Coaching( client=obj, primary=True, user=u, type=u.coaching_type, start_date=obj.created ) coaching.save() dd.on_ui_created.send(sender=coaching, request=REQUEST) # ~ changes.log_create(REQUEST,coaching) except Exception, e: raise Exception("More than one active coaching for %r by %r" % (obj, u)) except Exception, e: raise Exception("More than one primary coaching for %r : %s" % (obj, e))
def sync_primary_address(self, ar): watcher = ChangeWatcher(self) self.sync_primary_address_() self.save() watcher.send_update(ar)
# ~ dblogger.warning(u"%s : Company %s doesn't exist (please create manually in Lino).", # ~ dd.obj2str(person),pk) # ~ return qs = pcsw.ClientContact.objects.filter(client=person, type__id=nType) if qs.count() == 0: cc = pcsw.ClientContact(client=person, company_id=pk, type=pcsw.ClientContactType.objects.get(id=nType)) cc.save() dd.on_ui_created.send(sender=cc, request=REQUEST) # ~ changes.log_create(REQUEST,cc) elif qs.count() == 1: cc = qs[0] if cc.company_id != pk: watcher = ChangeWatcher(cc) cc.company_id = pk cc.save() watcher.send_update(REQUEST) # ~ watcher.log_diff(REQUEST) else: dblogger.warning(u"%s : more than 1 ClientContact (type=%r)", dd.obj2str(person), nType) def pxs2client(row, person): kw = {} store( kw, card_number=row["CARDNUMBER"], card_issuer=row.get("CARDISSUER", ""), # 20110110 noble_condition=row.get("NOBLEECOND", ""), # 20110110 birth_place=row.get("BIRTHPLACE", ""), remarks2=row.get("MEMO", ""),
def sync_primary_address(self, request): watcher = ChangeWatcher(self) self.sync_primary_address_() watcher.send_update(request)
def sync_primary_address(self, request): watcher = ChangeWatcher(self) self.sync_from_address(self.get_primary_address()) self.save() watcher.send_update(request)