Beispiel #1
0
def edit_farmer():
    form = FarmerForm()
    form.group_id.choices = [(form.group_id.data, form.group_id.label.text)]
    if form.id.data:
        if form.validate_on_submit():
            edit_farmer = sqla.session.query(models.Farmer) \
                .filter_by(id=form.id.data).one()
            edit_farmer.farmer_code = form.farmer_code.data
            edit_farmer.name = form.name.data
            edit_farmer.gender = form.gender.data
            edit_farmer.type = form.type.data
            edit_farmer.created_at = form.created_at.data
            if edit_farmer.group_id != form.group_id.data:
                new_group = models.Group.query.filter_by(
                    id=form.group_id.data).one()
                edit_farmer.group = new_group
            sqla.session.commit()
            return jsonify(is_success=True,
                           message=str(__('Update farmer success!')))
        else:
            return jsonify(is_success=False,
                           message=str(__('The form is not validate!')))
    else:
        return jsonify(is_success=False,
                       message=str(__("Can't get id of object edit!")))
Beispiel #2
0
def edit_group():
    form = GroupForm()
    add_value_for_select_field(form)
    if form.validate_on_submit():
        edit_group = sqla.session.query(models.Group) \
            .filter_by(id=form.id.data).one()
        edit_group.group_code = form.group_code.data
        edit_group.name = form.name.data
        edit_group.village = form.village.data
        edit_group.created_at = form.created_at.data
        if edit_group.associate_group_id != \
                form.associate_group_id.data:
            edit_group.associate_group = sqla.session \
                .query(models.AssociateGroup) \
                .filter_by(id=form.associate_group_id.data).one()
        if edit_group.province_id != form.province_id.data:
            edit_group.province = sqla.session \
                .query(models.Province) \
                .filter_by(province_id=form.province_id.data).one()
        if edit_group.district_id != form.district_id.data:
            edit_group.district = sqla.session \
                .query(models.District) \
                .filter_by(district_id=form.district_id.data).one()
        if edit_group.ward_id != form.ward_id.data:
            edit_group.ward = sqla.session.query(models.Ward) \
                .filter_by(ward_id=form.ward_id.data).one()
        sqla.session.commit()
        return jsonify(is_success=True, message=str(__('Edit group success!')))
    else:
        return jsonify(is_success=False,
                       message=str(__('The form is not validate!')))
Beispiel #3
0
def add_group():
    form = GroupForm()
    form.id.data = str(uuid.uuid4())
    add_value_for_select_field(form)
    if form.validate_on_submit():
        associate_group = sqla.session.query(
            models.AssociateGroup) \
            .filter_by(id=form.associate_group_id.data).one()
        province = sqla.session.query(models.Province) \
            .filter_by(province_id=form.province_id.data).one()
        district = sqla.session.query(models.District) \
            .filter_by(district_id=form.district_id.data).one()
        ward = sqla.session.query(models.Ward) \
            .filter_by(ward_id=form.ward_id.data).one()
        new_group = models.Group(id=form.id.data,
                                 group_code=form.group_code.data,
                                 name=form.name.data,
                                 village=form.village.data,
                                 ward=ward,
                                 district=district,
                                 associate_group=associate_group,
                                 province=province,
                                 created_at=form.created_at.data)
        sqla.session.add(new_group)
        sqla.session.commit()
        return jsonify(is_success=True, message=str(__('Add group success!')))
    else:
        return jsonify(is_success=False,
                       message=str(__('The form is not validate!')))
Beispiel #4
0
def delete_user():
    dform = DeleteForm()
    if dform.validate_on_submit():
        del_user = user_datastore.find_user(id=dform.id.data)
        user_datastore.delete_user(del_user)
        sqla.session.commit()
        return jsonify(is_success=True,
                       message=str(__('Delete user success!')))
    else:
        return jsonify(is_success=False,
                       message=str(__('The form is not validate!')))
Beispiel #5
0
def edit_user():
    form = UserForm()
    form.roles.choices = [
        (r.name, r.description)
        for r in models.Role.query.order_by(models.Role.name.asc()).all()
    ]
    form.associate_group_id.choices = [(form.associate_group_id.data,
                                        form.associate_group_id.label.text)]
    setattr(form.password, 'validators', [match_pass])
    setattr(form.confirm, 'validators', [])
    if form.validate_on_submit():
        edit_user = user_datastore.find_user(id=form.id.data)
        if form.old_password.data:
            if not security_utils.verify_and_update_password(
                    form.old_password.data, edit_user):
                return jsonify(is_success=False,
                               message=str(__('Old password is wrong!')))
            else:
                edit_user.password = security_utils.hash_password(
                    form.password.data)
        temp_user = sqla.session.query(models.User) \
            .filter_by(email=form.email.data).all()
        if not check_user_email(temp_user, edit_user.email):
            form.email.errors.append(__('The email was existed!'))
            return jsonify(is_success=False,
                           message=str(__('The email was existed!')))
        else:
            edit_user.email = form.email.data
            edit_user.fullname = form.fullname.data
            if form.associate_group_id.data != edit_user.associate_group_id:
                edit_user.associate_group = models.AssociateGroup.query \
                    .filter_by(id=form.associate_group_id.data) \
                    .one()
            for new_role in form.roles.data:
                role_is_added = False
                for r in edit_user.roles:
                    if new_role == r.name:
                        role_is_added = True
                        break
                if not role_is_added:
                    user_datastore.add_role_to_user(edit_user.email, new_role)
            temp_roles = list(edit_user.roles)
            for old_role in temp_roles:
                if old_role.name not in form.roles.data:
                    user_datastore.remove_role_from_user(
                        edit_user.email, old_role.name)
            user_datastore.put(edit_user)
            return jsonify(is_success=True,
                           message=str(__('Update user success!')))
    else:
        return jsonify(is_success=False,
                       message=str(__('The form is not validate!')))
Beispiel #6
0
class RegisterForm(forms.RegisterForm):
    fullname = forms.StringField(__('Full name'))
    province_id = SelectField(
        __('Province'),
        id=c.SELECT_DEFAULT_ID,
        widget=Select(),
        validators=[validators.DataRequired(message=__('Required field!'))])

    def __init__(self, *args, **kwargs):
        super(RegisterForm, self).__init__(*args, **kwargs)
        self.province_id.choices = [(p.province_id, p.name)
                                    for p in models.Province.query.order_by(
                                        models.Province.name).all()]
Beispiel #7
0
def edit_certificate():
    form = CertificateForm()
    add_value_for_select_field(form)
    if form.validate_on_submit():
        start_date = form.certificate_start_date.data
        expiry_date = form.certificate_expiry_date.data
        if expiry_date:
            if start_date > expiry_date:
                form.certificate_expiry_date.errors.append(
                    __('The expiry date must greater than start date'))
                return jsonify(is_success=False,
                               message=str(
                                   __('The expiry date must greater '
                                      'than start date!')))
        edit_certificate = sqla.session \
            .query(models.Certificate) \
            .filter_by(id=form.id.data).one()
        edit_certificate.certificate_code = form \
            .certificate_code.data
        edit_certificate.group_area = form.group_area.data
        edit_certificate.member_count = form.member_count.data
        edit_certificate.certificate_start_date = start_date
        edit_certificate.certificate_expiry_date = expiry_date
        edit_certificate.gov_certificate_id = form \
            .gov_certificate_id.data
        edit_certificate.status = form.status.data
        edit_certificate.re_verify_status = form \
            .re_verify_status.data
        if form.modify_info.data:
            edit_certificate._modify_info = form.modify_info.data
        if form.owner_farmer_id:
            if edit_certificate.owner_farmer_id != \
                    form.owner_farmer_id.data:
                edit_certificate.owner_farmer = models.Farmer \
                    .query.filter_by(
                        id=form.owner_farmer_id.data).one()
        elif form.owner_group_id:
            if edit_certificate.owner_group_id != \
                    form.owner_group_id.data:
                edit_certificate.owner_group = models.Group.query \
                    .filter_by(id=form.owner_group_id.data).one()
        return jsonify(is_success=True,
                       message=str(__('Edit certificate success!')))
    else:
        return jsonify(is_success=False,
                       message=str(__('The form is not validate!')))
Beispiel #8
0
def add_certificate():
    form = CertificateForm()
    add_value_for_select_field(form)
    form.id.data = str(uuid.uuid4())
    if form.validate_on_submit():
        start_date = form.certificate_start_date.data
        expiry_date = form.certificate_expiry_date.data
        if expiry_date:
            if start_date > expiry_date:
                form.certificate_expiry_date.errors.append(
                    __('The expiry date must greater than start date'))
                return jsonify(is_success=False,
                               message=str(
                                   __('The expiry date must greater '
                                      'than start date!')))
        owner_farmer = None
        owner_group = None
        if form.owner_farmer_id:
            owner_farmer = models.Farmer.query \
                .filter_by(id=form.owner_farmer_id.data).one()
        elif form.owner_group_id:
            owner_group = models.Group.query \
                .filter_by(id=form.owner_group_id.data).one()
        new_cert = models.Certificate(
            id=form.id.data,
            certificate_code=form.certificate_code.data,
            group_area=form.group_area.data,
            member_count=form.member_count.data,
            certificate_start_date=start_date,
            certificate_expiry_date=expiry_date,
            gov_certificate_id=form.gov_certificate_id.data,
            status=form.status.data,
            re_verify_status=form.re_verify_status.data,
            owner_farmer=owner_farmer,
            owner_group=owner_group,
            _modify_info=form.modify_info.data)
        sqla.session.add(new_cert)
        sqla.session.commit()
        return jsonify(is_success=True,
                       message=str(__('Add certificate success!')))
    else:
        return jsonify(is_success=False,
                       message=str(__('The form is not validate!')))
Beispiel #9
0
def add_farmer():
    form = FarmerForm()
    form.group_id.choices = [(form.group_id.data, form.group_id.label.text)]
    form.id.data = str(uuid.uuid4())
    if form.validate_on_submit():
        group_farmer = models.Group.query.filter_by(
            id=form.group_id.data).one()
        new_farmer = models.Farmer(id=form.id.data,
                                   type=form.type.data,
                                   farmer_code=form.farmer_code.data,
                                   name=form.name.data,
                                   group=group_farmer,
                                   gender=form.gender.data,
                                   created_at=form.created_at.data)
        sqla.session.add(new_farmer)
        sqla.session.commit()
        return jsonify(is_success=True, message=str(__('Add farmer success!')))
    else:
        return jsonify(is_success=False,
                       message=str(__('The form is not validate!')))
Beispiel #10
0
def add_user():
    form = UserForm()
    form.roles.choices = [
        (r.name, r.description)
        for r in models.Role.query.order_by(models.Role.name.asc()).all()
    ]
    form.associate_group_id.choices = [(form.associate_group_id.data,
                                        form.associate_group_id.label.text)]
    setattr(form.password, 'validators', [data_required, match_pass])
    setattr(form.confirm, 'validators', [data_required])
    form.id.data = str(uuid.uuid4())
    if form.validate_on_submit():
        if not user_datastore.find_user(email=form.email.data):
            associate_group = models.AssociateGroup.query.filter_by(
                id=form.associate_group_id.data).one()
            user_datastore.create_user(id=form.id.data,
                                       email=form.email.data,
                                       fullname=form.fullname.data,
                                       associate_group=associate_group,
                                       password=security_utils.hash_password(
                                           form.password.data))
            sqla.session.commit()
            for role in form.roles.data:
                user_datastore.add_role_to_user(form.email.data, role)
            sqla.session.commit()
            return jsonify(is_success=True,
                           message=str(__('Add user success!')))
        else:
            form.email.errors.append(__('The email was existed!'))
            return jsonify(is_success=False,
                           message=str(__('The email was existed!')))
    else:
        error_message = ""
        if form.errors.keys():
            for k in form.errors.keys():
                for mes in form.errors[k]:
                    error_message += mes
        else:
            error_message = str(__('The form is not validate!'))
        return jsonify(is_success=False, message=error_message)
Beispiel #11
0
def edit_agroup():
    form = AssociateGroupForm()
    form.province_id.choices = [(form.province_id.data,
                                form.province_id.label.text)]
    if form.validate_on_submit():
        edit_agroup = sqla.session.query(models.AssociateGroup) \
            .filter_by(id=form.id.data).one()
        edit_agroup.email = form.email.data
        edit_agroup.associate_group_code = form \
            .associate_group_code.data
        edit_agroup.name = form.name.data
        edit_agroup.created_at = form.created_at.data
        if edit_agroup.province_id != form.province_id.data:
            edit_agroup.province = models.Province.query \
                .filter_by(province_id=form.province_id.data) \
                .one()
        sqla.session.commit()
        return jsonify(is_success=True,
                       message=str(__('Edit associate group success!')))
    else:
        return jsonify(is_success=False,
                       message=str(__('The form is not validate!')))
Beispiel #12
0
def add_agroup():
    form = AssociateGroupForm()
    form.province_id.choices = [(form.province_id.data,
                                 form.province_id.label.text)]
    form.id.data = str(uuid.uuid4())
    if form.validate_on_submit():
        province = sqla.session.query(models.Province) \
            .filter_by(province_id=form.province_id.data).one()
        as_group = form.associate_group_code.data
        new_agroup = models.AssociateGroup(
            id=form.id.data,
            associate_group_code=as_group,
            name=form.name.data, province=province,
            email=form.email.data,
            created_at=form.created_at.data
        )
        sqla.session.add(new_agroup)
        sqla.session.commit()
        return jsonify(is_success=True,
                       message=str(__('Add associate group success!')))
    else:
        return jsonify(is_success=False,
                       message=str(__('The form is not validate!')))
Beispiel #13
0
def index():
    form = FarmerForm()
    dform = DeleteForm()
    if current_app.config['AJAX_CALL_ENABLED']:
        form.group_id.choices = []
        return render_template('farmer/index.html', form=form, dform=dform)
    else:
        province_id = current_user.province_id
        if province_id and is_region_role():
            farmers = models.Farmer.query.join(models.Group).filter(
                models.Group.province_id == province_id,
                models.Group._deleted_at == None,
                models.Farmer._deleted_at == None).order_by(
                    models.Farmer.name.asc()).all()
            form.group_id.choices = [
                (p.id, p.name) for p in models.Group.query.filter_by(
                    province_id=province_id, _deleted_at=None).order_by(
                        models.Group.name.asc()).all()
            ]
        else:
            farmers = models.Farmer.query.filter_by(_deleted_at=None).all()
            form.group_id.choices = []

        form.group_id.choices = [(form.group_id.data, form.group_id.label.text)
                                 ]
        # form create or edit submit
        if request.method == 'POST' and form.data['submit']:
            if not check_role(crud_role):
                return redirect(url_for(request.endpoint))
            # edit user
            if form.id.data:
                if form.validate_on_submit():
                    edit_farmer = sqla.session.query(models.Farmer) \
                        .filter_by(id=form.id.data).one()
                    edit_farmer.farmer_code = form.farmer_code.data
                    edit_farmer.name = form.name.data
                    edit_farmer.gender = form.gender.data
                    edit_farmer.type = form.type.data
                    if edit_farmer.group_id != form.group_id.data:
                        new_group = models.Group.query.filter_by(
                            id=form.group_id.data).one()
                        edit_farmer.group = new_group
                    sqla.session.commit()
                    for fm in farmers:
                        if fm.id == edit_farmer.id:
                            farmers.remove(fm)
                            farmers.append(edit_farmer)
                    flash(str(__('Update farmer success!')), 'success')

            # add user
            else:
                form.id.data = str(uuid.uuid4())
                if form.validate_on_submit():
                    group_farmer = models.Group.query.filter_by(
                        id=form.group_id.data).one()
                    new_farmer = models.Farmer(
                        id=form.id.data,
                        type=form.type.data,
                        farmer_code=form.farmer_code.data,
                        name=form.name.data,
                        group=group_farmer,
                        gender=form.gender.data)
                    sqla.session.add(new_farmer)
                    sqla.session.commit()
                    farmers.append(new_farmer)
                    flash(str(__('Add farmer success!')), 'success')

                return redirect(url_for(request.endpoint))

        # form delete submit
        if request.method == 'POST' and dform.data['submit_del']:
            if not check_role(crud_role):
                return redirect(url_for(request.endpoint))
            elif dform.validate_on_submit():
                del_farmer = sqla.session.query(models.Farmer) \
                    .filter_by(id=dform.id.data).one()
                del_farmer._deleted_at = func.now()
                if dform.modify_info.data:
                    del_farmer._modify_info = dform.modify_info.data
                sqla.session.commit()
                farmers.remove(del_farmer)
                flash(str(__('Delete farmer success!')), 'success')

                return redirect(url_for(request.endpoint))

        return render_template('farmer/index.html',
                               farmers=farmers,
                               form=form,
                               dform=dform)
Beispiel #14
0
class CertificateForm(FlaskForm):
    certificate_code = StringField(
        __('Certificate code'),
        validators=[],
        render_kw={"placeholder": __('Certificate code')})
    group_area = IntegerField(__('Group area'),
                              validators=[data_required],
                              render_kw={"placeholder": __('Group area')})
    member_count = IntegerField(__('Member count'),
                                validators=[data_required],
                                render_kw={"placeholder": __('Member count')})
    certificate_start_date = DateField(
        __('Certificate verify date'),
        widget=Date(),
        render_kw={"placeholder": __('Certificate verify date')})
    gov_certificate_id = StringField(
        __('Decision code'),
        validators=[data_required],
        render_kw={"placeholder": __('Decision code')})
    certificate_expiry_date = DateField(
        __('Certificate expiry date'),
        validators=(validators.Optional(), ),
        widget=Date(),
        render_kw={"placeholder": __('Certificate expiry date')})
    status = SelectField(
        __('Status'),
        validators=[data_required],
        coerce=int,
        widget=Select(),
        choices=[(c.CertificateStatusType.approved.value, __('Approved')),
                 (c.CertificateStatusType.rejected.value, __('Refuse')),
                 (c.CertificateStatusType.decline.value, __('Withdraw')),
                 (c.CertificateStatusType.warning.value, __('Warning')),
                 (c.CertificateStatusType.punish.value, __('Punish'))])
    re_verify_status = SelectField(
        __('Reverify Status'),
        validators=[data_required],
        coerce=int,
        widget=Select(),
        choices=[
            (c.CertificateReVerifyStatusType.adding.value, __('New')),
            (c.CertificateReVerifyStatusType.keeping.value, __('Remaining')),
            (c.CertificateReVerifyStatusType.converting.value,
             __('Conversion')),
            (c.CertificateReVerifyStatusType.fortuity.value, __('Suddenly'))
        ])
    owner_farmer_id = SelectField(__('Certificated farmer'),
                                  validators=[data_required],
                                  coerce=str,
                                  widget=Select(),
                                  id='load_now-farmer')
    owner_group_id = SelectField(__('Certificated group'),
                                 validators=[data_required],
                                 coerce=str,
                                 widget=Select(),
                                 id='load_now-group')
    modify_info = StringField(__('Note'),
                              render_kw={"placeholder": __('Note')})
    id = HiddenField(__('Id'), validators=[data_required])
    submit = SubmitField(__('Submit'), widget=Submit())
Beispiel #15
0
class FarmerForm(FlaskForm):
    farmer_code = StringField(__('Farmer code'),
                              validators=[data_required],
                              render_kw={"placeholder": __('Farmer code')})
    name = StringField(__('Name'),
                       validators=[data_required],
                       render_kw={"placeholder": __('Name')})
    gender = SelectField(__('Gender'),
                         validators=[data_required],
                         coerce=int,
                         widget=Select(),
                         choices=[(c.GenderType.male.value, __('Male')),
                                  (c.GenderType.female.value, __('Female'))])
    type = SelectField(__('Type'),
                       validators=[data_required],
                       coerce=int,
                       widget=Select(),
                       choices=[(c.FarmerType.member.value, __('Member')),
                                (c.FarmerType.reviewer.value, __('Reviewer')),
                                (c.FarmerType.leader.value, __('Leader')),
                                (c.FarmerType.deputy_leader.value,
                                 __('Deputy leader')),
                                (c.FarmerType.counter.value, __('Counter'))])
    group_id = SelectField(__('Group'),
                           validators=[data_required],
                           coerce=str,
                           widget=Select(),
                           id='load_now-group',
                           choices=[])
    created_at = IntegerField(__('Year created'),
                              render_kw={"placeholder": __('Enter year')})
    id = HiddenField(__('Id'), validators=[data_required])
    submit = SubmitField(__('Submit'), widget=Submit())
Beispiel #16
0
def index():
    form = GroupForm()
    dform = DeleteForm()
    if current_app.config['AJAX_CALL_ENABLED']:
        form.associate_group_id.choices = []
        form.ward_id.choices = []
        form.district_id.choices = []
        form.province_id.choices = []
        associate_group_id = current_user.associate_group_id
        if associate_group_id and is_region_role():
            form.associate_group_id.choices = [
                (ag.id, ag.name)
                for ag in models.AssociateGroup.query.filter_by(
                    id=associate_group_id).all()
            ]
        return render_template('group/index.html', form=form, dform=dform)
    else:
        province_id = current_user.province_id
        if province_id and is_region_role():
            gs = models.Group.query.filter_by(province_id=province_id,
                                              _deleted_at=None).all()
            form.associate_group_id.choices = [
                (ag.id, ag.name)
                for ag in models.AssociateGroup.query.filter_by(
                    province_id=province_id, _deleted_at=None).order_by(
                        models.AssociateGroup.name.asc()).all()
            ]
            form.province_id.choices = [
                (p.province_id, p.type + " " + p.name)
                for p in models.Province.query.filter_by(
                    province_id=province_id).order_by(
                        models.Province.name.asc()).all()
            ]
            form.district_id.choices = [
                (d.district_id, d.type + " " + d.name)
                for d in models.District.query.filter_by(
                    province_id=province_id).order_by(
                        models.District.name.asc()).all()
            ]
            form.ward_id.choices = [
                (w.ward_id, w.type + " " + w.name)
                for w in models.Ward.query.join(models.District).filter(
                    models.District.province_id == province_id).order_by(
                        models.Ward.name.asc()).all()
            ]
        else:
            gs = models.Group.query.filter_by(_deleted_at=None).all()
            form.associate_group_id.choices = []
            form.province_id.choices = []
            form.district_id.choices = []
            form.ward_id.choices = []

        # form create or edit submit
        if request.method == 'POST' and form.data['submit']:
            if not check_role(crud_role):
                return redirect(url_for(request.endpoint))
            form.province_id.choices = [(form.province_id.data,
                                         form.province_id.label.text)]
            form.district_id.choices = [(form.district_id.data,
                                         form.district_id.label.text)]
            form.ward_id.choices = [(form.ward_id.data,
                                     form.ward_id.label.text)]
            form.associate_group_id.choices = [
                (form.associate_group_id.data,
                 form.associate_group_id.label.text)
            ]
            # edit group
            if form.id.data:
                if form.validate_on_submit():
                    edit_group = sqla.session.query(models.Group) \
                        .filter_by(id=form.id.data).one()
                    edit_group.group_code = form.group_code.data
                    edit_group.name = form.name.data
                    edit_group.village = form.village.data
                    if edit_group.associate_group_id != \
                            form.associate_group_id.data:
                        edit_group.associate_group = sqla.session \
                            .query(models.AssociateGroup) \
                            .filter_by(id=form.associate_group_id.data).one()
                    if edit_group.province_id != form.province_id.data:
                        edit_group.province = sqla.session \
                            .query(models.Province) \
                            .filter_by(province_id=form.province_id.data).one()
                    if edit_group.district_id != form.district_id.data:
                        edit_group.district = sqla.session \
                            .query(models.District) \
                            .filter_by(district_id=form.district_id.data).one()
                    if edit_group.ward_id != form.ward_id.data:
                        edit_group.ward = sqla.session.query(models.Ward) \
                            .filter_by(ward_id=form.ward_id.data).one()
                    sqla.session.commit()
                    for gr in gs:
                        if gr.id == edit_group.id:
                            gs.remove(gr)
                            gs.append(edit_group)
                    flash(str(__('Update group success!')), 'success')
                    return redirect(url_for(request.endpoint))
                else:
                    flash(str(__('The form is not validated!')), 'error')

            # add group
            else:
                form.id.data = str(uuid.uuid4())
                if form.validate_on_submit():
                    associate_group = sqla.session.query(
                        models.AssociateGroup) \
                        .filter_by(id=form.associate_group_id.data).one()
                    province = sqla.session.query(models.Province) \
                        .filter_by(province_id=form.province_id.data).one()
                    district = sqla.session.query(models.District) \
                        .filter_by(district_id=form.district_id.data).one()
                    ward = sqla.session.query(models.Ward) \
                        .filter_by(ward_id=form.ward_id.data).one()
                    new_group = models.Group(id=form.id.data,
                                             group_code=form.group_code.data,
                                             name=form.name.data,
                                             village=form.village.data,
                                             ward=ward,
                                             district=district,
                                             associate_group=associate_group,
                                             province=province)
                    sqla.session.add(new_group)
                    sqla.session.commit()
                    gs.append(new_group)
                    flash(str(__('Add group success!')), 'success')
                    return redirect(url_for(request.endpoint))
                else:
                    flash(str(__('The form is not validated!')), 'error')

        # form delete submit
        if request.method == 'POST' and dform.data['submit_del']:
            if not check_role(crud_role):
                return redirect(url_for(request.endpoint))
            elif dform.validate_on_submit():
                del_group = sqla.session.query(models.Group) \
                    .filter_by(id=dform.id.data).one()
                del_group._deleted_at = func.now()
                if dform.modify_info.data:
                    del_group._modify_info = dform.modify_info.data
                sqla.session.commit()
                flash(str(__('Delete group success!')), 'success')
                return redirect(url_for(request.endpoint))

        return render_template('group/index.html',
                               gs=gs,
                               form=form,
                               dform=dform)
Beispiel #17
0
def farmers():
    form = CertificateForm()
    dform = DeleteForm()

    if current_app.config['AJAX_CALL_ENABLED']:
        form.owner_farmer_id.choices = []
        form.owner_group_id.choices = []
        return render_template('certificate/index.html',
                               form=form,
                               dform=dform,
                               only_farmer=True)
    else:
        province_id = current_user.province_id
        today = datetime.datetime.today().strftime('%Y-%m-%d')
        if province_id and is_region_role():
            cs = []
            tmp_cs = models.Certificate.query.join(models.Farmer).filter(
                models.Farmer._deleted_at == None,
                models.Certificate.owner_farmer_id != None,
                models.Certificate._deleted_at == None,
                or_(models.Certificate.certificate_expiry_date >= today,
                    models.Certificate.certificate_expiry_date == None)).all()
            for cert in tmp_cs:
                if cert.owner_farmer.group.province_id == province_id:
                    cs.append(cert)

            del form.owner_group_id
            form.owner_farmer_id.choices = [
                (f.id, f.name)
                for f in models.Farmer.query.join(models.Group).filter(
                    models.Group._deleted_at == None, models.Farmer._deleted_at
                    == None).order_by(models.Farmer.name.asc()).all()
            ]
        else:
            cs = models.Certificate.query.filter(
                models.Certificate.owner_farmer_id != None,
                models.Certificate._deleted_at == None,
                or_(models.Certificate.certificate_expiry_date >= today,
                    models.Certificate.certificate_expiry_date == None)).all()
            form.owner_farmer_id.choices = []
            del form.owner_group_id

            # form create or edit submit
        if request.method == 'POST' and form.data['submit']:
            if not check_role(crud_role):
                return redirect(url_for(request.endpoint))

            form.owner_farmer_id.choices = [(form.owner_farmer_id.data,
                                             form.owner_farmer_id.label.text)]
            form.owner_group_id.choices = [(form.owner_group_id.data,
                                            form.owner_group_id.label.text)]
            # edit certificate
            if form.id.data:
                if form.validate_on_submit():
                    start_date = form.certificate_start_date.data
                    expiry_date = form.certificate_expiry_date.data
                    if start_date > expiry_date:
                        form.certificate_expiry_date.errors.append(
                            __('The expiry date must greater than start date'))
                        flash((str(
                            __('The expiry date must greater than '
                               'start date!'))), 'error')
                    else:
                        edit_certificate = sqla.session \
                            .query(models.Certificate) \
                            .filter_by(id=form.id.data).one()
                        edit_certificate.certificate_code = form \
                            .certificate_code.data
                        edit_certificate.group_area = form.group_area.data
                        edit_certificate.member_count = form.member_count.data
                        edit_certificate.certificate_start_date = start_date
                        edit_certificate.certificate_expiry_date = expiry_date
                        edit_certificate.gov_certificate_id = form \
                            .gov_certificate_id.data
                        edit_certificate.status = form.status.data
                        edit_certificate.re_verify_status = form \
                            .re_verify_status.data
                        if edit_certificate.owner_farmer_id != \
                                form.owner_farmer_id.data:
                            edit_certificate.owner_farmer = models.Farmer \
                                .query.filter_by(
                                    id=form.owner_farmer_id.data).one()
                        if edit_certificate.owner_group_id != \
                                form.owner_group_id.data:
                            edit_certificate.owner_group = models.Group.query \
                                .filter_by(id=form.owner_group_id.data).one()
                        flash(str(__('Update certificate success!')),
                              'success')
                        return redirect(url_for(request.endpoint))
                else:
                    flash(str(__('The form is not validated!')), 'error')

            # add certificate
            else:
                form.id.data = str(uuid.uuid4())
                if form.validate_on_submit():
                    start_date = form.certificate_start_date.data
                    expiry_date = form.certificate_expiry_date.data
                    if start_date > expiry_date:
                        form.certificate_expiry_date.errors.append(
                            __('The expiry date must greater than start date'))
                        flash((str(
                            __('The expiry date must greater '
                               'than start date!'))), 'error')
                    else:
                        owner_farmer = models.Farmer.query \
                            .filter_by(id=form.owner_farmer_id.data).one()
                        owner_group = models.Group.query \
                            .filter_by(id=form.owner_group_id.data).one()
                        new_cert = models.Certificate(
                            id=form.id.data,
                            certificate_code=form.certificate_code.data,
                            group_area=form.group_area.data,
                            member_count=form.member_count.data,
                            certificate_start_date=start_date,
                            certificate_expiry_date=expiry_date,
                            gov_certificate_id=form.gov_certificate_id.data,
                            status=form.status.data,
                            re_verify_status=form.re_verify_status.data,
                            owner_farmer=owner_farmer,
                            owner_group=owner_group)
                        sqla.session.add(new_cert)
                        sqla.session.commit()
                        flash(str(__('Add certificate success!')), 'success')
                        return redirect(url_for(request.endpoint))
                else:
                    flash(str(__('The form is not validated!')), 'error')

        # form delete submit
        if request.method == 'POST' and dform.data['submit_del']:
            if not check_role(crud_role):
                return redirect(url_for(request.endpoint))
            elif dform.validate_on_submit():
                del_cert = sqla.session.query(models.Certificate) \
                    .filter_by(id=dform.id.data).one()
                del_cert._deleted_at = func.now()
                if dform.modify_info.data:
                    del_cert._modify_info = dform.modify_info.data
                sqla.session.commit()
                cs.remove(del_cert)
                flash(str(__('Delete certificate success!')), 'success')
                return redirect(url_for(request.endpoint))

        return render_template('certificate/index.html',
                               cs=cs,
                               form=form,
                               dform=dform,
                               only_farmer=True)
Beispiel #18
0
class GroupForm(FlaskForm):
    group_code = StringField(__('Group code'),
                             validators=[data_required],
                             render_kw={"placeholder": __('Group code')})
    name = StringField(__('Name'),
                       validators=[data_required],
                       render_kw={"placeholder": __('Name')})
    province_id = SelectField(__('Province'),
                              validators=[data_required],
                              coerce=str,
                              widget=Select(),
                              id='load_now-province')
    district_id = SelectField(__('District'),
                              validators=[data_required],
                              coerce=str,
                              widget=Select())
    ward_id = SelectField(__('Ward'),
                          validators=[data_required],
                          coerce=str,
                          widget=Select())
    village = StringField(__('Village'),
                          render_kw={"placeholder": __('Village')})
    associate_group_id = SelectField(__('Inter-group'),
                                     validators=[data_required],
                                     coerce=str,
                                     widget=Select(),
                                     id='load_now-associate_group')
    created_at = IntegerField(__('Year created'),
                              render_kw={"placeholder": __('Enter year')})
    id = HiddenField(__('Id'), validators=[data_required])
    submit = SubmitField(__('Submit'), widget=Submit())
Beispiel #19
0
from flask_wtf import FlaskForm
from wtforms import StringField, SelectField, HiddenField, validators, \
    SubmitField, IntegerField

from pgscm.utils import __, Select, Submit

data_required = validators.DataRequired(message=__('Required field!'))


class GroupForm(FlaskForm):
    group_code = StringField(__('Group code'),
                             validators=[data_required],
                             render_kw={"placeholder": __('Group code')})
    name = StringField(__('Name'),
                       validators=[data_required],
                       render_kw={"placeholder": __('Name')})
    province_id = SelectField(__('Province'),
                              validators=[data_required],
                              coerce=str,
                              widget=Select(),
                              id='load_now-province')
    district_id = SelectField(__('District'),
                              validators=[data_required],
                              coerce=str,
                              widget=Select())
    ward_id = SelectField(__('Ward'),
                          validators=[data_required],
                          coerce=str,
                          widget=Select())
    village = StringField(__('Village'),
                          render_kw={"placeholder": __('Village')})
Beispiel #20
0
def index():
    form = AssociateGroupForm()
    dform = DeleteForm()

    if current_app.config['AJAX_CALL_ENABLED']:
        form.province_id.choices = []
        return render_template('agroup/index.html', form=form, dform=dform)
    else:
        province_id = current_user.province_id
        if province_id and is_region_role():
            ags = models.AssociateGroup.query.filter_by(
                province_id=province_id, _deleted_at=None).order_by(
                                models.AssociateGroup.name.asc()).all()
            form.province_id.choices = [
                (p.province_id, p.type + " " + p.name) for p in
                models.Province.query.filter_by(province_id=province_id).all()]
        else:
            ags = models.AssociateGroup.query.filter_by(_deleted_at=None)\
                .order_by(models.AssociateGroup.name.asc()).all()
            form.province_id.choices = []

        # form create or edit submit
        if request.method == 'POST' and form.data['submit']:
            if not check_role(crud_role):
                return redirect(url_for(request.endpoint))

            form.province_id.choices = [(form.province_id.data,
                                         form.province_id.label.text)]
            # edit associate group
            if form.id.data:
                if form.validate_on_submit():
                    edit_agroup = sqla.session.query(models.AssociateGroup) \
                        .filter_by(id=form.id.data).one()
                    edit_agroup.email = form.email.data
                    edit_agroup.associate_group_code = form \
                        .associate_group_code.data
                    edit_agroup.name = form.name.data
                    if edit_agroup.province_id != form.province_id.data:
                        edit_agroup.province = models.Province.query \
                            .filter_by(province_id=form.province_id.data) \
                            .one()
                    flash(str(__('Update associate group success!')),
                          'success')
                    return redirect(url_for(request.endpoint))
                else:
                    flash(str(__('The form is not validated!')), 'error')

            # add associate group
            else:
                form.id.data = str(uuid.uuid4())
                if form.validate_on_submit():
                    province = sqla.session.query(models.Province) \
                        .filter_by(province_id=form.province_id.data).one()
                    as_group = form.associate_group_code.data
                    new_agroup = models.AssociateGroup(
                        id=form.id.data,
                        associate_group_code=as_group,
                        name=form.name.data, province=province,
                        email=form.email.data,
                    )
                    sqla.session.add(new_agroup)
                    sqla.session.commit()
                    flash(str(__('Add associate group success!')), 'success')
                    return redirect(url_for(request.endpoint))

                else:
                    flash(str(__('The form is not validated!')), 'error')

                    # form delete submit
        if request.method == 'POST' and dform.data['submit_del']:
            if not check_role(crud_role):
                return redirect(url_for(request.endpoint))
            elif dform.validate_on_submit():
                del_agroup = sqla.session.query(models.AssociateGroup) \
                    .filter_by(id=dform.id.data).one()
                del_agroup._deleted_at = func.now()
                if dform.modify_info.data:
                    del_agroup._modify_info = dform.modify_info.data
                sqla.session.commit()
                flash(str(__('Delete associate group success!')), 'success')
                return redirect(url_for(request.endpoint))

        return render_template('agroup/index.html', ags=ags,
                               form=form, dform=dform)
Beispiel #21
0
from flask_wtf import FlaskForm
from wtforms import StringField, SelectField, HiddenField, \
    validators, SubmitField, SelectMultipleField, PasswordField
from wtforms.fields.html5 import EmailField

from pgscm.utils import __, Select, Submit, MultiSelect

data_required = validators.DataRequired(message=__('Required field!'))
match_pass = validators.EqualTo('confirm', message=__('Passwords must match'))


class UserForm(FlaskForm):
    fullname = StringField(__('Name'),
                           validators=[data_required],
                           render_kw={"placeholder": __('Name')})
    email = EmailField(__('Email'),
                       validators=[data_required,
                                   validators.Email('')],
                       render_kw={"placeholder": __('Email')})
    old_password = PasswordField(__('Old password'), id='old_pass')
    password = PasswordField(__('New Password'),
                             validators=[data_required, match_pass])
    confirm = PasswordField(__('Repeat Password'), validators=[data_required])
    roles = SelectMultipleField(__('Role'),
                                validators=[data_required],
                                widget=MultiSelect())
    associate_group_id = SelectField(__('Associated Group'),
                                     validators=[data_required],
                                     coerce=str,
                                     widget=Select(),
                                     id='load_now-associate_group')
Beispiel #22
0
class UserForm(FlaskForm):
    fullname = StringField(__('Name'),
                           validators=[data_required],
                           render_kw={"placeholder": __('Name')})
    email = EmailField(__('Email'),
                       validators=[data_required,
                                   validators.Email('')],
                       render_kw={"placeholder": __('Email')})
    old_password = PasswordField(__('Old password'), id='old_pass')
    password = PasswordField(__('New Password'),
                             validators=[data_required, match_pass])
    confirm = PasswordField(__('Repeat Password'), validators=[data_required])
    roles = SelectMultipleField(__('Role'),
                                validators=[data_required],
                                widget=MultiSelect())
    associate_group_id = SelectField(__('Associated Group'),
                                     validators=[data_required],
                                     coerce=str,
                                     widget=Select(),
                                     id='load_now-associate_group')
    id = HiddenField(__('Id'), validators=[data_required])
    submit = SubmitField(__('Submit'), widget=Submit())
Beispiel #23
0
def users():
    form = UserForm()
    dform = DeleteForm()
    form.roles.choices = [
        (r.name, r.description)
        for r in models.Role.query.order_by(models.Role.name.asc()).all()
    ]

    if current_app.config['AJAX_CALL_ENABLED']:
        form.associate_group_id.choices = []
        associate_group_id = current_user.associate_group_id
        if associate_group_id and is_region_role():
            form.associate_group_id.choices = [
                (ag.id, ag.name)
                for ag in models.AssociateGroup.query.filter_by(
                    id=associate_group_id).all()
            ]
        return render_template('admin/user.html', form=form, dform=dform)
    else:
        province_id = current_user.province_id
        if province_id and is_region_role():
            us = models.User.query.filter_by(province_id=province_id).all()
            form.province_id.choices = [
                (p.province_id, p.type + " " + p.name)
                for p in models.Province.query.filter_by(
                    province_id=province_id).all()
            ]
        else:
            us = models.User.query.all()
            form.province_id.choices = []

        # form create or edit submit
        if request.method == 'POST' and form.data['submit']:
            if not check_role(crud_role):
                return redirect(url_for(request.endpoint))
            form.province_id.choices = [(form.province_id.data,
                                         form.province_id.label.text)]
            # edit user
            if form.id.data:
                # remove required validator in fields pass and confirm
                #  when form is edit form
                setattr(form.password, 'validators', [match_pass])
                setattr(form.confirm, 'validators', [])
                if form.validate_on_submit():
                    edit_user = user_datastore.find_user(id=form.id.data)
                    if form.old_password.data:
                        if not security_utils.verify_and_update_password(
                                form.old_password.data, edit_user):
                            flash(str(__('Old password is wrong!')), 'error')
                            # TODO: fix return to keep current state of form
                            return redirect(url_for(request.endpoint))
                        else:
                            edit_user.password = security_utils.hash_password(
                                form.password.data)
                    temp_user = sqla.session.query(models.User) \
                        .filter_by(email=form.email.data).all()
                    if not check_user_email(temp_user, edit_user.email):
                        form.email.errors.append(__('The email was existed!'))
                        flash(str(__('The email was existed!')), 'error')
                    else:
                        edit_user.email = form.email.data
                        edit_user.fullname = form.fullname.data
                        if form.province_id.data != edit_user.province_id:
                            edit_user.province = models.Province.query \
                                .filter_by(province_id=form.province_id.data) \
                                .one()
                        for new_role in form.roles.data:
                            role_is_added = False
                            for r in edit_user.roles:
                                if new_role == r.name:
                                    role_is_added = True
                                    break
                            if not role_is_added:
                                user_datastore.add_role_to_user(
                                    edit_user.email, new_role)
                        temp_roles = list(edit_user.roles)
                        for old_role in temp_roles:
                            if old_role.name not in form.roles.data:
                                user_datastore.remove_role_from_user(
                                    edit_user.email, old_role.name)
                        user_datastore.put(edit_user)
                        for user in us:
                            if user.id == edit_user.id:
                                us.remove(user)
                                us.append(edit_user)
                        flash(str(__('Update user success!')), 'success')
                        return redirect(url_for(request.endpoint))
                else:
                    flash(str(__('The form is not validated!')), 'error')

            # add user
            else:
                setattr(form.password, 'validators',
                        [data_required, match_pass])
                setattr(form.confirm, 'validators', [data_required])
                form.id.data = str(uuid.uuid4())
                if form.validate_on_submit():
                    if not user_datastore.find_user(email=form.email.data):
                        province = models.Province.query.filter_by(
                            province_id=form.province_id.data).one()
                        user_datastore.create_user(
                            id=form.id.data,
                            email=form.email.data,
                            fullname=form.fullname.data,
                            province=province,
                            password=security_utils.hash_password(
                                form.password.data))
                        sqla.session.commit()
                        for role in form.roles.data:
                            user_datastore.add_role_to_user(
                                form.email.data, role)
                        sqla.session.commit()
                        flash(str(__('Add user success!')), 'success')
                        return redirect(url_for(request.endpoint))
                    else:
                        form.email.errors.append(__('The email was existed!'))
                        flash(str(__('The email was existed!')), 'error')
                else:
                    flash(str(__('The form is not validated!')), 'error')

        # form delete submit
        if request.method == 'POST' and dform.data['submit_del']:
            if not check_role(crud_role):
                return redirect(url_for(request.endpoint))
            elif dform.validate_on_submit():
                del_user = user_datastore.find_user(id=dform.id.data)
                user_datastore.delete_user(del_user)
                sqla.session.commit()

                flash(str(__('Delete user success!')), 'success')
                return redirect(url_for(request.endpoint))

        return render_template('admin/user.html',
                               us=us,
                               form=form,
                               dform=dform)
Beispiel #24
0
class AssociateGroupForm(FlaskForm):
    associate_group_code = StringField(__('Associate group code'),
                                       validators=[data_required],
                                       render_kw={
                                           "placeholder": __(
                                               'Associate group code')})
    name = StringField(__('Name'), validators=[data_required],
                       render_kw={"placeholder": __('Name')})
    email = StringField(__('Email'), validators=[validators.Email()],
                        render_kw={"placeholder": __('Email')})
    province_id = SelectField(__('Province'),
                              widget=Select(), id='load_now-province')
    created_at = IntegerField(__('Year created'),
                              render_kw={"placeholder": __('Enter year')})
    id = HiddenField(__('Id'), validators=[data_required])
    submit = SubmitField(__('Submit'), widget=Submit())