class SearchBillingForm(FlaskForm):
    today = datetime.today().date()
    first_day = today.replace(day=1)
    last_day = first_day + relativedelta(months=1, days=-1)
    
    project_name = StringField('プロジェクト名称', [validators.optional()])
    estimation_no = StringField('見積No', [validators.optional()])
    billing_input_flag = CheckboxField('請求ステータス', choices=InputFlag.get_billing_flag_for_radio())
    deposit_input_flag = CheckboxField('入金ステータス', choices=InputFlag.get_deposit_flag_for_radio())
    end_user_company_id = SelectMultiFieldWithSubtext('エンドユーザー', [validators.optional()],
                                                      render_kw={"title": "エンドユーザー(複数選択)",
                                                                 "data-live-search": "true",
                                                                 "data-size": "8",
                                                                 "data-actions-box": "true",
                                                                 "data-selected-text-format": "count > 3"})
    client_company_id = SelectMultiFieldWithSubtext('顧客', [validators.optional()],
                                                    render_kw={"title": "顧客会社(複数選択)",
                                                               "data-live-search": "true",
                                                               "data-size": "8",
                                                               "data-actions-box": "true",
                                                               "data-selected-text-format": "count > 3"})
    recorded_department_id = SelectMultipleField('計上部署',
                                                 render_kw={"title": "計上部署(複数選択)",
                                                            "data-size": "8",
                                                            "data-actions-box": "true",
                                                            "data-selected-text-format": "count > 3"})
    deposit_date_from = StringField('入金予定日(From)', [validators.optional()],
                                    default=first_day.strftime("%Y/%m/%d"),
                                    render_kw={"autocomplete": "off"})
    deposit_date_to = StringField('入金予定日(To)', [validators.optional()],
                                  default=last_day.strftime("%Y/%m/%d"),
                                  render_kw={"autocomplete": "off"})
Пример #2
0
 def find_by_billing(self, page, project_name, estimation_no,
                     billing_input_flag, deposit_input_flag,
                     end_user_company_id, client_company_id,
                     recorded_department_id, deposit_date_from,
                     deposit_date_to):
     query = self.model.query
     query = query.filter((self.model.billing_confirmation_money > 0)
                          | (self.model.billing_transportation > 0))
     if project_name:
         query = query.filter(
             self.model.project.has(
                 Project.project_name.like('%' + project_name + '%')))
     if estimation_no:
         cut_space_of_estimation_no = estimation_no.replace(' ',
                                                            ',').replace(
                                                                ' ', ',')
         estimation_no_list = [
             estimation_no.strip()
             for estimation_no in cut_space_of_estimation_no.split(',')
             if not estimation_no.strip() == ''
         ]
         query = query.filter(
             self.model.project.has(
                 or_(*[
                     Project.estimation_no.like('%' + estimation_no + '%')
                     for estimation_no in estimation_no_list
                 ])))
     if billing_input_flag:
         query = query.filter(
             self.model.billing_input_flag.in_(
                 [InputFlag.parse(st) for st in billing_input_flag]))
     if deposit_input_flag:
         query = query.filter(
             self.model.deposit_input_flag.in_(
                 [InputFlag.parse(st) for st in deposit_input_flag]))
     if end_user_company_id:
         query = query.filter(
             self.model.project.has(
                 Project.end_user_company_id.in_(end_user_company_id)))
     if client_company_id:
         query = query.filter(
             self.model.project.has(
                 Project.client_company_id.in_(client_company_id)))
     if recorded_department_id:
         query = query.filter(
             self.model.project.has(
                 Project.recorded_department_id.in_(
                     recorded_department_id)))
     if deposit_date_from:
         query = query.filter(self.model.deposit_date >= deposit_date_from)
     if deposit_date_to:
         query = query.filter(self.model.deposit_date <= deposit_date_to)
     pagination = \
         query.order_by('companies_1.company_name asc', 'companies_2.company_name asc',
                        'departments_1.department_name asc', 'projects_1.project_name asc')\
         .paginate(page, self.model.PER_PAGE)
     return pagination
Пример #3
0
    def find_by_result(self, page, project_name, estimation_no, result_input_flag, end_user_company_id,
                       client_company_id, recorded_department_id, engineer_name, result_month_from, result_month_to):
        query = self.model.query\
            .filter(self.model.project_detail.has(ProjectDetail.detail_type == DetailType.engineer))
        if project_name:
            query = query.filter(self.model.project_detail
                                 .has(ProjectDetail.project.has(Project.project_name.like('%' + project_name + '%'))))
        if estimation_no:
            cut_space_of_estimation_no = estimation_no.replace(' ', ',').replace(' ', ',')
            estimation_no_list = [estimation_no.strip() for estimation_no in cut_space_of_estimation_no.split(',')
                                  if not estimation_no.strip() == '']
            query = query.filter(self.model.project_detail
                                 .has(ProjectDetail.project
                                      .has(or_(*[Project.estimation_no.like('%' + estimation_no + '%')
                                                 for estimation_no in estimation_no_list]))))
        if result_input_flag and len(result_input_flag) == 1:
            if InputFlag.yet in [InputFlag.parse(f) for f in result_input_flag]:
                query = query.filter(or_(self.model.work_time == 0, self.model.work_time.is_(None)))
            if InputFlag.done in [InputFlag.parse(f) for f in result_input_flag]:
                query = query.filter(self.model.work_time > 0)
        if end_user_company_id:
            query = query.filter(self.model.project_detail
                                 .has(ProjectDetail.project.has(Project.end_user_company_id.in_(end_user_company_id))))
        if client_company_id:
            query = query.filter(self.model.project_detail
                                 .has(ProjectDetail.project.has(Project.client_company_id.in_(client_company_id))))
        if recorded_department_id:
            query = query.filter(self.model.project_detail
                                 .has(ProjectDetail.project
                                      .has(Project.recorded_department_id.in_(recorded_department_id))))
        if engineer_name:
            query = query.filter(self.model.project_detail
                                 .has(ProjectDetail.engineer
                                      .has(Engineer.engineer_name.like('%' + engineer_name + '%'))))
        if result_month_from:
            tmp_data = datetime.strptime(result_month_from, '%Y/%m').date()
            result_month_from = date(tmp_data.year, tmp_data.month, 1)

            query = query.filter(self.model.result_month >= result_month_from)
        if result_month_to:
            tmp_data = datetime.strptime(result_month_to, '%Y/%m').date()
            result_month_to = tmp_data + relativedelta(months=1, days=-1)

            query = query.filter(self.model.result_month <= result_month_to)
        pagination = \
            query.order_by('companies_1.company_name asc', 'companies_2.company_name asc',
                           'departments_1.department_name asc', 'engineers_1_engineer_name asc',
                           asc(self.model.result_month))\
            .paginate(page, self.model.PER_PAGE)
        return pagination
Пример #4
0
def save_flag():
    if request.is_xhr:
        payment_id = request.form["payment_id"]
        input_flag = InputFlag.parse(request.form["input_flag"])

        project_result = service.find_by_id(payment_id)
        project_result.payment_flag = input_flag

        service.save(project_result)
        return jsonify(result='success')

    return abort(404)
def save_flag():
    if request.is_xhr:
        month_id = request.form["month_id"]
        input_flag = InputFlag.parse(request.form["input_flag"])

        project_month = project_month_service.find_by_id(month_id)
        project_month.deposit_input_flag = input_flag

        project_month_service.save(project_month)
        return jsonify(result='success')

    return abort(404)
Пример #6
0
 def find_by_payment(self, page, project_name, estimation_no, input_flag, end_user_company_id,
                     client_company_id, recorded_department_id, engineer_name,
                     payment_expected_date_from, payment_expected_date_to):
     query = self.model.query\
         .filter(self.model.project_detail.has(ProjectDetail.engineer
                                               .has(Engineer.company
                                                    .has(Company.company_client_flags
                                                         .any(CompanyClientFlag.client_flag == ClientFlag.bp)))))
     if project_name:
         query = query.filter(self.model.project_detail
                              .has(ProjectDetail.project.has(Project.project_name.like('%' + project_name + '%'))))
     if estimation_no:
         cut_space_of_estimation_no = estimation_no.replace(' ', ',').replace(' ', ',')
         estimation_no_list = [estimation_no.strip() for estimation_no in cut_space_of_estimation_no.split(',')
                               if not estimation_no.strip() == '']
         query = query.filter(self.model.project_detail
                              .has(ProjectDetail.project
                                   .has(or_(*[Project.estimation_no.like('%' + estimation_no + '%')
                                              for estimation_no in estimation_no_list]))))
     if input_flag:
         query = query.filter(self.model.payment_flag.in_([InputFlag.parse(st) for st in input_flag]))
     if end_user_company_id:
         query = query.filter(self.model.project_detail
                              .has(ProjectDetail.project.has(Project.end_user_company_id.in_(end_user_company_id))))
     if client_company_id:
         query = query.filter(self.model.project_detail
                              .has(ProjectDetail.project.has(Project.client_company_id.in_(client_company_id))))
     if recorded_department_id:
         query = query.filter(self.model.project_detail
                              .has(ProjectDetail.project
                                   .has(Project.recorded_department_id.in_(recorded_department_id))))
     if engineer_name:
         query = query.filter(self.model.project_detail
                              .has(ProjectDetail.engineer
                                   .has(Engineer.engineer_name.like('%' + engineer_name + '%'))))
     if payment_expected_date_from:
         query = query.filter(self.model.payment_expected_date >= payment_expected_date_from)
     if payment_expected_date_to:
         query = query.filter(self.model.payment_expected_date <= payment_expected_date_to)
     pagination = \
         query.order_by('companies_1.company_name asc', 'companies_2.company_name asc',
                        'departments_1.department_name asc', 'engineers_1_engineer_name asc',
                        asc(self.model.payment_expected_date))\
         .paginate(page, self.model.PER_PAGE)
     return pagination
Пример #7
0
 def test_parse_fail_is_none(self):
     self.assertIsNone(InputFlag.parse(10))
     self.assertIsNone(InputFlag.parse('a'))
Пример #8
0
    def test_parse(self):
        yet = 0
        done = 1

        self.assertEqual(InputFlag.parse(yet), InputFlag.yet)
        self.assertEqual(InputFlag.parse(done), InputFlag.done)