def to_model(beneficiary_pre_subscription: BeneficiaryPreSubscription) -> User: beneficiary = User() beneficiary.activity = beneficiary_pre_subscription.activity beneficiary.address = beneficiary_pre_subscription.address beneficiary.city = beneficiary_pre_subscription.city beneficiary.civility = beneficiary_pre_subscription.civility beneficiary.dateOfBirth = beneficiary_pre_subscription.date_of_birth beneficiary.departementCode = beneficiary_pre_subscription.department_code beneficiary.email = beneficiary_pre_subscription.email beneficiary.firstName = beneficiary_pre_subscription.first_name beneficiary.hasSeenTutorials = False beneficiary.isAdmin = False beneficiary.lastName = beneficiary_pre_subscription.last_name beneficiary.password = random_password() beneficiary.phoneNumber = beneficiary_pre_subscription.phone_number beneficiary.postalCode = beneficiary_pre_subscription.postal_code beneficiary.publicName = beneficiary_pre_subscription.public_name beneficiary.isBeneficiary = True generate_reset_token(beneficiary, validity_duration_hours=THIRTY_DAYS_IN_HOURS) deposit = payments_api.create_deposit( beneficiary, beneficiary_pre_subscription.deposit_source) beneficiary.deposits = [deposit] users_api.attach_beneficiary_import_details(beneficiary, beneficiary_pre_subscription) return beneficiary
def create_beneficiary_from_application( application_detail: fraud_models.DMSContent, user: Optional[User] = None) -> User: if not user: beneficiary = User() beneficiary.password = random_hashed_password() beneficiary.email = sanitize_email(application_detail.email) beneficiary.dateOfBirth = application_detail.birth_date else: beneficiary = user beneficiary.lastName = application_detail.last_name beneficiary.firstName = application_detail.first_name beneficiary.publicName = "%s %s" % (application_detail.first_name, application_detail.last_name) beneficiary.departementCode = application_detail.department beneficiary.postalCode = application_detail.postal_code beneficiary.address = application_detail.address beneficiary.civility = application_detail.civility beneficiary.activity = application_detail.activity beneficiary.remove_admin_role() beneficiary.hasSeenTutorials = False beneficiary.idPieceNumber = application_detail.id_piece_number if not beneficiary.phoneNumber: beneficiary.phoneNumber = application_detail.phone return beneficiary
def update_user_information_from_external_source( user: User, data: Union[fraud_models.DMSContent, fraud_models.JouveContent, fraud_models.EduconnectContent], commit=False, ) -> User: if isinstance(data, fraud_models.DMSContent): # FIXME: the following function does not override user.dateOfBirth, we should do it user = create_beneficiary_from_application(data, user) elif isinstance(data, fraud_models.JouveContent): if data.activity: user.activity = data.activity if data.address: user.address = data.address if data.city: user.city = data.city if data.gender: user.civility = "Mme" if data.gender == "F" else "M." if data.birthDateTxt: user.dateOfBirth = data.birthDateTxt if data.firstName: user.firstName = data.firstName if data.lastName: user.lastName = data.lastName if data.postalCode and not user.postalCode: user.postalCode = data.postalCode user.departementCode = PostalCode(data.postalCode).get_departement_code() if data.firstName and data.lastName: user.publicName = f"{user.firstName} {user.lastName}" if data.bodyPieceNumber: items = ( fraud_api.validate_id_piece_number_format_fraud_item(data.bodyPieceNumber), fraud_api._duplicate_id_piece_number_fraud_item(data.bodyPieceNumber), ) if all((item.status == fraud_models.FraudStatus.OK) for item in items): user.idPieceNumber = data.bodyPieceNumber if not FeatureToggle.ENABLE_PHONE_VALIDATION.is_active(): if not user.phoneNumber and data.phoneNumber: user.phoneNumber = data.phoneNumber elif isinstance(data, fraud_models.EduconnectContent): user.firstName = data.first_name user.lastName = data.last_name user.dateOfBirth = datetime.combine(data.birth_date, time(0, 0)) user.ineHash = data.ine_hash # update user fields to be correctly initialized user.hasSeenTutorials = False user.remove_admin_role() db.session.add(user) db.session.flush() if commit: db.session.commit() return user
def to_model(beneficiary_pre_subscription: BeneficiaryPreSubscription, user: Optional[User] = None) -> User: if user and beneficiary_pre_subscription.postal_code.strip() == "": dateOfBirth = beneficiary_pre_subscription.date_of_birth or user.dateOfBirth civility = beneficiary_pre_subscription.civility firstName = beneficiary_pre_subscription.first_name lastName = beneficiary_pre_subscription.last_name publicName = beneficiary_pre_subscription.public_name idPieceNumber = beneficiary_pre_subscription.id_piece_number User.query.filter(User.id == user.id).update({ "civility": civility, "dateOfBirth": dateOfBirth, "firstName": firstName, "idPieceNumber": idPieceNumber, "lastName": lastName, "publicName": publicName, }) return user if not user: beneficiary = User() beneficiary.email = sanitize_email(beneficiary_pre_subscription.email) fulfill_account_password(beneficiary) else: beneficiary = user beneficiary.dateOfBirth = beneficiary_pre_subscription.date_of_birth or beneficiary.dateOfBirth beneficiary.activity = beneficiary_pre_subscription.activity beneficiary.address = beneficiary_pre_subscription.address beneficiary.city = beneficiary_pre_subscription.city beneficiary.civility = beneficiary_pre_subscription.civility beneficiary.departementCode = beneficiary_pre_subscription.department_code beneficiary.firstName = beneficiary_pre_subscription.first_name beneficiary.hasSeenTutorials = False beneficiary.remove_admin_role() beneficiary.lastName = beneficiary_pre_subscription.last_name beneficiary.postalCode = beneficiary_pre_subscription.postal_code beneficiary.publicName = beneficiary_pre_subscription.public_name if FeatureToggle.ENABLE_IDCHECK_FRAUD_CONTROLS.is_active(): beneficiary.idPieceNumber = beneficiary_pre_subscription.id_piece_number beneficiary.hasCompletedIdCheck = True if not beneficiary.phoneNumber: beneficiary.phoneNumber = beneficiary_pre_subscription.phone_number return beneficiary