From 110846d23e6d86ad6fb883836640dc32b39ea86e Mon Sep 17 00:00:00 2001
From: renhao <renhui.hao@capgemini.com>
Date: 星期三, 20 九月 2023 13:55:59 +0800
Subject: [PATCH] Merge branch 'dev_release'
---
_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl | 3
_Main/BL/Type_MappingProduct/TypeIndex_MappingProductTypeIndex.qbl | 4
_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl | 5
_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting#576.qbl | 16 +
_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl | 28 ++-
_Main/BL/Type_MacroPlan/Method_DeleteSnaityCheck.qbl | 21 +++
_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl | 11
_Main/BL/Type_MacroPlan/Method_ApiLanesData.qbl | 2
_Main/BL/Type_MappingOperation/TypeIndex_MappingOperationTypeIndex.qbl | 18 +-
_Main/BL/EDI/Broker_Broker_OTD_BaseConversionFactor.qbl | 4
_Main/BL/Type_Product_MP/StaticMethod_CreateOrUpdate.qbl | 11 +
_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl | 45 +++---
_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl | 110 ++++++++++++---
_Main/BL/Type_MappingOperation/Attribute_SequenceNumber.qbl | 1
_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl | 7
_Main/BL/EDI/Broker_Broker_OTD_Operation.qbl | 1
_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl | 31 ++-
_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataSupplyPurchase.qbl | 19 +-
_Main/BL/EDI/Broker_Broker_OTD_Product.qbl | 1
_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl | 2
_Main/BL/Type_Product_MP/Attribute_KeyProduct.qbl | 7 +
_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl | 18 ++
_Main/BL/Type_Product_MP/Attribute_BusinessTypeCommon.qbl | 7 +
_Main/BL/Type_MappingProduct/Attribute_BusinessType.qbl | 1
24 files changed, 262 insertions(+), 111 deletions(-)
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_BaseConversionFactor.qbl b/_Main/BL/EDI/Broker_Broker_OTD_BaseConversionFactor.qbl
index 7f8c525..4bca9ec 100644
--- a/_Main/BL/EDI/Broker_Broker_OTD_BaseConversionFactor.qbl
+++ b/_Main/BL/EDI/Broker_Broker_OTD_BaseConversionFactor.qbl
@@ -34,10 +34,6 @@
OthersMayFlushTable: true
OthersMayInsertRow: true
Parameters: '/owner="YUXTEST"'
- PrimaryKeyColumns: ISENABLED
- PrimaryKeyColumns: PRODUCTID
- PrimaryKeyColumns: SOURCEUNITOFMEASURENAME
- PrimaryKeyColumns: TARGETUNITOFMEASURENAME
RecordModificationHintStrategy: 'None'
EDIODBCLinkColumn FACTOR
{
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_Operation.qbl b/_Main/BL/EDI/Broker_Broker_OTD_Operation.qbl
index 64aa83d..e269f2f 100644
--- a/_Main/BL/EDI/Broker_Broker_OTD_Operation.qbl
+++ b/_Main/BL/EDI/Broker_Broker_OTD_Operation.qbl
@@ -15,6 +15,7 @@
PrimaryKeyColumns: PlantName
PrimaryKeyColumns: ProcessSection
PrimaryKeyColumns: ProductID
+ PrimaryKeyColumns: SequenceNumber
TargetType: MappingOperation
TypeIndex: MappingOperationTypeIndex
EDIMLColumn ActualCapacity { Attribute: ActualCapacity ValueType: Real }
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl b/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl
index 15ca8ab..7bcabef 100644
--- a/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl
+++ b/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl
@@ -9,6 +9,7 @@
{
EDIMLTable MappingProduct
{
+ PrimaryKeyColumns: BusinessType
PrimaryKeyColumns: ID
TargetType: MappingProduct
TypeIndex: MappingProductTypeIndex
diff --git a/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl b/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl
index 6d55643..0c19698 100644
--- a/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl
+++ b/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl
@@ -1,7 +1,8 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateLaneFromJson (
- JSON datarow
+ JSON datarow,
+ MacroPlan macroplan
) as Lane
{
Description: 'Read the json data and use it to create lane data'
@@ -14,6 +15,11 @@
userleadtime := datarow.Get( "userleadtime" );
processingtime := Duration::Zero();
+ unitofmeasurename := "PCS";
+ currencyid := "CNY";
+ startdate := Date::Date( 1900, 1, 1 );
+ enddate := Date::Date( 9999, 12, 31 );
+ capacitytype := "Transport quantity";
if( userleadtime.IsNull() )
{
processingtime := Duration::Zero();
@@ -24,6 +30,16 @@
};
unit := Unit::FindUnitTypeIndex( unitid );
+ if( isnull( unit)){
+ unit :=macroplan.Unit( relnew,
+ ID := unitid,
+ Name := unitid,
+ UnitOfMeasureName := unitofmeasurename,
+ CurrencyID := currencyid,
+ StartDate := startdate,
+ EndDate := enddate,
+ CapacityType := capacitytype );
+ }
result := Lane::CreateLane( unit, id, name, processingtime);
diff --git a/_Main/BL/Type_MacroPlan/Method_ApiLanesData.qbl b/_Main/BL/Type_MacroPlan/Method_ApiLanesData.qbl
index 0561aae..0020767 100644
--- a/_Main/BL/Type_MacroPlan/Method_ApiLanesData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_ApiLanesData.qbl
@@ -14,7 +14,7 @@
for( i:=0; i<data_length; i++ )
{
datarow := data.Get( i );
- a := Lane::CreateLaneFromJson( datarow );
+ a := Lane::CreateLaneFromJson( datarow ,this);
updates.Add( a );
}
origindataset := selectset( this, Unit.Lane, l, true );
diff --git a/_Main/BL/Type_MacroPlan/Method_DeleteSnaityCheck.qbl b/_Main/BL/Type_MacroPlan/Method_DeleteSnaityCheck.qbl
new file mode 100644
index 0000000..d5d02e1
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DeleteSnaityCheck.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method DeleteSnaityCheck
+{
+ TextBody:
+ [*
+ // renhao Sep-13-2023 (created)
+ //鍒犻櫎娌℃湁姹囩巼鐨勮揣甯�
+ traverse( this,Currency_MP,currency,not currency.IsBase() and currency.CurrencyRate_MP( relsize ) = 0 ){
+ currency.Delete();
+ }
+ //鍒犻櫎娌℃湁浜у搧鐨勮溅閬�
+ traverse( this,Unit.Lane,lane,not isnull( lane) and lane.ProductInLane(relsize )=0 ){
+ lane.Delete();
+ }
+ //鍒犻櫎娌℃湁鐢ㄥ埌浜у搧鍜宭ane鐨勫簱瀛樼偣
+ traverse( this,StockingPoint_MP,stock,stock.ProductInStockingPoint_MP(relsize ) = 0 ){
+ stock.Delete();
+ }
+ *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl b/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl
index 767523f..c71e147 100644
--- a/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl
@@ -6,51 +6,111 @@
[*
// Administrator Sep-1-2023 (created)
- unitOfMeasure_MP := UnitOfMeasure_MP::FindByName( this, "PCS" );
- if ( isnull( unitOfMeasure_MP ) ) {
- unitOfMeasure_MP := UnitOfMeasure_MP::Create( this, "PCS", false, false );
- }
-
//Set the Default values
unitofmeasurename := "PCS";
+ currencyid := "CNY";
+ startdate := Date::Date( 1900, 1, 1 );
+ enddate := Date::Date( 9999, 12, 31 );
capacitytype := "Transport quantity";
- if ( isnull( Unit::FindById( this, "绌鸿繍" ) ) ) {
- Unit::Create( "绌鸿繍", this, "绌鸿繍", unitOfMeasure_MP, null( Unit ), capacitytype, "", null( SupplyChainView ), 0, 0, false );
- }
+ if( isnull( Unit::FindById( this, "绌鸿繍" ) ) ){
+ this.Unit( relnew,
+ ID := "绌鸿繍",
+ Name := "绌鸿繍",
+ UnitOfMeasureName := unitofmeasurename,
+ CurrencyID := currencyid,
+ StartDate := startdate,
+ EndDate := enddate,
+ CapacityType := capacitytype );
+ }
- if ( isnull( Unit::FindById( this, "搴撳瓨浜嬪姟澶勭悊" ) ) ) {
- Unit::Create( "搴撳瓨浜嬪姟澶勭悊", this, "搴撳瓨浜嬪姟澶勭悊", unitOfMeasure_MP, null( Unit ), capacitytype, "", null( SupplyChainView ), 0, 0, false );
+ if( isnull( Unit::FindById( this, "搴撳瓨浜嬪姟澶勭悊" ) ) ){
+ this.Unit( relnew,
+ ID := "搴撳瓨浜嬪姟澶勭悊",
+ Name := "搴撳瓨浜嬪姟澶勭悊",
+ UnitOfMeasureName := unitofmeasurename,
+ CurrencyID := currencyid,
+ StartDate := startdate,
+ EndDate := enddate,
+ CapacityType := capacitytype );
}
unitofmeasurename := "PCS";
+ name := "鎵嬪姩鍒涘缓搴撳瓨鐐�";
+ currencyname := "CNY";
+ isplannedinfinite := false;
+ datestart := Date::Construct(1900, 1, 1) ;
+ dateend := Date::Construct(9999, 12, 31);
+ groupname := " ";
+ description := " ";
+ isfromdb := true;
- if ( isnull( StockingPoint_MP::FindById( this, "F13_FG_STOCK" ) ) ) {
- StockingPoint_MP::Create( "F13_FG_STOCK", this, null( Unit ), "F13_FG_STOCK", null( SupplyChainView ), 0, 0, false );
+ if( isnull( StockingPoint_MP::FindById( this, "F13_FG_STOCK" ) ) ){
+ StockingPoint_MP::Create( this,
+ "F13_FG_STOCK",
+ "F13",
+ name,
+ unitofmeasurename,
+ currencyname,
+ isplannedinfinite,
+ datestart,
+ dateend,
+ groupname,
+ description,
+ isfromdb );
}
- if ( isnull( StockingPoint_MP::FindById( this, "H10_SA_STOCK" ) ) ) {
- StockingPoint_MP::Create( "H10_SA_STOCK", this, null( Unit ), "H10_SA_STOCK", null( SupplyChainView ), 0, 0, false );
+ if( isnull( StockingPoint_MP::FindById( this, "H10_SA_STOCK" ) ) ){
+ StockingPoint_MP::Create( this,
+ "H10_SA_STOCK",
+ "H10",
+ name,
+ unitofmeasurename,
+ currencyname,
+ isplannedinfinite,
+ datestart,
+ dateend,
+ groupname,
+ description,
+ isfromdb );
}
- if ( isnull( StockingPoint_MP::FindById( this, "Q10_FG_STOCK" ) ) ) {
- StockingPoint_MP::Create( "Q10_FG_STOCK", this, null( Unit ), "Q10_FG_STOCK", null( SupplyChainView ), 0, 0, false );
+ if( isnull( StockingPoint_MP::FindById( this, "Q10_FG_STOCK" ) ) ){
+ StockingPoint_MP::Create( this,
+ "Q10_FG_STOCK",
+ "Q10",
+ name,
+ unitofmeasurename,
+ currencyname,
+ isplannedinfinite,
+ datestart,
+ dateend,
+ groupname,
+ description,
+ isfromdb );
}
- if ( isnull( Currency_MP::FindById( this, "CNY" ) ) ) {
- Currency_MP::Create( "CNY", this, "CNY", "", false, false );
- }
+ existcurrency := Currency_MP::FindById( this, "CNY" );
+ if( isnull( existcurrency ) ){
+ Currency_MP::CreateCurrency( this, "CNY", "CNY", "", true );
+ currency := Currency_MP::FindById( this, "EUR" );
+ currency.IsBase(false);
+ Transaction::Transaction().Propagate();
+ }
isproductcatagory := false;
isfromdb := false;
- if ( isnull( ProductLevel_MP::FindProductLevelTypeIndex( "1" ) ) ) {
+ existproductlevel := ProductLevel_MP::FindProductLevelTypeIndex( "2" );
+ if( isnull( existproductlevel ) ){
ProductLevel_MP::Create( "1", isproductcatagory, this, isfromdb );
- }
- if ( isnull( ProductLevel_MP::FindProductLevelTypeIndex( "2" ) ) ) {
ProductLevel_MP::Create( "2", isproductcatagory, this, isfromdb );
- }
- if ( isnull( ProductLevel_MP::FindProductLevelTypeIndex( "3" ) ) ) {
ProductLevel_MP::Create( "3", isproductcatagory, this, isfromdb );
- }
+ }
+
+ existsalestlevel := SalesLevel_MP::FindSalesLevelTypeIndex( "2")
+ if( isnull( existsalestlevel ) ){
+ SalesLevel_MP::Create( "1",this,isfromdb);
+ SalesLevel_MP::Create( "2",this,isfromdb);
+ }
*]
}
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
index 873ed35..7ec0576 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
@@ -17,12 +17,13 @@
}
queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
- listToDeal := selectset( listToDeal, Elements, item, item.OrderDate() >= queryStartDate and item.OrderDate() <= queryEndDate, not isnull( Product_MP::FindById( this, item.ProductID() ) ) and not isnull( StockingPoint_MP::FindById( this, item.StockPointID() ) ) and not isnull( SalesSegment_MP::FindByName( this, item.SalesSegmentName() ) ) );
+ listToDeal := selectset( listToDeal, Elements, item, item.OrderDate() >= queryStartDate /*and item.OrderDate() <= queryEndDate*/, not isnull( Product_MP::FindById( this, item.ProductID() ) ) and not isnull( StockingPoint_MP::FindById( this, item.StockPointID() ) ) and not isnull( SalesSegment_MP::FindByName( this, item.SalesSegmentName() ) ) );
totalcount := listToDeal.Size();
info( "CustomerOrder has " + totalcount.AsQUILL() + " rows in total" );
count := 0;
+ priorityName :="Normal";
// 澶勭悊
traverse( listToDeal, Elements, item ) {
count := count + 1;
@@ -33,7 +34,7 @@
// info( item.ProductID().AsQUILL() );
CustomerOrder::CreateOrUpdate( this, item.CurrencyID(), item.Customer(), item.CustomerID(), item.ID(),
item.OrderDate(), item.OrderID(), item.OrderLineID(), item.Price(),
- item.PriorityName(), item.ProductID(),
+ priorityName, item.ProductID(),
item.StockPointID(),
item.SalesSegmentName(),
item.Quantity(), item.UnitOfMeasureName(), item.OrderType(), item.IsAvailable());
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
index ea2ad61..ead549d 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
@@ -8,9 +8,11 @@
TextBody:
[*
// renhao Aug-14-2023 (created)
-
- listtodeal := selectset( this,MappingExternalSupply,externalSupply, true );
+ queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
+ queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
+ listtodeal := selectset( this,MappingExternalSupply,externalSupply, externalSupply.UserQuantity()>0 and externalSupply.Date() >= queryStartDate /*and externalSupply.Date() <= queryEndDate*/);
totalcount := listtodeal.Size();
+ description := "鍦ㄩ�斿湪鍒�";
info( "ExternalSupply has " + totalcount.AsQUILL() + " rows in total" );
count := 0;
@@ -18,12 +20,14 @@
count := count + 1;
if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
info( "Now is dealing with the " + count.AsQUILL() + "ExternalSupply " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
- }
- product := select( this,MappingProduct,product,product.ID() = externalSupply.ProductID() and product.KeyProduct() = nuclear,true);
+ }
+ product := select( this,MappingProduct,product,product.ID() = externalSupply.ProductID(),true);
+
if( not isnull( product)){
- productMP := select( this,Product_MP,productMP,productMP.ID() = externalSupply.ProductID() ,true);
+ productMP := Product_MP :: FindProductTypeIndex( externalSupply.ProductID());
stockingpoint := select( this,StockingPoint_MP,st,st.ID() = externalSupply.StockingPointID(),true);
+ if( not isnull( stockingpoint) and not isnull( productMP)){
if( not isnull(businessTypes)){
for( i :=0 ;i < businessTypes.Size();i++ ){
@@ -34,25 +38,23 @@
stockingpoint,
externalSupply.Date(),
externalSupply.ManufacturedDate(),
- externalSupply.UserQuantity(),"鍦ㄩ�斿湪鍒�");
+ externalSupply.UserQuantity(),description);
}
}
}else{
- if( not isnull( stockingpoint) and not isnull( productMP)){
- InventorySupply::CreateOrUpdate( externalSupply.ID(),
+
+ InventorySupply::CreateOrUpdate( externalSupply.ID(),
productMP,
stockingpoint,
externalSupply.Date(),
externalSupply.ManufacturedDate(),
- externalSupply.UserQuantity(),"鍦ㄩ�斿湪鍒�");
- }
+ externalSupply.UserQuantity(),description);
+ }
}
- }else{
- info( "Invaild product" );
- }
+ }
}
*]
}
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
index 903aea0..47e8597 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
@@ -11,9 +11,9 @@
// 寰呭鐞嗘暟鎹�
listToDeal := construct( structured[MappingForecast] );
if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
- listToDeal := selectset( this, MappingForecast, item, true );
+ listToDeal := selectset( this, MappingForecast, item, item.Quantity() > 0 );
} else {
- listToDeal := selectset( this, MappingForecast, item, businessTypes.Find( item.BusinessType() ) <> -1 );
+ listToDeal := selectset( this, MappingForecast, item, businessTypes.Find( item.BusinessType() ) <> -1 and item.Quantity()>0 );
}
queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
@@ -23,6 +23,7 @@
info( "Forecast has " + totalcount.AsQUILL() + " rows in total" );
count := 0;
+ priorityName := "Normal";
// 澶勭悊
traverse( listToDeal, Elements, item ) {
count := count + 1;
@@ -31,7 +32,7 @@
}
// if( not isnull( Product_MP::FindById( this, item.ProductID() ) ) ){
Forecast::CreateOrUpdate( this,
- item.ProductID(), item.SalesSegmentName(), item.StockingPointID(), item.PriorityName(),
+ item.ProductID(), item.SalesSegmentName(), item.StockingPointID(), priorityName,
item.CurrencyID(), item.UnitOfMeasureName(),
item.ID(), item.StartDate(), item.EndDate(), item.Quantity(), item.Price());
// }else{
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
index 892f5ef..b807827 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
@@ -12,16 +12,17 @@
keyProductList := construct( Strings );
if( isKeyProduct ) {
- keyProductList := selectuniquevalues( this, MappingProduct, item, item.KeyProduct(), item.ID() );
+ keyProductList := selectuniquevalues( this, MappingProduct, item, item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�", item.ID() );
}
bomList := selectsortedset( this, MappingBOM, item,
ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0,
true,
// businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
businessTypes.Find( item.BusinessType() ) >= 0 )
- and ifexpr( isKeyProduct,
- keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
- true ),
+ // and ifexpr( isKeyProduct,
+ // keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
+ // true )
+ ,
item.OrganCode() + "_" + item.ProductCode() + "_" + item.ProcessSection() );
// 鎸塺outing鍙妑outingStep鍒嗙粍
routingIds := selectuniquevalues( bomList, Elements, item, true, item.OrganCode() + "_" + item.ProductCode() );
@@ -29,14 +30,16 @@
routingRows := selectset( bomList, Elements, item, true, routingId = item.OrganCode() + "_" + item.ProductCode() );
if( routingRows.Size() > 0 ) {
firstRow := routingRows.Element( 0 );
- stockingPointId := firstRow.OrganCode() + "_" + firstRow.ProductType() + "_Stock";
- inputStockingPointId := firstRow.OrganCode() + "_" + firstRow.ComponentType() + "_Stock";
+ // stockingPointId := firstRow.OrganCode() + "_" + firstRow.ProductType() + "_Stock";
+ // inputStockingPointId := firstRow.OrganCode() + "_" + firstRow.ComponentType() + "_Stock";
+ stockingPointId := firstRow.OrganCode() + "_Stock";
+
// ========妫�鏌�========
product := Product_MP::FindProductTypeIndex( firstRow.ProductCode() );
if( not isnull( product ) ) {
// error( "product : " + firstRow.ProductCode() + " not found" );
stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( stockingPointId );
- inputStockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( inputStockingPointId );
+
// info( stockingPointId.AsQUILL() );
// if( isnull( stockingPoint ) ) {
// error( "stockingPoint : " + stockingPointId + " not found" );
@@ -55,8 +58,14 @@
// ========鍒嗙粍澶勭悊杈撳叆========
}
- if( not isnull( inputStockingPoint)){
- this.MappingOperationBOMDataRouting( routing,routingRows,inputStockingPoint,keyProductList);
+ if( not isnull( stockingPoint)){
+ if( isKeyProduct){
+ keyRows := selectset( routingRows,Elements,routingrow,keyProductList.Find( routingrow.ComponentCode())>=0);
+ this.MappingOperationBOMDataRouting( routing,keyRows);
+ }else{
+ this.MappingOperationBOMDataRouting( routing,routingRows);
+ }
+
}
}
}
@@ -64,9 +73,9 @@
}
if( createPurchaseSupplyMaterial ) {
toCreateBomList := selectuniquevalues( bomList, Elements, item,
- item.ProductType() = "P", item.OrganCode() + item.ComponentCode());
+ item.ComponentType() = "P", item.OrganCode() + item.ComponentCode());
traverse( toCreateBomList, Elements, key ) {
- boms := selectset( bomList, Elements, item, item.ProductType() = "P" and item.OrganCode() + item.ComponentCode() = key );
+ boms := selectset( bomList, Elements, item, item.ComponentType() = "P" and item.OrganCode() + item.ComponentCode() = key );
bom := boms.First();
this.MappingOperationBOMDataSupplyPurchase( bom.OrganCode(), bom.ComponentCode(), bom.ComponentType());
}
diff --git "a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting\043576.qbl" "b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting\043576.qbl"
index 059c6c9..e661d1f 100644
--- "a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting\043576.qbl"
+++ "b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting\043576.qbl"
@@ -2,9 +2,7 @@
#parent: #root
Method MappingOperationBOMDataRouting (
Routing routing,
- MappingBOMs routingRows,
- StockingPoint_MP stockingPoint,
- Strings keyProductIds
+ MappingBOMs routingRows
)
{
TextBody:
@@ -32,6 +30,9 @@
if( not isnull( component ) ) {
// error( "component : " + noAlterRow.ComponentCode() + " not found" );
// 杩炴帴浜у搧涓巓peration
+ // inputStockingPointId := noAlterRow.OrganCode() + "_" + noAlterRow.ComponentType() + "_Stock";
+ inputStockingPointId := noAlterRow.OrganCode() + "_Stock";
+ stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( inputStockingPointId);
pisp := ProductInStockingPoint_MP::CreateIfNotFound( component, stockingPoint );
trash := construct( OperationBOMs );
operationBOM := toLink.LinkProduct( component, true, BaseOperationLink::GetGroupID( toLink, true, false ), pisp,
@@ -54,6 +55,9 @@
// }
traverse( routingStep, Operation, toLink ) {
// 杩炴帴浜у搧涓巓peration
+ // inputStockingPointId := firstAlterRow.OrganCode() + "_" + firstAlterRow.ComponentType() + "_Stock";
+ inputStockingPointId := firstAlterRow.OrganCode() + "_Stock";
+ stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( inputStockingPointId);
pisp := ProductInStockingPoint_MP::CreateIfNotFound( component, stockingPoint );
trash := construct( OperationBOMs );
mainBOM := toLink.LinkProduct( component, true, BaseOperationLink::GetGroupID( toLink, true, false ), pisp,
@@ -67,13 +71,15 @@
alterProd := Product_MP::FindById( this, alterRow.AlternativeMaterialCode() );
if( not isnull( alterProd ) ) {
// error( "alterProd : " + alterRow.AlternativeMaterialCode() + " not found" );
- stockingPointIdAlter := alterRow.OrganCode() + "_" + alterRow.ProductType() + "_Stock";
+ // stockingPointIdAlter := alterRow.OrganCode() + "_" + alterRow.ComponentType() + "_Stock";
+ stockingPointIdAlter := alterRow.OrganCode() + "_Stock";
stockingPointAlter := StockingPoint_MP::FindById( this, stockingPointIdAlter );
if( isnull( stockingPointAlter ) ) {
error( "stockingPoint : " + stockingPointIdAlter + " not found" );
}
pispAlter := ProductInStockingPoint_MP::CreateIfNotFound( alterProd, stockingPointAlter );
- mainInput := toLink.LastOperationInput();
+ //mainInput := toLink.LastOperationInput();
+ mainInput := select( toLink,OperationInput,operationInut,operationInut.ProductID()=alterRow.ComponentCode());
trash := construct( OperationBOMs );
if( not isnull( mainInput ) ) {
alterBom := mainInput.Operation().LinkPISP( pispAlter, true, mainInput.OperationLinkGroupID(), trash );
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataSupplyPurchase.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataSupplyPurchase.qbl
index 6a24698..7ea305b 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataSupplyPurchase.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataSupplyPurchase.qbl
@@ -8,25 +8,26 @@
{
TextBody:
[*
- routingId := "PR_"+orgCode + "_" + productId;
- unitId := "渚涘簲鍟�";
- routingStepName := "Purchase";
- operationId := orgCode + "_PR_" + productId;
- routing := Routing::CreateOrUpdate( this, routingId );
- toDeleteSteps := selectset( routing, RoutingStep, routingStep, true );
- RoutingStep::Delete( toDeleteSteps );
- routingStep := RoutingStep::Create( routing, routingStepName, "", true );
+
product := Product_MP::FindById( this, productId );
if( isnull( product ) ) {
info( "product : " + productId + " not found" );
}
- stockingPointId := orgCode + "_" + productType + "_Stock";
+ stockingPointId := orgCode + "_Stock";
stockingPoint := StockingPoint_MP::FindById( this, stockingPointId );
if( isnull( stockingPoint ) ) {
info( "stockingPoint : " + stockingPointId + " not found" );
}
if( not isnull( product) and not isnull( stockingPoint)){
+ routingId := "PR_"+orgCode + "_" + productId;
+ unitId := "渚涘簲鍟�";
+ routingStepName := "Purchase";
+ operationId := orgCode + "_PR_" + productId;
+ routing := Routing::CreateOrUpdate( this, routingId );
+ toDeleteSteps := selectset( routing, RoutingStep, routingStep, true );
+ RoutingStep::Delete( toDeleteSteps );
+ routingStep := RoutingStep::Create( routing, routingStepName, "", true );
unit := Unit::FindById( this, unitId );
if( isnull( unit ) ) {
unit := this.Unit( relnew,
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
index 98be129..3713cc9 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
@@ -27,7 +27,7 @@
moperation.ProductID() = item.ProductID(),
moperation.SequenceNumber() ).SequenceNumber()
if( item.SequenceNumber() = maxsn ){
- listtodealwithmaxsn.Add( item );
+ listtodealwithmaxsn.Add( item );
}
}
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
index fa5aa3b..9a854ef 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
@@ -10,7 +10,7 @@
[*
// Administrator Aug-16-2023 (created)
// list to deal
- //info( "Get list to deal of product" );
+ info( "Get list to deal of product" );
listToDeal := construct( structured[MappingProduct] );
if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
@@ -22,10 +22,10 @@
}
} else {
if( iskeyproduct = true ){
- listToDeal := selectset( this, MappingProduct, item, item.KeyProduct() = true, businesstypes.Find( item.BusinessType()) > 0 );
- }
+ listToDeal := selectset( this, MappingProduct, item, item.KeyProduct() = true and businesstypes.Find( item.BusinessType()) >= 0 );
+ }
else{
- listToDeal := selectset( this, MappingProduct, item, businesstypes.Find( item.BusinessType()) > 0 );
+ listToDeal := selectset( this, MappingProduct, item, businesstypes.Find( item.BusinessType()) >= 0 );
}
}
totalcount := listToDeal.Size();
@@ -38,7 +38,7 @@
"鍏ㄩ儴鐗╂枡浜у搧",
"PCS",
"鍏ㄩ儴鐗╂枡浜у搧",
- 0.0
+ 0.0,false,false
);
count := 0;
// Get the ProductMajorType list & ProductSubclassType list
@@ -54,7 +54,7 @@
item.ProductMajorType(),
"PCS",
item.ProductMajorType(),
- 0.0
+ 0.0,false,false
);
}
productmajortype := item.ProductMajorType();
@@ -62,29 +62,30 @@
productmajortype := "鍏ㄩ儴鐗╂枡浜у搧";
}
- if( not item.ProductSubclassType() = "" ){
- Product_MP::CreateOrUpdate( this,
- item.ProductSubclassType(),
- productmajortype,
- item.ProductSubclassType(),
- "PCS",
- item.ProductSubclassType(),
- 0.0
- );
- }
- productsubclasstype := item.ProductSubclassType();
- if( productsubclasstype="" ){
- productsubclasstype := productmajortype;
- }
+ // if( not item.ProductSubclassType() = "" ){
+ // Product_MP::CreateOrUpdate( this,
+ // item.ProductSubclassType(),
+ // productmajortype,
+ // item.ProductSubclassType(),
+ // "PCS",
+ // item.ProductSubclassType(),
+ // 0.0,false,false
+ // );
+ // }
+ // productsubclasstype := item.ProductSubclassType();
+ // if( productsubclasstype="" ){
+ // productsubclasstype := productmajortype;
+ // }
if( not item.ID() = "" ){
Product_MP::CreateOrUpdate( this,
item.ID(),
- productsubclasstype,
+ productmajortype,
item.ID(),
item.UnitOfMeasureName(),
item.Name(),
- item.ShelfLife()
+ item.ShelfLife(),
+ item.KeyProduct(),item.IsCommon()
);
}
}
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
index b5618c6..7c856ff 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
@@ -22,6 +22,7 @@
//Set the Default values
unitofmeasurename := "PCS";
+ infinite := "Infinite";
capacitytype := "Transport quantity";
// Get the root data
@@ -29,7 +30,7 @@
"澶╅┈闆嗗洟",
"澶╅┈闆嗗洟",
"",
- capacitytype,
+ infinite,
unitofmeasurename );
// Get the sub root data
@@ -37,14 +38,14 @@
"鐢熶骇",
"鐢熶骇",
"澶╅┈闆嗗洟",
- capacitytype,
+ infinite,
unitofmeasurename );
Unit::CreateOrUpdate( this,
"渚涘簲鍟�",
"渚涘簲鍟�",
"澶╅┈闆嗗洟",
- capacitytype,
+ infinite,
unitofmeasurename );
Unit::CreateOrUpdate( this,
@@ -65,7 +66,7 @@
item.OrganCode(),
OrgName,
"鐢熶骇",
- capacitytype,
+ infinite,
unitofmeasurename );
//Get the second level unit
@@ -74,7 +75,7 @@
secondlevelid,
secondlevelid,
item.OrganCode(),
- capacitytype,
+ infinite,
unitofmeasurename );
//Get the third level unit
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
index fe4e7a1..1375c53 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -140,6 +140,9 @@
// 璁㈠崟闇�姹�-18
CustomerOrder::DoSync( macroPlan, businessTypes );
+ //鍒犻櫎澶氫綑鎶ラ敊鏁版嵁-19
+ macroPlan.DeleteSnaityCheck();
+
//// todo 渚涘簲鍟嗚兘鍔�
//info( "ProviderCapacity::DoSync" )
diff --git a/_Main/BL/Type_MappingOperation/Attribute_SequenceNumber.qbl b/_Main/BL/Type_MappingOperation/Attribute_SequenceNumber.qbl
index 4fc6ea4..fed9689 100644
--- a/_Main/BL/Type_MappingOperation/Attribute_SequenceNumber.qbl
+++ b/_Main/BL/Type_MappingOperation/Attribute_SequenceNumber.qbl
@@ -3,5 +3,6 @@
Attribute SequenceNumber
{
#keys: '3[412960.0.86978408][412960.0.86978407][412960.0.86978409]'
+ IsReadOnly: true
ValueType: Number
}
diff --git a/_Main/BL/Type_MappingOperation/TypeIndex_MappingOperationTypeIndex.qbl b/_Main/BL/Type_MappingOperation/TypeIndex_MappingOperationTypeIndex.qbl
index 35ab7e4..2fc4aff 100644
--- a/_Main/BL/Type_MappingOperation/TypeIndex_MappingOperationTypeIndex.qbl
+++ b/_Main/BL/Type_MappingOperation/TypeIndex_MappingOperationTypeIndex.qbl
@@ -6,11 +6,7 @@
[
TypeIndexAttribute
{
- ModelElement: Line
- }
- TypeIndexAttribute
- {
- ModelElement: BusinessType
+ ModelElement: ProcessSection
}
TypeIndexAttribute
{
@@ -18,7 +14,11 @@
}
TypeIndexAttribute
{
- ModelElement: OrganCode
+ ModelElement: BusinessType
+ }
+ TypeIndexAttribute
+ {
+ ModelElement: Line
}
TypeIndexAttribute
{
@@ -26,7 +26,11 @@
}
TypeIndexAttribute
{
- ModelElement: ProcessSection
+ ModelElement: SequenceNumber
+ }
+ TypeIndexAttribute
+ {
+ ModelElement: OrganCode
}
]
}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_BusinessType.qbl b/_Main/BL/Type_MappingProduct/Attribute_BusinessType.qbl
index 63b7d6b..1d3a4b3 100644
--- a/_Main/BL/Type_MappingProduct/Attribute_BusinessType.qbl
+++ b/_Main/BL/Type_MappingProduct/Attribute_BusinessType.qbl
@@ -3,5 +3,6 @@
Attribute BusinessType
{
#keys: '3[414480.0.61560268][414480.0.61560267][414480.0.61560269]'
+ IsReadOnly: true
ValueType: String
}
diff --git a/_Main/BL/Type_MappingProduct/TypeIndex_MappingProductTypeIndex.qbl b/_Main/BL/Type_MappingProduct/TypeIndex_MappingProductTypeIndex.qbl
index 6cd9f83..56be564 100644
--- a/_Main/BL/Type_MappingProduct/TypeIndex_MappingProductTypeIndex.qbl
+++ b/_Main/BL/Type_MappingProduct/TypeIndex_MappingProductTypeIndex.qbl
@@ -8,5 +8,9 @@
{
ModelElement: ID
}
+ TypeIndexAttribute
+ {
+ ModelElement: BusinessType
+ }
]
}
diff --git a/_Main/BL/Type_Product_MP/Attribute_BusinessTypeCommon.qbl b/_Main/BL/Type_Product_MP/Attribute_BusinessTypeCommon.qbl
new file mode 100644
index 0000000..b384b1d
--- /dev/null
+++ b/_Main/BL/Type_Product_MP/Attribute_BusinessTypeCommon.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessTypeCommon
+{
+ #keys: '3[414480.0.138606036][414480.0.138606035][414480.0.138606037]'
+ ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Product_MP/Attribute_KeyProduct.qbl b/_Main/BL/Type_Product_MP/Attribute_KeyProduct.qbl
new file mode 100644
index 0000000..6261b43
--- /dev/null
+++ b/_Main/BL/Type_Product_MP/Attribute_KeyProduct.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute KeyProduct
+{
+ #keys: '3[414480.0.138606008][414480.0.138606007][414480.0.138606009]'
+ ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Product_MP/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_Product_MP/StaticMethod_CreateOrUpdate.qbl
index 7d60ea3..2cc1d59 100644
--- a/_Main/BL/Type_Product_MP/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_Product_MP/StaticMethod_CreateOrUpdate.qbl
@@ -7,7 +7,9 @@
String name,
String unitofmeasurename,
String description,
- Real shelflife
+ Real shelflife,
+ Boolean keyproduct,
+ Boolean businesstypecommon
)
{
TextBody:
@@ -28,7 +30,7 @@
//info( productid );
if( isnull( product ) ){
- Product_MP::Create( owner,
+ product := Product_MP::Create( owner,
productid,
parentid,
name,
@@ -44,6 +46,9 @@
isexcludedfromfulfilmentkpis,
isfromdb
);
+
+ product.KeyProduct(keyproduct);
+ product.BusinessTypeCommon(businesstypecommon);
}else{
product.Update( productid,
name,
@@ -60,6 +65,8 @@
isexcludedfromfulfilmentkpis,
isfromdb
);
+ product.KeyProduct(keyproduct);
+ product.BusinessTypeCommon(businesstypecommon);
}
*]
}
--
Gitblit v1.9.3