limj
2023-09-26 42bc9d737ef67ac298062a01854b0faa438c84ac
优先级因子计算
已重命名1个文件
已添加20个文件
已修改6个文件
484 ■■■■■ 文件已修改
_Main/BL/KnowledgeBaseDomain_MacroPlanner/KnowledgeBase_Knowledge_MP/_ROOT_KnowledgeBase_Knowledge_MP.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BusinessType/StaticMethod_CreateData.qbl 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerAndForecastOrder/Attribute_CustomerOrderID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerAndForecastOrder/Attribute_ForecastID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_RefreshData.qbl 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_BusinessType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_CustomerPolicy.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_IsAvailable.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_OrderTime.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_OrderType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_ProductGrade.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_SegmentPriority.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_SheetProfitability.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/KnowledgeBaseDomain_MacroPlanner/KnowledgeBase_Knowledge_MP/_ROOT_KnowledgeBase_Knowledge_MP.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #root
KnowledgeBase Knowledge_MP #extension
{
}
_Main/BL/Type_BusinessType/StaticMethod_CreateData.qbl
@@ -21,6 +21,9 @@
    // å¦‚果不存在则添加
    if( not checkExist ){
      owner.BusinessType(relnew,BusinessTypeName := businessName);
      // åˆå§‹åŒ–优先级因子数据
      PriorityFactor::InitData( macroPlan,businessName);
    }
  *]
}
_Main/BL/Type_CustomerAndForecastOrder/Attribute_CustomerOrderID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomerOrderID
{
  #keys: '3[414382.0.554303146][414382.0.554303145][414382.0.554303147]'
  ValueType: String
}
_Main/BL/Type_CustomerAndForecastOrder/Attribute_ForecastID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ForecastID
{
  #keys: '3[414382.0.554303156][414382.0.554303155][414382.0.554303157]'
  ValueType: String
}
_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_RefreshData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
Quintiq file version 2.0
#parent: #root
StaticMethod RefreshData (
  MacroPlan owner,
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    // èŽ·å–å·²ç»å­˜åœ¨ customerOrderID å’ŒforecastID
    customerOrderIDs := selectvalues( owner,CustomerAndForecastOrder,c,
                                      c.CustomerOrderID() <> '',
                                      c.CustomerID()
                                      );
    forecastIDs := selectvalues( owner,CustomerAndForecastOrder,c,
                                      c.ForecastID() <> '',
                                      c.ForecastID()
                                      );
    // ä»Žæ•°æ®æ¹– Global_MappingCustomerOrder Global_MappingForecast ä¸­èŽ·å–æ–°çš„è®¢å•æ•°æ®
    traverse( globalOTDTable,Global_MappingCustomOrder,cus)
    {
        if(customerOrderIDs.Find( cus.ID()) = -1 )
        {
             owner.CustomerAndForecastOrder(relnew,OrderID := cus.OrderID(),ProductID := cus.ProductID(),BusinessType := cus.BusinessType(),Customer := cus.Customer(),CustomerID := cus.CustomerID(),
                                    Quantity := cus.Quantity(),UnitOfMeasureName := cus.UnitOfMeasureName(),DemandDate := cus.OrderDate()
                                    );
        }
    }
    traverse( globalOTDTable,Global_MappingForecast,forecast)
    {
        if(forecastIDs.Find( forecast.ID()) = -1 )
        {
             owner.CustomerAndForecastOrder(relnew,ProductID := forecast.ProductID(),BusinessType := forecast.BusinessType(),
                                    Quantity := forecast.Quantity(),UnitOfMeasureName := forecast.UnitOfMeasureName(),DemandDate := forecast.EndDate()
                                    );
        }
    }
  *]
}
_Main/BL/Type_CustomerOrder/Attribute_BusinessType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute BusinessType
{
  #keys: '3[414382.0.554303217][414382.0.554303216][414382.0.554303218]'
  Description: '事业部'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/Attribute_CustomerPolicy.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomerPolicy
{
  #keys: '3[414382.0.554014841][414382.0.554014840][414382.0.554014842]'
  Description: '客户策略'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/Attribute_IsAvailable.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute IsAvailable
{
  #keys: '3[414382.0.554303237][414382.0.554303236][414382.0.554303238]'
  Description: '订单是否参与计划'
  ValueType: Boolean
}
_Main/BL/Type_CustomerOrder/Attribute_OrderTime.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute OrderTime
{
  #keys: '3[414382.0.554303277][414382.0.554303276][414382.0.554303278]'
  Description: '订单下单时间'
  ValueType: Date
}
_Main/BL/Type_CustomerOrder/Attribute_OrderType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute OrderType
{
  #keys: '3[414382.0.554303227][414382.0.554303226][414382.0.554303228]'
  Description: '订单类型'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/Attribute_ProductGrade.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductGrade
{
  #keys: '3[414382.0.554303247][414382.0.554303246][414382.0.554303248]'
  Description: '产品等级'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/Attribute_SegmentPriority.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute SegmentPriority
{
  #keys: '3[414382.0.554303257][414382.0.554303256][414382.0.554303258]'
  Description: '细分市场优先级'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/Attribute_SheetProfitability.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute SheetProfitability
{
  #keys: '3[414382.0.554303267][414382.0.554303266][414382.0.554303268]'
  Description: '大张盈利水平'
  ValueType: String
}
_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl
@@ -34,8 +34,7 @@
    salesSegmentName := salesSegmentNameList.Concatenate( ",")
    
    schemeDate := Date::Today();
    filllingCapacityOrderScheme := owner.FilllingCapacityOrderScheme(relnew,SchemeName := schemeName,SchemeDate := schemeDate,BusinessType := businessType,Customer := customer,CustomerID := customerID,
    owner.FilllingCapacityOrderScheme(relnew,SchemeName := schemeName,SchemeDate := schemeDate,BusinessType := businessType,Customer := customer,CustomerID := customerID,
                                                                      SalesSegmentName := salesSegmentName);
    
    
_Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ReflectionAttribute
{
  #keys: '3[414382.0.554303396][414382.0.554303395][414382.0.554303397]'
  ValueType: String
}
_Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ReflectionType
{
  #keys: '3[414382.0.554014806][414382.0.554014805][414382.0.554014807]'
  ValueType: String
}
_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl
@@ -15,6 +15,8 @@
        isBusinessType := true; 
    }
    
    if( priorityFactor.Name() = "大张盈利水平" )
    {
    priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "大盈",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
@@ -25,5 +27,34 @@
                                            IsRange := false,GradingName := "小亏",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5,
                                            IsRange := false,GradingName := "大亏",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    if( priorityFactor.Name() = "客户策略" )
    {
          priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "81%≤X≤100%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
                                                IsRange := false,GradingName := "61%≤X≤80%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "41%≤X≤60%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
                                                IsRange := false,GradingName := "21%≤X≤40%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "1%≤X≤20%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    if( priorityFactor.Name() = "客户等级" )
    {
          priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "81%≤X≤100%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
                                                IsRange := false,GradingName := "61%≤X≤80%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "41%≤X≤60%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
                                                IsRange := false,GradingName := "21%≤X≤40%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "1%≤X≤20%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
  *]
}
_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomerOrderID
{
  #keys: '3[414382.0.554015006][414382.0.554015005][414382.0.554015007]'
  ValueType: String
}
_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CalculateBracketScore (
  String calcStr,
  CustomerOrder customerOrder,
  String businessType,
  MacroPlan macroPlan
) as Real
{
  Description: '计算公式中括号内的数据'
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    return PriorityResult::CalculateScore( calcStr,customerOrder,businessType,macroPlan,0.0);
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CalculateScore (
  String formula,
  CustomerOrder customerOrder,
  String businessType,
  MacroPlan macroPlan,
  Real lastScore
) as Real
{
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    score := 0.0;
    remindFormula := formula;
    // éåŽ†ä¼˜å…ˆçº§å› å­é…ç½®
    if( not remindFormula = '' )
    {
            // ä»Žèµ·å§‹ä½ç½®å¼€å§‹åŒ¹é…
            if(remindFormula.StartsWith( "+" ))
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length());
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan);
                score := lastScore + score;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score);
            }
            else if( remindFormula.StartsWith( "-" ))
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length());
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan);
                score := lastScore - score;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score);
            }
            else if( remindFormula.StartsWith( "*" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length());
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan);
                score := lastScore * score;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score);
            }
            else if( remindFormula.StartsWith( "/" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length());
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan);
                score := lastScore / score;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score);
            }
            else if( remindFormula.StartsWith( "(" ) )
            {
                // æ‰¾åˆ°ç¬¬ä¸€ä¸ªç»“束的 )
                // è®¡ç®—括号中的内容
                rightBracket := remindFormula.FindString( ")",0);
                calcStr := remindFormula.SubString( 1,rightBracket);
                PriorityResult::CalculateBracketScore(calcStr,customerOrder,businessType,macroPlan);
                // æˆªå– ) åŽçš„字符继续进行计算
                remindFormula := remindFormula.SubString( rightBracket,remindFormula.Length());
            }
            else
            {
                // ä¸æ˜¯ç¬¦å· ç›´æŽ¥èŽ·å–è®¡ç®—åŽçš„æ•°å€¼
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan);
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score);
            }
    }
    // æ²¡æœ‰åŒ¹é… å…¬å¼è®¡ç®—完成
    return lastScore;
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetDetailsValue (
  CustomerOrder customerOrder,
  String formula,
  MacroPlan macroPlan
) as Real
{
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    value := 0.0;
    priorityFactor := null( PriorityFactor);
    traverse( macroPlan,PriorityFactor,p)
    {
         if( formula.StartsWith( p.Name()) )
         {
            priorityFactor := p;
         }
    }
    if( "客户策略" =  priorityFactor.Name())
    {
         obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "客户策略" and p.GradingName() = customerOrder.CustomerPolicy());
         value := priorityFactor.Coefficient() * obj.GradeTarget();
    }
    if( "大张盈利水平" =  priorityFactor.Name())
    {
         obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "大张盈利水平" and  p.GradingName() = customerOrder.SheetProfitability());
         value := priorityFactor.Coefficient() * obj.GradeTarget();
    }
    if( "DOI" =  priorityFactor.Name())
    {
         // DOI数据暂时缺少
         value := 1;
    }
    if( "DSI" =  priorityFactor.Name())
    {
         // DOI数据暂时缺少
         value := 1;
    }
    if( "细分市场等级" =  priorityFactor.Name())
    {
         obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "细分市场等级" and p.GradingName() = customerOrder.SegmentPriority());
         value := priorityFactor.Coefficient() * obj.GradeTarget();
    }
    if( "需求类型" =  priorityFactor.Name())
    {
        // æœ‰é¢„测 æ— é¢„测 çº¯é¢„测
         obj := selectobject( priorityFactor,PriorityFactorDetails,p,p.GradingName() = customerOrder.OrderType());
         value := priorityFactor.Coefficient() * obj.GradeTarget();
    }
    if( "客户等级" =  priorityFactor.Name())
    {
         // é€šè¿‡æ•°æ®æ¹–计算客户等级
         value := 1;
    }
    if( "订单下单时间" =  priorityFactor.Name())
    {
         // ä¸‹å•æ—¶é—´
         orderTime := customerOrder.OrderTime();
         days := orderTime.TotalInDays() - customerOrder.EndDate().TotalInDays();
         obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "订单下单时间" and days >= [Number]p.GradingName());
         value := priorityFactor.Coefficient() * obj.GradeTarget();
    }
    return value;
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetRemindFormula (
  String formula,
  MacroPlan macroPlan
) as String
{
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    str := "";
    traverse( macroPlan,PriorityFactor,p)
    {
         if( formula.StartsWith( p.Name()) )
         {
              str := formula.SubString( 0 + p.Name().Length(),formula.Length());
         }
    }
    return str;
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CalculatePriorityResult (
  CustomerOrders customerOrders,
  String priorityPolicyName,
  String businessType,
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    // è®¡ç®—客户订单的优先级得分 å›žå¡«æƒé‡æ•°æ® ç”Ÿæˆæ–°çš„Priority明细数据
    traverse( customerOrders,Elements,e)
    {
         // äº‹ä¸šéƒ¨ä¿¡æ¯
         businessType := e.BusinessType();
         // èŽ·å–å¯¹åº”äº‹ä¸šéƒ¨è®¡ç®—å…¬å¼
         priorityPolicys := selectobject( macroPlan,PriorityPolicy,p,p.BusinessType() = businessType and p.Name() = priorityPolicyName);
         formula := priorityPolicys.Formula();
         // é€’归处理计算公式 èŽ·å–å½“å‰è®¢å•çš„å¾—åˆ†
         value := PriorityResult::CalculateScore( formula,e,businessType,macroPlan,0.0);
         // ç”Ÿæˆä¼˜å…ˆçº§å› å­è·‘分结果
         priorityResult := macroPlan.PriorityResult(relnew,CustomerOrderID := e.ID(),BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                     DemandDate := e.EndDate(),ProductID := e.ProductID(),Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),
                                                     StockingPointID := e.StockingPointID(),UnitOfMeasureName := e.UnitOfMeasureName()
                                                     );
         // åˆ¤æ–­æ˜¯é›†å›¢ è¿˜æ˜¯äº‹ä¸šéƒ¨
         if( businessType.FindString( "集团",0 ) <> -1)
         {
              priorityResult.PriorityResultGroupDetail( relnew,BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                        DemandDate := e.EndDate(),PriorityPolicyName := priorityPolicyName,PriorityResultScore := value,
                                                        Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),StockingPointID := e.StockingPointID(),
                                                        UnitOfMeasureName := e.UnitOfMeasureName(),PriorityTotalScore := value
                                                        );
         }
         else
         {
               priorityResult.PriorityResultBusinessTypeDetail( relnew,BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                                DemandDate := e.EndDate(),PriorityPolicyName := priorityPolicyName,PriorityResultScore := value,
                                                                Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),StockingPointID := e.StockingPointID(),
                                                                UnitOfMeasureName := e.UnitOfMeasureName(),PriorityTotalScore := value
                                                                );
         }
    }
    // ä¼˜å…ˆçº§å› å­å¤„理完成后 æŽ’序回填数据
    resultList := selectsortedset( macroPlan,PriorityResult,result,
                                   true,
                                   result.PriorityResultScore()
                                   )
    priorityValue := 1;
    traverse( resultList,Elements,e)
    {
        obj := selectobject( customerOrders,Elements,order,
                             order.ID() = e.CustomerOrderID()
                             );
        obj.PriorityName([String]priorityValue);
        // åˆ›å»ºä¼˜å…ˆçº§æ•°æ®
        macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
        priorityValue := priorityValue + 1;
    }
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def
@@ -15,9 +15,6 @@
    businessType := DataHolderBusinessType.Data().BusinessTypeName();
    DataHolderBusinessType.Data().Commit();
    
    // PriorityFactor
    PriorityFactor::InitData( MacroPlan,businessType);
    this.Close();
  *]
}
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def
@@ -16,7 +16,7 @@
        Title: 'Filling'
      ]
    }
    Component MenuTest
    Component MenuRefresh
    {
      #keys: '[414382.0.415603149]'
      BaseType: 'WebMenu'
@@ -24,7 +24,7 @@
      [
        Image: 'ADD2'
        Taborder: 4
        Title: 'Test'
        Title: '刷新'
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuTest_OnClick.def ÐÞ¸Ä
@@ -1,17 +1,17 @@
Quintiq file version 2.0
#parent: ListCustomerAndFillingCapacityOrder
Response OnClick () id:Response_ListCustomerAndFillingCapacityOrder_MenuTest_OnClick
Response OnClick () id:Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick
{
  #keys: '[414382.0.415724061]'
  CanBindMultiple: false
  DefinitionID => /ListCustomerAndFillingCapacityOrder/Responsedef_ListCustomerAndFillingCapacityOrder_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuTest'
  Initiator: 'MenuRefresh'
  QuillAction
  {
    Body:
    [*
      CustomerAndForecastOrder::CreateTestData( MacroPlan);
      CustomerAndForecastOrder::RefreshData(  MacroPlan,GlobalOTDTable);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def