上传的图像用于项目: 'CST技术支持'
  1. CST技术支持
  2. SLAL2-4731

【dextra】按年度配额的30%结转规则

XMLWord打印

    • D-Dextra-Y2019102
    • STD
    • dextratest
    • 时间管理
    • 隐藏
      result = []
      field_lists = ["holiday_type_id", "quota", "adjust_num", "used_num",
                      "invalid_num", "salary_num", "display_holiday_type_name"]
      holiday_type = env['hr.holiday.type'].search([('code', '=', 'L001')])
      c_holiday_type = env['hr.holiday.type'].search([('code', '=', 'L005')])
      # 发假规则
      allot_rule = env['hr.holiday.allot.rule'].search([('holiday_type_id', '=', holiday_type.id),('active', '=', True), ('holiday_package_id', '=', package.id)], limit=1)
      # 发假单位
      product_uom_id = allot_rule.product_uom_id.id if allot_rule else None
      float_round = env['hr.holiday.rule.function'].compatibility_precision_round
      # 公司年假
      company_holiday = env['hr.holiday.inquiry'].search([('employee_id', '=', employee.id),
                                                          ('company_id', '=', employee.company_id.id),
                                                          ('holiday_period_id', '=', previous_period.id),
                                                          ('holiday_type_id.code', '=', 'L005')])
      # 配额
      c_max_num = 0
      # 余额
      balance = 0
      if company_holiday:
          for inquiry in company_holiday:
             
              sublist_data = env['hr.holiday.move'].get_sublist_data(prev_model='hr.holiday.inquiry', prev_id=inquiry.id, field_lists=field_lists)
              for data in sublist_data:
                  if '去年' in data.get('display_holiday_type_name', '') or 'Last Year' in data.get('display_holiday_type_name', ''):
                      continue
                  else:
                      balance += data['quota']
                      # 余额
                      c_max_num += data['balances']
      
          c_max_num = float_round(balance * 0.3, '0.01', 'rounding') if c_max_num >= balance * 0.3 else c_max_num
          result.append(
              {
                  'employee_id': employee.id,
                  'holiday_type_id': c_holiday_type.id,
                  'max_num': c_max_num,
                  'product_uom_id': product_uom_id
              }
          )
      # 法定年假
      annual_holiday = env['hr.holiday.inquiry'].search([('employee_id', '=', employee.id), ('company_id', '=', employee.company_id.id),
                                                         ('holiday_period_id', '=', previous_period.id), ('holiday_type_id.code', '=', 'L001')])
      # 配额
      l_max_num = 0
      # 余额
      l_balance = 0
      if annual_holiday:
          for inquiry in annual_holiday:
              
              sublist_data = env['hr.holiday.move'].get_sublist_data(prev_model='hr.holiday.inquiry',
                                                                     prev_id=inquiry.id,
                                                                     field_lists=field_lists)
              for data in sublist_data:
                  if '去年' in data.get('display_holiday_type_name', '') or \
                          'Last Year' in data.get('display_holiday_type_name', ''):
                      continue
                  else:
                      l_balance += data['quota']
                      # 余额
                      l_max_num += data['balances']
      
          l_max_num = float_round(l_balance * 0.3, '0.01', 'rounding') if l_max_num >= l_balance * 0.3 else l_max_num
          result.append(
              {
                  'employee_id': employee.id,
                  'holiday_type_id': holiday_type.id,
                  'max_num': l_max_num,
                  'product_uom_id': product_uom_id
              }
          )
      
      显示
      result = [] field_lists = [ "holiday_type_id" , "quota" , "adjust_num" , "used_num" , "invalid_num" , "salary_num" , "display_holiday_type_name" ] holiday_type = env[ 'hr.holiday.type' ].search([( 'code' , '=' , 'L001' )]) c_holiday_type = env[ 'hr.holiday.type' ].search([( 'code' , '=' , 'L005' )]) # 发假规则 allot_rule = env[ 'hr.holiday.allot.rule' ].search([( 'holiday_type_id' , '=' , holiday_type.id),( 'active' , '=' , True), ( 'holiday_package_id' , '=' , package .id)], limit=1) # 发假单位 product_uom_id = allot_rule.product_uom_id.id if allot_rule else None float_round = env[ 'hr.holiday.rule.function' ].compatibility_precision_round # 公司年假 company_holiday = env[ 'hr.holiday.inquiry' ].search([( 'employee_id' , '=' , employee.id), ( 'company_id' , '=' , employee.company_id.id), ( 'holiday_period_id' , '=' , previous_period.id), ( 'holiday_type_id.code' , '=' , 'L005' )]) # 配额 c_max_num = 0 # 余额 balance = 0 if company_holiday: for inquiry in company_holiday: sublist_data = env[ 'hr.holiday.move' ].get_sublist_data(prev_model= 'hr.holiday.inquiry' , prev_id=inquiry.id, field_lists=field_lists) for data in sublist_data: if '去年' in data.get( 'display_holiday_type_name' , '') or ' Last Year ' in data.get(' display_holiday_type_name ', ' '): continue else : balance += data[ 'quota' ] # 余额 c_max_num += data[ 'balances' ] c_max_num = float_round(balance * 0.3, '0.01' , 'rounding' ) if c_max_num >= balance * 0.3 else c_max_num result.append( { 'employee_id' : employee.id, 'holiday_type_id' : c_holiday_type.id, 'max_num' : c_max_num, 'product_uom_id' : product_uom_id } ) # 法定年假 annual_holiday = env[ 'hr.holiday.inquiry' ].search([( 'employee_id' , '=' , employee.id), ( 'company_id' , '=' , employee.company_id.id), ( 'holiday_period_id' , '=' , previous_period.id), ( 'holiday_type_id.code' , '=' , 'L001' )]) # 配额 l_max_num = 0 # 余额 l_balance = 0 if annual_holiday: for inquiry in annual_holiday: sublist_data = env[ 'hr.holiday.move' ].get_sublist_data(prev_model= 'hr.holiday.inquiry' , prev_id=inquiry.id, field_lists=field_lists) for data in sublist_data: if '去年' in data.get( 'display_holiday_type_name' , '') or \ 'Last Year' in data.get( 'display_holiday_type_name' , ''): continue else : l_balance += data[ 'quota' ] # 余额 l_max_num += data[ 'balances' ] l_max_num = float_round(l_balance * 0.3, '0.01' , 'rounding' ) if l_max_num >= l_balance * 0.3 else l_max_num result.append( { 'employee_id' : employee.id, 'holiday_type_id' : holiday_type.id, 'max_num' : l_max_num, 'product_uom_id' : product_uom_id } )

      年休假,需按年度配额的30%结转到下一年
      原逻辑如附件邮件截图

        1. image.png
          image.png
          22 kB
        2. image.png
          image.png
          258 kB
        3. image.png
          image.png
          31 kB

            ling.chen 陈灵娟
            eva.ding 丁逸雯
            表决:
            0 为这个问题表决

              创建日期:
              已更新:
              已解决:

                预估时间:
                初始预估 - 尚未指定
                尚未指定
                剩余:
                剩余的估算 - 0小时
                0小时
                实际工作时间:
                耗费时间 - 1.5小时
                1.5小时