renhao
2023-10-12 df6e56c65e758b5a5e7b28bb9192575710a76c47
_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart#156.qbl
@@ -9,9 +9,7 @@
  CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays placeOfProductionOfArrays,
  CapacityAndSaleBudgeFilterYears years,
  CapacityAndSaleBudgeFilterMonths months,
  MPSync mpSync,
  GlobalOTDTable otdTable,
  MacroPlan mappingParent
  GlobalOTDTable otdTable
)
{
  Description: '按入参处理数据,产生需要的CapacityAndSaleBudgeChartElement'
@@ -19,62 +17,68 @@
  [*
    // yypsybs Sep-19-2023 (created)
    // true, false
    info( saleOrCapacity );
    //info( saleOrCapacity );
    // 月;季度;半年;年
    info( groupBy );
    //info( groupBy );
    // 面板基地;事业部
    info( byBusinessTypeOrByOrgCode );
    traverse( businessTypes, Elements, businessType ) {
      debuginfo( "businessType : " + businessType.BusinessType() );
    }
    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
      debuginfo( "placeOfProductionOfArray : " + placeOfProductionOfArray.PlaceOfProductionOfArray() );
    }
    traverse( macroPlans, Elements, macroPlan ) {
      debuginfo( "macroPlan : " + macroPlan.ScenarioName() );
    }
    //info( byBusinessTypeOrByOrgCode );
    //traverse( businessTypes, Elements, businessType ) {
    //  info( "businessType : " + businessType.BusinessType() );
    //}
    //traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
    //  info( "placeOfProductionOfArray : " + placeOfProductionOfArray.PlaceOfProductionOfArray() );
    //}
    //traverse( macroPlans, Elements, macroPlan ) {
    //  info( "macroPlan : " + macroPlan.ScenarioName() );
    //}
    // 年份不选时全选
    if( years.Size() = 0 ) {
      years := selectsortedset( this, CapacityAndSaleBudgeFilterYear, item, true, item.YearNo() );
    }
    traverse( years, Elements, year ) {
      debuginfo( "yearNo : " + [String]year.YearNo() );
    }
    //traverse( years, Elements, year ) {
    //  debuginfo( "yearNo : " + [String]year.YearNo() );
    //}
    // 月份不选时全选
    if( months.Size() = 0 ) {
      months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, item, true, item.MonthNo() );
    }
    traverse( months, Elements, month ) {
      debuginfo( "monthNo : " + [String]month.MonthNo() );
    }
    //traverse( months, Elements, month ) {
    //  debuginfo( "monthNo : " + [String]month.MonthNo() );
    //}
    
    // ====清理旧数据====
    this.CapacityAndSaleBudgeChartRow( relflush );
    this.CapacityAndSaleBudgeChartElement( relflush );
    
    // ====按面板基地和事业部对产品进行筛选分组====
    historyData := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
    historyData := selectset( otdTable, Global_MappingAnnualBudgetData, item, true );
    if( businessTypes.Size() > 0 ) {
      businessTypeStrings := selectuniquevalues( businessTypes, Elements, item, true, item.BusinessType() );
      historyData := selectset( historyData, Elements, item, businessTypeStrings.Find( item.BusinessType() ) > -1 );
    }
    if( placeOfProductionOfArrays.Size() > 0 ) {
      placeOfProductionOfArrayStrings := selectuniquevalues( placeOfProductionOfArrays, Elements, item, true, item.PlaceOfProductionOfArray() );
      historyData := selectset( historyData, Elements, item, placeOfProductionOfArrayStrings.Find( item.PlaceOfProductionOfArray() ) > -1 );
      historyData := selectset( historyData, Elements, item, placeOfProductionOfArrayStrings.Find( item.OrgCodeFromBom() ) > -1 );
    }
    //info( "historyData : " + [String]historyData.Size() );
    traverse( historyData, Elements, item ) {
      row := CapacityAndSaleBudgeChartRow::CreateIfNotExist( this, item.BusinessType(), item.PlaceOfProductionOfArray() );
      row := CapacityAndSaleBudgeChartRow::CreateIfNotExist( this, item.BusinessType(), item.OrgCodeFromBom() );
      // 记录每行包含哪些product
      CapacityAndSaleBudgeChartRowProduct::CreateIfNotExist( row, item.ProductCode() );
      CapacityAndSaleBudgeChartRowProduct::CreateIfNotExist( row, item.ProductID() );
    }
    rows := selectset( this, CapacityAndSaleBudgeChartRow, item, true );
    //info( "rows : " + [String]rows.Size() );
    placeOfProductionOfArrayList := selectuniquevalues( historyData, Elements, item, item.PlaceOfProductionOfArray() );
    placeOfProductionOfArrayList := selectuniquevalues( historyData, Elements, item, item.OrgCodeFromBom() );
    //traverse( placeOfProductionOfArrayList, Elements, item ) {
    //  info( "placeOfProduction : " + item );
    //}
    businessTypeList := selectuniquevalues( historyData, Elements, item, item.BusinessType() );
    //traverse( businessTypeList, Elements, item ) {
    //  info( "businessType : " + item );
    //}
    // 生成图表元素
    traverse( years, Elements, year ) {
      debuginfo( "process year start : " + [String]year.YearNo() );
    //  debuginfo( "process year start : " + [String]year.YearNo() );
      if( byBusinessTypeOrByOrgCode = "面板基地" and groupBy = "年" ) {
        // 目标
        traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
@@ -83,8 +87,8 @@
                                                 TimeStringAndScenarioName := [String]year.YearNo() + "年-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
                                                                     Global_MappingAnnualBudgetData::GetSaleByYear( productCodeList, otdTable, year.YearNo() ),
                                                                     Global_MappingForecast::GetQuantityByYear( productCodeList, otdTable, year.YearNo() ) )
                                                 );  
          // S&OP
          traverse( macroPlans, Elements, macroPlan ) {
@@ -92,7 +96,7 @@
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "年-" + macroPlan.ScenarioName(),
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
                                                                       Forecast::GetFulfilledBalanceByYear( productCodeList, macroPlan, year.YearNo() ),
                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) 
                                                                       )
                                                   ); 
@@ -107,8 +111,8 @@
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "年-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
                                                                       Global_MappingAnnualBudgetData::GetSaleByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ),
                                                                       Global_MappingForecast::GetQuantityByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ) )
                                                   );  
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
@@ -116,7 +120,7 @@
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "年-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
                                                                         Forecast::GetFulfilledBalanceByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                                         )
                                                     ); 
@@ -128,15 +132,12 @@
        for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
          traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
      //      info( "productCodeList : " + [String]productCodeList.Size() );
      //      info( "MappingCapacityAndSaleBudge::GetSheetBySeason : " + [String]MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) );
      //      info( "seasonNo : " + [String]seasonNo );
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "年-第" + [String]seasonNo + "季度-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
                                                                       Global_MappingAnnualBudgetData::GetSaleBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ),
                                                                       Global_MappingForecast::GetQuantityBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ) )
                                                   );  
      //      info( "productCodeList : " + [String]productCodeList.Size() );
            // S&OP
@@ -145,7 +146,7 @@
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "年-第" + [String]seasonNo + "季度-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) ,
                                                                         Forecast::GetFulfilledBalanceBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) ,
                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo )
                                                                         )
                                                     ); 
@@ -155,7 +156,7 @@
      }
      if ( byBusinessTypeOrByOrgCode = "面板基地" and groupBy = "月" ) {
        traverse( months, Elements, month ) {
          info( "process month start : " + [String]month.MonthNo() );
    //      info( "process month start : " + [String]month.MonthNo() );
          monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
          traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
@@ -163,8 +164,8 @@
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "年-第" + monthNoString + "月-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
                                                                       Global_MappingAnnualBudgetData::GetSaleByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ),
                                                                       Global_MappingForecast::GetQuantityByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ) )
                                                   );  
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
@@ -172,13 +173,13 @@
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "年-第" + monthNoString + "月-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
                                                                         Forecast::GetFulfilledBalanceByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) 
                                                                         )
                                                     ); 
            }
          }
          info( "process month end : " + [String]month.MonthNo() );
    //      info( "process month end : " + [String]month.MonthNo() );
        }
      }
      if( byBusinessTypeOrByOrgCode = "事业部" and groupBy = "年" ) {
@@ -189,8 +190,8 @@
                                                 TimeStringAndScenarioName := [String]year.YearNo() + "年-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
                                                                     Global_MappingAnnualBudgetData::GetSaleByYear( productCodeList, otdTable, year.YearNo() ),
                                                                     Global_MappingForecast::GetQuantityByYear( productCodeList, otdTable, year.YearNo() ) )
                                                 );  
          // S&OP
          traverse( macroPlans, Elements, macroPlan ) {
@@ -198,7 +199,7 @@
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "年-" + macroPlan.ScenarioName(),
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) ,
                                                                       Forecast::GetFulfilledBalanceByYear( productCodeList, macroPlan, year.YearNo() ) ,
                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() )
                                                                       )
                                                   ); 
@@ -213,8 +214,8 @@
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "年-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
                                                                       Global_MappingAnnualBudgetData::GetSaleByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ),
                                                                       Global_MappingForecast::GetQuantityByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ) )
                                                   );  
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
@@ -222,7 +223,7 @@
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "年-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) ,
                                                                         Forecast::GetFulfilledBalanceByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) ,
                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                                         )
                                                     ); 
@@ -232,15 +233,15 @@
      }
      if ( byBusinessTypeOrByOrgCode = "事业部" and groupBy = "季度" ) {
        for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
          debuginfo( "process season start : " + [String]seasonNo );
    //      debuginfo( "process season start : " + [String]seasonNo );
          traverse( businessTypeList, Elements, businessType ) {
            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "年-第" + [String]seasonNo + "季度-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
                                                                       Global_MappingAnnualBudgetData::GetSaleBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ),
                                                                       Global_MappingForecast::GetQuantityBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ) )
                                                   );  
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
@@ -248,18 +249,18 @@
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "年-第" + [String]seasonNo + "季度-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
                                                                         Forecast::GetFulfilledBalanceBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) 
                                                                         )
                                                     ); 
            }                    
          }
          info( "process season end : " + [String]seasonNo );
    //      info( "process season end : " + [String]seasonNo );
        }
      }
      if ( byBusinessTypeOrByOrgCode = "事业部" and groupBy = "月" ) {
        traverse( months, Elements, month ) {
          debuginfo( "process month start : " + [String]month.MonthNo() );
    //      debuginfo( "process month start : " + [String]month.MonthNo() );
          monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
          traverse( businessTypeList, Elements, businessType ) {
            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
@@ -267,8 +268,8 @@
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "年-第" + monthNoString + "月-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
                                                                       Global_MappingAnnualBudgetData::GetSaleByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ),
                                                                       Global_MappingForecast::GetQuantityByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ) )
                                                   );  
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
@@ -276,16 +277,16 @@
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "年-第" + monthNoString + "月-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) ,
                                                                         Forecast::GetFulfilledBalanceByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) ,
                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() )
                                                                         )
                                                     ); 
            }            
          }
          debuginfo( "process month end : " + [String]month.MonthNo() );
    //      debuginfo( "process month end : " + [String]month.MonthNo() );
        }
      }
      debuginfo( "process year end : " + [String]year.YearNo() )
    //  debuginfo( "process year end : " + [String]year.YearNo() )
    }
    //info( "CapacityAndSaleBudgeChartElement : " + [String]selectset( this, CapacityAndSaleBudgeChartElement, item, true ).Size() );
    //traverse( this, CapacityAndSaleBudgeChartRow, row ) {