Beispiel #1
0
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
Beispiel #2
0
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