Пример #1
0
 def add_agroup_id_filter(self, kwargs):
     associate_group_id = current_user.associate_group_id
     if is_region_role() and associate_group_id:
         kwargs['where'] += \
             (self.manager.filters['associate_group_id'][None].convert(
                 associate_group_id),)
         kwargs['filter_and_cols'] = ['associate_group_id']
     text_search = request.args.get('text_search')
     if text_search and text_search != 'false':
         provinces_id = [
             p.province_id for p in models.Province.query.filter(
                 models.Province.name.contains(text_search)).all()]
         kwargs['where'] += \
             (self.manager.filters['province_id']['in'].convert(
                 {'$in': provinces_id}),)
         districts_id = [
             d.district_id for d in models.District.query.filter(
                 models.District.name.contains(text_search)).all()]
         kwargs['where'] += \
             (self.manager.filters['district_id']['in'].convert(
                 {'$in': districts_id}),)
         wards_id = [p.ward_id for p in models.Ward.query.filter(
             models.Ward.name.contains(text_search)).all()]
         kwargs['where'] += \
             (self.manager.filters['ward_id']['in'].convert(
                 {'$in': wards_id}),)
         if not is_region_role() or not associate_group_id:
             agroups_id = [p.id for p in models.AssociateGroup.query.filter(
                 models.AssociateGroup.name.contains(text_search)).all()]
             kwargs['where'] += \
                 (self.manager.filters['associate_group_id']['in'].convert(
                     {'$in': agroups_id}),)
Пример #2
0
 def area(self) -> fields.String():
     approved = request.args.get('approved')
     if approved == 'True' or approved == 'true':
         approved = True
     else:
         approved = False
     associate_group_id = current_user.associate_group_id
     if associate_group_id and is_region_role():
         gs = [g.id for g in models.Group.query.filter_by(
             associate_group_id=associate_group_id, _deleted_at=None).all()]
     else:
         gs = [g.id for g in models.Group.query.filter_by(
             _deleted_at=None).all()]
     sum = 0
     today = datetime.date.today()
     for g in gs:
         cs = models.Certificate.query.filter_by(
             owner_group_id=g, _deleted_at=None).all()
         for cert in cs:
             if cert.certificate_expiry_date and \
                             cert.certificate_expiry_date >= today:
                 if approved and cert.re_verify_status == \
                         c.CertificateReVerifyStatusType.adding and \
                         cert.status == \
                         c.CertificateStatusType.approved:
                     sum += cert.group_area
                 if not approved and \
                         (cert.re_verify_status ==
                             c.CertificateReVerifyStatusType.adding or
                         cert.re_verify_status ==
                             c.CertificateReVerifyStatusType.converting):
                     sum += cert.group_area
     return sum
Пример #3
0
    def add_filter_associate_group_id(self, kwargs):
        associate_group_id = current_user.associate_group_id
        if associate_group_id and is_region_role():
            gs = [g.id for g in models.Group.query.filter_by(
                    associate_group_id=associate_group_id,
                    _deleted_at=None).all()]
            for cond in kwargs['where']:
                if cond.attribute == 'group_id' and isinstance(
                        cond.filter, filters.InFilter):
                    value = []
                    for val in cond.value:
                        if val in gs:
                            value.append(val)
                    cond.value = value

            kwargs['where'] += \
                (self.manager.filters['group_id']['in'].convert(
                            {'$in': gs}),)
            kwargs['filter_and_cols'] = ['group_id']
        else:
            text_search = request.args.get('text_search')
            if text_search and text_search != 'false':
                groups_id = [g.id for g in models.Group.query.filter(
                    models.Group.name.contains(text_search)).all()]
                kwargs['where'] += \
                    (self.manager.filters['group_id']['in'].convert(
                        {'$in': groups_id}),)
        return kwargs
Пример #4
0
    def _filter_group_farmer_on_associate_group(self, kwargs,
                    is_cert_for_group=False, is_cert_for_farmer=False):
        associate_group_id = current_user.associate_group_id
        if associate_group_id and is_region_role():
            kwargs['filter_and_cols'] = ['associate_group_id']
            gs = [g.id for g in models.Group.query.filter_by(
                associate_group_id=associate_group_id, _deleted_at=None).all()]
            fs = [f.id for f in models.Farmer.query.join(models.Group).filter(
                models.Group.associate_group_id == associate_group_id,
                models.Group._deleted_at == None,
                models.Farmer._deleted_at == None).all()]
            group_filter_exist = False
            farmer_filter_exist = False
            if is_cert_for_group:
                kwargs['where'] += \
                    (self.manager.filters['owner_group_id']['in'].convert(
                        {'$in': gs}),)
            elif is_cert_for_farmer:
                kwargs['where'] += \
                    (self.manager.filters['owner_farmer_id']['in'].convert(
                        {'$in': fs}),)
            else:
                for cond in kwargs['where']:
                    if cond.attribute == 'owner_group_id' and isinstance(
                            cond.filter, filters.InFilter):
                        value = []
                        for val in cond.value:
                            if val in gs:
                                value.append(val)
                        cond.value = value
                    elif not group_filter_exist:
                        kwargs['where'] += \
                            (self.manager.filters['owner_group_id']['in']
                                 .convert({'$in': gs}),)
                        group_filter_exist = True

                    if cond.attribute == 'owner_farmer_id' and isinstance(
                        cond.filter, filters.InFilter):
                        value = []
                        for val in cond.value:
                            if val in fs:
                                value.append(val)
                        cond.value = value
                    elif not farmer_filter_exist:
                        kwargs['where'] += \
                            (self.manager.filters['owner_farmer_id']['in']
                                 .convert({'$in': fs}),)
                        farmer_filter_exist = True
            if len(kwargs['where']) == 0:
                kwargs['where'] += \
                    (self.manager.filters['owner_group_id']['in'].convert(
                        {'$in': gs}),)
                kwargs['where'] += \
                    (self.manager.filters['owner_farmer_id']['in'].convert(
                        {'$in': fs}),)
Пример #5
0
 def select2_api(self, **kwargs):
     kwargs['where'] += \
         (self.manager.filters['_deleted_at'][None].convert(None),)
     associate_group_id = current_user.associate_group_id
     if is_region_role() and associate_group_id:
         kwargs['where'] += \
             (self.manager.filters['associate_group_id'][None].convert(
                 associate_group_id),)
     del kwargs['per_page']
     del kwargs['page']
     return self.manager.instances(**kwargs)
Пример #6
0
 def gender(self) -> fields.String():
     gender = int(request.args.get('type'))
     associate_group_id = current_user.associate_group_id
     if associate_group_id and is_region_role():
         gs = [g.id for g in models.Group.query.filter_by(
             associate_group_id=associate_group_id, _deleted_at=None).all()]
     else:
         gs = [g.id for g in models.Group.query.filter_by(
             _deleted_at=None).all()]
     sum = 0
     for g in gs:
         count = models.Farmer.query.filter_by(
             group_id=g, _deleted_at=None, gender=gender).all()
         sum += len(count)
     return sum
Пример #7
0
def check_user_associate_group(manager, kwargs, is_and=False, is_delete=True,
                         is_agroup_id=True, is_get_all=False):
    if is_get_all:
        func = manager.instances
    elif len(kwargs['where']) == 0 or is_and:
        func = manager.paginated_instances
    else:
        func = manager.paginated_instances_or
    associate_group_id = current_user.associate_group_id
    if is_region_role() and associate_group_id and is_agroup_id:
        kwargs['where'] += \
            (manager.filters['id'][None].convert(
                associate_group_id),)
    if is_delete:
        kwargs['where'] += \
            (manager.filters['_deleted_at'][None].convert(None),)
    return func
Пример #8
0
 def instances(self, **kwargs):
     associate_group_id = current_user.associate_group_id
     if is_region_role() and associate_group_id:
         kwargs['where'] += \
             (self.manager.filters['associate_group_id'][None].convert(
                 associate_group_id),)
         kwargs['filter_and_cols'] = ['associate_group_id']
     else:
         text_search = request.args.get('text_search')
         if text_search and text_search != 'false':
             agroups_id = [
                 ag.id for ag in models.AssociateGroup.query.filter(
                     models.AssociateGroup.name.contains(
                         text_search)).all()]
             kwargs['where'] += \
                 (self.manager.filters['associate_group_id']['in'].convert(
                     {'$in': agroups_id}),)
             kwargs['filter_and_cols'] = ['associate_group_id']
     func = check_user_associate_group(self.manager,
                                       kwargs, is_delete=False,
                                       is_agroup_id=False)
     return func(**kwargs)
Пример #9
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)
Пример #10
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)
Пример #11
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)
Пример #12
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)
Пример #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)