def country2kw(row, kw): # for both PAR and ADR if row.has_key('PROF'): activity = row['PROF'] if activity: try: activity = int(activity) except ValueError: dblogger.debug("Ignored invalid value PROF = %r", activity) else: if activity: try: activity = Activity.objects.get(pk=activity) except Activity.DoesNotExist: activity = Activity( id=activity, name=unicode(activity)) activity.save(force_insert=True) kw.update(activity=activity) country = row['PAYS'] if country: try: country = Country.objects.get(short_code__exact=country) except Country.DoesNotExist: country = Country(isocode=country, name=country, short_code=country) country.save() kw.update(country=country) email = row['EMAIL'] if email and is_valid_email(email): kw.update(email=email) store(kw, phone=row['TEL'], fax=row['FAX'], ) kw.update(street2kw(join_words(row['RUE'], row['RUENUM'], row['RUEBTE']))) zip_code = row['CP'] if zip_code: kw.update(zip_code=zip_code) try: city = Place.objects.get( country=country, zip_code__exact=zip_code, ) kw.update(city=city) except Place.DoesNotExist, e: city = Place(zip_code=zip_code, name=zip_code, country=country) city.save() kw.update(city=city) #~ dblogger.warning("%s-%s : %s",row['PAYS'],row['CP'],e) except Place.MultipleObjectsReturned, e: dblogger.warning("%s-%s : %s", row['PAYS'], row['CP'], e)
def country2kw(row, kw): # for both PAR and ADR if row.has_key('PROF'): activity = row['PROF'] if activity: try: activity = int(activity) except ValueError: dblogger.debug("Ignored invalid value PROF = %r", activity) else: if activity: try: activity = Activity.objects.get(pk=activity) except Activity.DoesNotExist: activity = Activity(id=activity, name=unicode(activity)) activity.save(force_insert=True) kw.update(activity=activity) country = row['PAYS'] if country: try: country = Country.objects.get(short_code__exact=country) except Country.DoesNotExist: country = Country(isocode=country, name=country, short_code=country) country.save() kw.update(country=country) store( kw, phone=row['TEL'], fax=row['FAX'], email=row['EMAIL'], ) kw.update(street2kw(join_words(row['RUE'], row['RUENUM'], row['RUEBTE']))) zip_code = row['CP'] if zip_code: kw.update(zip_code=zip_code) try: city = Place.objects.get( country=country, zip_code__exact=zip_code, ) kw.update(city=city) except Place.DoesNotExist, e: city = Place(zip_code=zip_code, name=zip_code, country=country) city.save() kw.update(city=city) #~ logger.warning("%s-%s : %s",row['PAYS'],row['CP'],e) except Place.MultipleObjectsReturned, e: dblogger.warning("%s-%s : %s", row['PAYS'], row['CP'], e)
def load_P_(row): kw = {} #~ kw.update(street2kw(join_words(row['RUE'],row['RUENUM'],row['RUEBTE']))) store(kw, last_name=row['AN']) store(kw, first_name=row['AP']) store(kw, crl=CRL(row['P'].encode('cp437'))) #~ store(kw,crl=crl2hex(row['P'])) OU = row['OU'] if OU: kw.update(street2kw(OU)) title = row['PQ'] if title: if title == 'Mme': kw.update(language='fr', gender=dd.Genders.female) elif title == 'Mlle': kw.update(language='fr', gender=dd.Genders.female) elif title == 'M.': kw.update(language='fr', gender=dd.Genders.male) elif title == 'dHr': kw.update(language='nl', gender=dd.Genders.male) elif title == 'Mvw': kw.update(language='nl', gender=dd.Genders.female) elif title == 'Mr': kw.update(language='en', gender=dd.Genders.male) elif title == 'Mrs': kw.update(language='en', gender=dd.Genders.female) elif title == 'Hrrn': kw.update(language='de', gender=dd.Genders.male) elif title == 'Fr': kw.update(language='de', gender=dd.Genders.female) elif title == 'Fr.': kw.update(language='fr', gender=dd.Genders.male, title=u"Frère") elif title == 'Frl': kw.update(language='de', gender=dd.Genders.female) elif title == 'Bx': kw.update(gender=dd.Genders.male, title="Bx") elif title == 'Bse': kw.update(gender=dd.Genders.female, title="Bse") elif title == 'St': kw.update(gender=dd.Genders.male, title="St") elif title == 'Ste': kw.update(gender=dd.Genders.female, title="Ste") else: dblogger.warning("Ignored PQ value %r" % title) a = parsedate(row['T']) if a: kw.update(birth_date=a[0], birth_date_circa=a[1]) a = parsedate(row['T']) if a: kw.update(died_date=a[0]) if a[1]: logger.warning("Ignored 'circa' flag for died_date") return Person(**kw)
def row2instance(self, nr, title, last_name, first_name, street, zip_code, city_name, phone, gsm, birth_date, bez, datum, mg, mgnr, email): Place = rt.models.countries.Place Pupil = rt.models.courses.Pupil kw = dict(last_name=last_name, first_name=first_name) if nr: kw.update(id=1000 + int(nr)) kw.update(phone=phone) kw.update(gsm=gsm) try: kw.update(zip_code=str(int(zip_code))) except ValueError: kw.update(zip_code=zip_code) if email: if isinstance(email, basestring) and is_valid_email(email): kw.update(email=email) else: dd.logger.warning("Ignored invalid email address %r", email) kw.update(street2kw(street)) if title == "Herr": kw.update(gender=dd.Genders.male) elif title == "Frau": kw.update(gender=dd.Genders.female) elif title: kw.update(title=title) city_name = city_name.strip() if city_name: #~ Place.objects.get(name) kw.update(city=Place.lookup_or_create( 'name', city_name, country=self.country)) #~ print birth_date kw.update(birth_date=self.date_converter(birth_date)) return Pupil(**kw)
def card2client(cls, data): "does the actual conversion" self = cls from lino.utils import ssin from lino.api import dd, rt from lino.mixins.beid import BeIdCardTypes from lino.utils import join_words from lino.utils import IncompleteDate from lino_xl.lib.contacts.utils import street2kw countries = dd.resolve_app('countries', strict=True) kw = dict() #~ def func(fldname,qname): #~ kw[fldname] = data[qname] kw.update(national_id=ssin.format_ssin(data['nationalNumber'])) kw.update(first_name=join_words(data['firstName1'], data['firstName2'], data['firstName3'])) #~ func('first_name','firstName1') kw.update(last_name=data['surname']) card_number = data['cardNumber'] if 'picture' in data: fn = self.card_number_to_picture_file(card_number) if os.path.exists(fn): logger.warning("Overwriting existing image file %s.", fn) fp = file(fn, 'wb') fp.write(base64.b64decode(data['picture'])) fp.close() #~ print 20121117, repr(data['picture']) #~ kw.update(picture_data_encoded=data['picture']) #~ func('card_valid_from','validityBeginDate') #~ func('card_valid_until','validityEndDate') #~ func('birth_date','birthDate') kw.update(birth_date=IncompleteDate( *settings.SITE.parse_date(data['birthDate']))) kw.update(card_valid_from=datetime.date( *settings.SITE.parse_date(data['validityBeginDate']))) kw.update(card_valid_until=datetime.date( *settings.SITE.parse_date(data['validityEndDate']))) kw.update(card_number=card_number) kw.update(card_issuer=data['issuingMunicipality']) kw.update(noble_condition=data['nobleCondition']) kw.update(street=data['street']) kw.update(street_no=data['streetNumber']) kw.update(street_box=data['boxNumber']) if kw['street'] and not (kw['street_no'] or kw['street_box']): kw = street2kw(kw['street'], **kw) kw.update(zip_code=data['zipCode']) kw.update(birth_place=data['birthLocation']) pk = data['country'].upper() msg1 = "BeIdReadCardToClientAction %s" % kw.get('national_id') #~ try: country = countries.Country.objects.get(isocode=pk) kw.update(country=country) #~ except countries.Country.DoesNotExist,e: #~ except Exception,e: #~ logger.warning("%s : no country with code %r",msg1,pk) #~ BE = countries.Country.objects.get(isocode='BE') #~ fld = countries.Place._meta.get_field() kw.update(city=countries.Place.lookup_or_create( 'name', data['municipality'], country=country)) def sex2gender(sex): if sex == 'M': return dd.Genders.male if sex in 'FVW': return dd.Genders.female logger.warning("%s : invalid gender code %r", msg1, sex) kw.update(gender=sex2gender(data['sex'])) if False: def nationality2country(nationality): try: return countries.Country.objects.get( nationalities__icontains=nationality) except countries.Country.DoesNotExist, e: logger.warning("%s : no country for nationality %r", msg1, nationality) except MultipleObjectsReturned, e: logger.warning( "%s : found more than one country for nationality %r", msg1, nationality)
def card2client(cls, data): "does the actual conversion" self = cls from lino.utils import ssin from lino.api import dd, rt from lino.mixins.beid import BeIdCardTypes from lino.utils import join_words from lino.utils import IncompleteDate from lino_xl.lib.contacts.utils import street2kw countries = dd.resolve_app('countries', strict=True) kw = dict() #~ def func(fldname,qname): #~ kw[fldname] = data[qname] kw.update(national_id=ssin.format_ssin(data['nationalNumber'])) kw.update(first_name=join_words( data['firstName1'], data['firstName2'], data['firstName3'])) #~ func('first_name','firstName1') kw.update(last_name=data['surname']) card_number = data['cardNumber'] if 'picture' in data: fn = self.card_number_to_picture_file(card_number) if os.path.exists(fn): logger.warning("Overwriting existing image file %s.", fn) fp = file(fn, 'wb') fp.write(base64.b64decode(data['picture'])) fp.close() #~ print 20121117, repr(data['picture']) #~ kw.update(picture_data_encoded=data['picture']) #~ func('card_valid_from','validityBeginDate') #~ func('card_valid_until','validityEndDate') #~ func('birth_date','birthDate') kw.update(birth_date=IncompleteDate( *settings.SITE.parse_date(data['birthDate']))) kw.update(card_valid_from=datetime.date( *settings.SITE.parse_date(data['validityBeginDate']))) kw.update(card_valid_until=datetime.date( *settings.SITE.parse_date(data['validityEndDate']))) kw.update(card_number=card_number) kw.update(card_issuer=data['issuingMunicipality']) kw.update(noble_condition=data['nobleCondition']) kw.update(street=data['street']) kw.update(street_no=data['streetNumber']) kw.update(street_box=data['boxNumber']) if kw['street'] and not (kw['street_no'] or kw['street_box']): kw = street2kw(kw['street'], **kw) kw.update(zip_code=data['zipCode']) kw.update(birth_place=data['birthLocation']) pk = data['country'].upper() msg1 = "BeIdReadCardToClientAction %s" % kw.get('national_id') #~ try: country = countries.Country.objects.get(isocode=pk) kw.update(country=country) #~ except countries.Country.DoesNotExist,e: #~ except Exception,e: #~ logger.warning("%s : no country with code %r",msg1,pk) #~ BE = countries.Country.objects.get(isocode='BE') #~ fld = countries.Place._meta.get_field() kw.update(city=countries.Place.lookup_or_create( 'name', data['municipality'], country=country)) def sex2gender(sex): if sex == 'M': return dd.Genders.male if sex in 'FVW': return dd.Genders.female logger.warning("%s : invalid gender code %r", msg1, sex) kw.update(gender=sex2gender(data['sex'])) if False: def nationality2country(nationality): try: return countries.Country.objects.get( nationalities__icontains=nationality) except countries.Country.DoesNotExist, e: logger.warning("%s : no country for nationality %r", msg1, nationality) except MultipleObjectsReturned, e: logger.warning( "%s : found more than one country for nationality %r", msg1, nationality)
def card2client(self, data): """ Convert the data coming from the card into database fields to be stored in the card holder. """ kw = dict() # raw_data = data['card_data'] kw.update(national_id=ssin.format_ssin(str(data.national_number))) kw.update(first_name=data.firstnames or '') kw.update(middle_name=data.first_letter_of_third_given_name or '') kw.update(last_name=data.surname or '') card_number = str(data.card_number) holder_model = dd.plugins.beid.holder_model if data.PHOTO_FILE: if not card_number: raise Exception("20150730 photo data but no card_number ") fn = holder_model.card_number_to_image_path(card_number) if not fn.exists(): # logger.warning("Overwriting existing image file %s.", fn) rt.makedirs_if_missing(os.path.dirname(fn)) try: fp = open(fn, 'wb') # fp.write(data.PHOTO_FILE) fp.write(base64.b64decode(data.PHOTO_FILE)) fp.close() except IOError as e: logger.warning("Failed to store image file %s : %s", fn, e) #~ print 20121117, repr(data['picture']) #~ kw.update(picture_data_encoded=data['picture']) if isinstance(data.date_of_birth, six.string_types): data.date_of_birth = IncompleteDate.parse(data.date_of_birth) # IncompleteDate( # *data.date_of_birth.split('-')) kw.update(birth_date=data.date_of_birth) kw.update( card_valid_from=dateparser.parse(data.validity_begin_date).date()) kw.update( card_valid_until=dateparser.parse(data.validity_end_date).date()) kw.update(card_number=card_number) kw.update(card_issuer=data.issuing_municipality) if data.nobility: kw.update(noble_condition=data.nobility) if data.address_street_and_number: kw = street2kw(data.address_street_and_number, **kw) if data.address_zip: kw.update(zip_code=str(data.address_zip)) if data.location_of_birth: kw.update(birth_place=data.location_of_birth) pk = data.eidreader_country country = rt.models.countries.Country.objects.get(isocode=pk) kw.update(country=country) if data.address_municipality: kw.update(city=rt.models.countries.Place.lookup_or_create( 'name', data.address_municipality, country=country)) msg1 = "BeIdReadCardToClientAction %s" % kw.get('national_id') def sex2gender(sex): c0 = sex[0].upper() if c0 == 'M': return dd.Genders.male if c0 in 'FWV': return dd.Genders.female logger.warning("%s : invalid gender code %r", msg1, sex) kw.update(gender=sex2gender(data.gender)) def doctype2cardtype(dt): #~ if dt == 1: return BeIdCardTypes.get_by_value("1") rv = BeIdCardTypes.get_by_value(str(dt)) # logger.info("20130103 documentType %r --> %r", dt, rv) return rv kw.update(card_type=doctype2cardtype(data.document_type)) return kw
def card2client_java(self, data): """ Convert the data coming from the card into database fields to be stored in the card holder. """ kw = dict() # raw_data = data['card_data'] kw.update(national_id=ssin.format_ssin(str(data.nationalNumber))) kw.update(first_name=data.firstName or '') kw.update(middle_name=data.middleName or '') kw.update(last_name=data.name or '') card_number = str(data.cardNumber) if data.photo: if not card_number: raise Exception("20150730 photo data but no card_number ") fn = dd.plugins.beid.holder_model.card_number_to_image_path( card_number) if fn.exists(): logger.warning("Overwriting existing image file %s.", fn) try: fp = file(fn, 'wb') fp.write(base64.b64decode(data.photo)) fp.close() except IOError as e: logger.warning("Failed to store image file %s : %s", fn, e) #~ print 20121117, repr(data['picture']) #~ kw.update(picture_data_encoded=data['picture']) if isinstance(data.dateOfBirth, basestring): data.dateOfBirth = IncompleteDate(*data.dateOfBirth.split('-')) kw.update(birth_date=data.dateOfBirth) kw.update(card_valid_from=data.cardValidityDateBegin) kw.update(card_valid_until=data.cardValidityDateEnd) kw.update(card_number=card_number) kw.update(card_issuer=data.cardDeliveryMunicipality) if data.nobleCondition: kw.update(noble_condition=data.nobleCondition) if data.streetAndNumber: # kw.update(street=data.streetAndNumber) kw = street2kw(data.streetAndNumber, **kw) if data.zip: kw.update(zip_code=str(data.zip)) if data.placeOfBirth: kw.update(birth_place=data.placeOfBirth) pk = data.reader.upper() msg1 = "BeIdReadCardToClientAction %s" % kw.get('national_id') country = rt.models.countries.Country.objects.get(isocode=pk) kw.update(country=country) if data.municipality: kw.update(city=rt.models.countries.Place.lookup_or_create( 'name', data.municipality, country=country)) def sex2gender(sex): if sex == 'MALE': return dd.Genders.male if sex == 'FEMALE': return dd.Genders.female logger.warning("%s : invalid gender code %r", msg1, sex) kw.update(gender=sex2gender(data.gender)) def doctype2cardtype(dt): #~ if dt == 1: return BeIdCardTypes.get_by_value("1") rv = BeIdCardTypes.get_by_value(str(dt)) # logger.info("20130103 documentType %r --> %r", dt, rv) return rv kw.update(card_type=doctype2cardtype(data.documentType)) return kw
def row2instance(self, legacy_id, title, last_name, first_name, street, street_box, zip_code, city_name, country_name, phone, gsm, email, birth_date, erfasser, remark, eiche_mg, sektion, ckk, lfv, raviva, nicht_mitglied, national_id, sex): Place = rt.models.countries.Place Pupil = rt.models.courses.Pupil Sections = rt.models.courses.Sections MEMBER_UNTIL = datetime.date(2016, 12, 31) update_fields = ( 'member_until', 'section', 'is_ckk', 'is_lfv', 'is_raviva') kw = dict(last_name=last_name, first_name=first_name) if legacy_id: kw.update(legacy_id=legacy_id) kw.update(is_raviva=raviva) kw.update(is_ckk=ckk) kw.update(is_lfv=lfv) kw.update(is_member=eiche_mg) kw.update(member_until=MEMBER_UNTIL if eiche_mg else None) kw.update(national_id=national_id) sektion = sektion.strip().lower() if sektion and sektion not in ("nein", "0", 'ja', '-1'): if sektion in ('wywertz', 'weywerz'): sektion = "weywertz" if sektion in ('heregenrath', ): sektion = "hergenrath" kw.update(section=Sections.get_by_name(sektion)) kw.update(phone=phone) kw.update(gsm=gsm) try: kw.update(zip_code=str(int(zip_code))) except ValueError: kw.update(zip_code=zip_code) if email: if isinstance(email, basestring) and is_valid_email(email): kw.update(email=email) else: dd.logger.warning("Ignored invalid email address %r", email) kw.update(street2kw(street)) kw.update(street_box=street_box) kw.update(remarks=remark) if title == "Herr": kw.update(gender=dd.Genders.male) elif title == "Frau": kw.update(gender=dd.Genders.female) elif title: kw.update(title=title) if sex == "Weiblich": kw.update(gender=dd.Genders.female) elif sex == "Männlich": kw.update(gender=dd.Genders.male) city_name = city_name.strip() if city_name: kw.update(city=Place.lookup_or_create( 'name', city_name, country=self.country)) #~ print birth_date kw.update(birth_date=self.date_converter(birth_date)) try: obj = Pupil.objects.get(legacy_id=legacy_id) # for k, v in kw.items(): changed = [] for k in update_fields: if k in kw: v = kw[k] setattr(obj, k, v) changed.append(v) uvalues = [eiche_mg, sektion, ckk, lfv, raviva] dd.logger.info("Updated %s (%s from %s)", obj, changed, uvalues) except Pupil.DoesNotExist: obj = Pupil(**kw) dd.logger.info("Created %s", obj) if eiche_mg and nicht_mitglied: dd.logger.warning("%s : Mitglied und Nicht-Mitglied zugleich", obj) return obj
city = Place(zip_code=zip_code, name=zip_code, country=country) city.save() kw.update(city=city) # ~ dblogger.warning("%s-%s : %s",row['PAYS'],row['CP'],e) except Place.MultipleObjectsReturned, e: dblogger.warning("%s-%s : %s", row["PAYS"], row["CP"], e) email = row["EMAIL"] if email: if is_valid_email(email): kw.update(email=email) else: dblogger.warning("Ignoring invalid email address %s", email) store(kw, phone=row["TEL"], fax=row["FAX"]) kw.update(street2kw(join_words(row["RUE"], row["RUENUM"], row["RUEBTE"]))) # ~ def is_company(data): def PAR_model(data): """ - wer eine SSIN oder Gesdos-Nr hat ist ein Klient, selbst wenn er auch eine Mwst-Nummer hat. - Neuzugänge (Attribut N) sind ebenfalls immer Klienten """ has_first_name = len(data.get("FIRME", "").split()) > 1 if has_first_name: nb2 = data.get("NB2", False) if nb2: # SSIN if nb2.strip() == "0": data["NB2"] = ""
def card2client(self, data): """Convert the data coming from the card into database fields to be stored in the card holder. """ kw = dict() raw_data = data['card_data'] if not '\n' in raw_data: # a one-line string means that some error occured (e.g. no # card in reader). of course we want to show this to the # user. raise Warning(raw_data) #~ print cd data = AttrDict(yaml.load(raw_data)) #~ raise Exception("20131108 cool: %s" % cd) kw.update(national_id=ssin.format_ssin(str(data.nationalNumber))) kw.update(first_name=data.firstName or '') kw.update(middle_name=data.middleName or '') kw.update(last_name=data.name or '') card_number = str(data.cardNumber) if data.photo: if not card_number: raise Exception("20150730 photo data but no card_number ") fn = get_image_path(card_number) if fn.exists(): logger.warning("Overwriting existing image file %s.", fn) try: fp = file(fn, 'wb') fp.write(base64.b64decode(data.photo)) fp.close() except IOError as e: logger.warning("Failed to store image file %s : %s", fn, e) #~ print 20121117, repr(data['picture']) #~ kw.update(picture_data_encoded=data['picture']) if isinstance(data.dateOfBirth, basestring): data.dateOfBirth = IncompleteDate(*data.dateOfBirth.split('-')) kw.update(birth_date=data.dateOfBirth) kw.update(card_valid_from=data.cardValidityDateBegin) kw.update(card_valid_until=data.cardValidityDateEnd) kw.update(card_number=card_number) kw.update(card_issuer=data.cardDeliveryMunicipality) if data.nobleCondition: kw.update(noble_condition=data.nobleCondition) if data.streetAndNumber: # kw.update(street=data.streetAndNumber) kw = street2kw(data.streetAndNumber, **kw) if data.zip: kw.update(zip_code=str(data.zip)) if data.placeOfBirth: kw.update(birth_place=data.placeOfBirth) pk = data.reader.upper() msg1 = "BeIdReadCardToClientAction %s" % kw.get('national_id') country = rt.models.countries.Country.objects.get(isocode=pk) kw.update(country=country) if data.municipality: kw.update(city=rt.models.countries.Place.lookup_or_create( 'name', data.municipality, country=country)) def sex2gender(sex): if sex == 'MALE': return dd.Genders.male if sex == 'FEMALE': return dd.Genders.female logger.warning("%s : invalid gender code %r", msg1, sex) kw.update(gender=sex2gender(data.gender)) def doctype2cardtype(dt): #~ if dt == 1: return BeIdCardTypes.get_by_value("1") rv = BeIdCardTypes.get_by_value(str(dt)) # logger.info("20130103 documentType %r --> %r", dt, rv) return rv kw.update(card_type=doctype2cardtype(data.documentType)) if dd.plugins.beid.data_collector_dir: logger.info("Gonna write raw eid card data: %r", raw_data) fn = os.path.join(dd.plugins.beid.data_collector_dir, card_number + '.txt') file(fn, "w").write(raw_data.encode('utf-8')) logger.info("Wrote eid card data to file %s", fn) return kw
def card2client(self, data): """ Convert the data coming from the card into database fields to be stored in the card holder. """ kw = dict() # raw_data = data['card_data'] kw.update(national_id=ssin.format_ssin(str(data.national_number))) kw.update(first_name=data.firstnames or '') kw.update( middle_name=data.first_letter_of_third_given_name or '') kw.update(last_name=data.surname or '') card_number = str(data.card_number) if data.PHOTO_FILE: if not card_number: raise Exception("20150730 photo data but no card_number ") fn = get_image_path(card_number) if fn.exists(): logger.warning("Overwriting existing image file %s.", fn) try: fp = open(fn, 'wb') # fp.write(data.PHOTO_FILE) fp.write(base64.b64decode(data.PHOTO_FILE)) fp.close() except IOError as e: logger.warning("Failed to store image file %s : %s", fn, e) #~ print 20121117, repr(data['picture']) #~ kw.update(picture_data_encoded=data['picture']) if isinstance(data.date_of_birth, six.string_types): data.date_of_birth = IncompleteDate.parse(data.date_of_birth) # IncompleteDate( # *data.date_of_birth.split('-')) kw.update(birth_date=data.date_of_birth) kw.update(card_valid_from=dateparser.parse( data.validity_begin_date).date()) kw.update(card_valid_until=dateparser.parse( data.validity_end_date).date()) kw.update(card_number=card_number) kw.update(card_issuer=data.issuing_municipality) if data.nobility: kw.update(noble_condition=data.nobility) if data.address_street_and_number: kw = street2kw(data.address_street_and_number, **kw) if data.address_zip: kw.update(zip_code=str(data.address_zip)) if data.location_of_birth: kw.update(birth_place=data.location_of_birth) pk = data.eidreader_country country = rt.models.countries.Country.objects.get(isocode=pk) kw.update(country=country) if data.address_municipality: kw.update(city=rt.models.countries.Place.lookup_or_create( 'name', data.address_municipality, country=country)) msg1 = "BeIdReadCardToClientAction %s" % kw.get('national_id') def sex2gender(sex): c0 = sex[0].upper() if c0 == 'M': return dd.Genders.male if c0 in 'FWV': return dd.Genders.female logger.warning("%s : invalid gender code %r", msg1, sex) kw.update(gender=sex2gender(data.gender)) def doctype2cardtype(dt): #~ if dt == 1: return BeIdCardTypes.get_by_value("1") rv = BeIdCardTypes.get_by_value(str(dt)) # logger.info("20130103 documentType %r --> %r", dt, rv) return rv kw.update(card_type=doctype2cardtype(data.document_type)) return kw
def card2client_java(self, data): """ Convert the data coming from the card into database fields to be stored in the card holder. """ kw = dict() # raw_data = data['card_data'] kw.update(national_id=ssin.format_ssin(str(data.nationalNumber))) kw.update(first_name=data.firstName or '') kw.update(middle_name=data.middleName or '') kw.update(last_name=data.name or '') card_number = str(data.cardNumber) if data.photo: if not card_number: raise Exception("20150730 photo data but no card_number ") fn = get_image_path(card_number) if fn.exists(): logger.warning("Overwriting existing image file %s.", fn) try: fp = file(fn, 'wb') fp.write(base64.b64decode(data.photo)) fp.close() except IOError as e: logger.warning("Failed to store image file %s : %s", fn, e) #~ print 20121117, repr(data['picture']) #~ kw.update(picture_data_encoded=data['picture']) if isinstance(data.dateOfBirth, basestring): data.dateOfBirth = IncompleteDate(*data.dateOfBirth.split('-')) kw.update(birth_date=data.dateOfBirth) kw.update(card_valid_from=data.cardValidityDateBegin) kw.update(card_valid_until=data.cardValidityDateEnd) kw.update(card_number=card_number) kw.update(card_issuer=data.cardDeliveryMunicipality) if data.nobleCondition: kw.update(noble_condition=data.nobleCondition) if data.streetAndNumber: # kw.update(street=data.streetAndNumber) kw = street2kw(data.streetAndNumber, **kw) if data.zip: kw.update(zip_code=str(data.zip)) if data.placeOfBirth: kw.update(birth_place=data.placeOfBirth) pk = data.reader.upper() msg1 = "BeIdReadCardToClientAction %s" % kw.get('national_id') country = rt.models.countries.Country.objects.get(isocode=pk) kw.update(country=country) if data.municipality: kw.update(city=rt.models.countries.Place.lookup_or_create( 'name', data.municipality, country=country)) def sex2gender(sex): if sex == 'MALE': return dd.Genders.male if sex == 'FEMALE': return dd.Genders.female logger.warning("%s : invalid gender code %r", msg1, sex) kw.update(gender=sex2gender(data.gender)) def doctype2cardtype(dt): #~ if dt == 1: return BeIdCardTypes.get_by_value("1") rv = BeIdCardTypes.get_by_value(str(dt)) # logger.info("20130103 documentType %r --> %r", dt, rv) return rv kw.update(card_type=doctype2cardtype(data.documentType)) return kw