clsImportProjectContractPositionCollectionBOM Property |
The quantity of this SubContractPosition will be calculated down into all sub positions. The quantity of the sub positions will be used as base quantity and the Quantity is the multiplication with the Quantity of the base position
The hiearchy can have multi levels.| PositionType | ContractQuantity | BaseQuantity | Remark |
|---|---|---|---|
| FixedPrice | 1 | not used | Initial position in the main contract. |
| SubContractPosition | 5 | not used | This object, where the CollectionBOM is used. |
| BOMHeader | 5 | not used | This Position Type is automatically created reading the childs in the CollectionBOM. The quantity is also aligned with the parent. |
| ItemAtFixedPrice | 15 | 3 | ContractQuantity=3 is the input. 3 is stored in BaseQuantity and 15 in ContractQuantity |
| ItemAtFixedPrice | 20 | 4 | ContractQuantity=4 is the input. 4 is stored in BaseQuantity and 20 in ContractQuantity |
| ServiceAtFixedPrice | 20 | 4 | ContractQuantity=4 is the input. 4 is stored in BaseQuantity and 20 in ContractQuantity |
Namespace: MARIInterface
/// <summary> /// Example creates a sub contract with one header and two childs AND a position in the parent contract with the reference /// </summary> /// <param name="lMainContractID"></param> /// <param name="sItemCode"></param> /// <returns></returns> public int CreateSubContractWithBOMHierarchy(string sProjectnumber) { // Main Contract // 1.0 eContractPositionType.FixedPrice // 1.1 eContractPositionType.SubContractPosition [Link to the header position of the sub contract] // Sub Contract // 1.0 eContractPositionType.BOMHeader // 1.1 eContractPositionType.ItemAtFixedPrice // 1.2 eContractPositionType.ItemAtFixedPrice clsImportProjectContract MainContract = CreateNewContract(sProjectnumber, "Example with BOM Hierarchy"); clsImportProjectContractPosition FixPos = NewContractPosition(MainContract, clsImportProjectContractPosition.eContractPositionType.FixedPrice, "220000", "All In One", 1); // 1. import fix price if (oMPInterface.bImportContractPosition(FixPos, clsImportBase.eImportMode.ValidateAndImport)) { //SubContract Position clsImportProjectContractPosition SubContractPos = NewContractPosition(MainContract, clsImportProjectContractPosition.eContractPositionType.SubContractPosition, "220001", "BOM 1", 2, "UKey 1000"); SubContractPos.CollectionBOM = new List<clsImportProjectContractPosition>(); SubContractPos.CollectionBOM.Add(NewContractPosition(MainContract, clsImportProjectContractPosition.eContractPositionType.ItemAtFixedPrice, "220002", "Item 1", 5, "UKey 1100")); SubContractPos.CollectionBOM.Add(NewContractPosition(MainContract, clsImportProjectContractPosition.eContractPositionType.ItemAtFixedPrice, "220003", "Item 2", 4, "UKey 1200")); // Store the reference to the fixed price position SubContractPos.ParentContractPosition = FixPos.ContractPositionID; //2. Import the SubContractPosition. Create a new sub contract and add all childs into the sub contract. if (oMPInterface.bImportContractPosition(SubContractPos, clsImportBase.eImportMode.ValidateAndImport)) { return MainContract.ContractID; } else { Assert.False(true, oMPInterface.oErrors.PrintErrors(true)); } } else { Assert.False(true, oMPInterface.oErrors.PrintErrors(true)); } return 0; } private clsImportProjectContract CreateNewContract(string sProject, string sContractName) { clsImportProjectContract oContract = new clsImportProjectContract(); oContract.ProjectNumber = sProject; // existing project P100005 oContract.ContractNumber = oMPInterface.sGetNewContractNumber(sProject); // new (visible) contract number based on automaric creation settings oContract.Description = sContractName + " " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString(); oContract.ContractDate = DateTime.Now; oContract.CompanyID = 1; oContract.CustomerCode = "10006"; // valid customer number OCRD.CardCode oContract.ContractType = clsImportProjectContract.eContractTypes.IndividualContract; oContract.ValidPeriodFrom = 2016001; // Starting period for the contract YYYYMMM if (oMPInterface.bImportContract(oContract, clsImportBase.eImportMode.ValidateAndImport)) { return oContract; } else { Assert.False(true, oContract.IMPORT_ErrorMessage); return null; } } private clsImportProjectContractPosition NewContractPosition(clsImportProjectContract Contract, clsImportProjectContractPosition.eContractPositionType nType, string sItemCode, string sDescription, decimal cQuantity = 1, string sExternalNumber = null) { clsImportProjectContractPosition oPos = new clsImportProjectContractPosition(); oPos.PositionTyp = nType; oPos.ContractID = Contract.ContractID; oPos.Matchcode = sDescription; oPos.Description1 = sDescription; oPos.ContractQuantity = cQuantity; oPos.ItemCode = sItemCode; oPos.ExternalNumber = sExternalNumber; return oPos; }