Click or drag to resize

clsImportProjectContractPositionCollectionBOM Property

Using this List will allows to create a Bill Of Material Hierarchy. The base line (this object) must be of the type SubContractPosition underneath a FixedPrice or BOMHeader (ParentContractPosition>0).

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.
PositionTypeContractQuantityBaseQuantityRemark
FixedPrice   1not usedInitial position in the main contract.
  SubContractPosition   5not usedThis object, where the CollectionBOM is used.
    BOMHeader   5not usedThis Position Type is automatically created reading the childs in the CollectionBOM. The quantity is also aligned with the parent.
      ItemAtFixedPrice  15  3ContractQuantity=3 is the input. 3 is stored in BaseQuantity and 15 in ContractQuantity
      ItemAtFixedPrice  20  4ContractQuantity=4 is the input. 4 is stored in BaseQuantity and 20 in ContractQuantity
      ServiceAtFixedPrice  20  4ContractQuantity=4 is the input. 4 is stored in BaseQuantity and 20 in ContractQuantity
See example for more details.

Namespace:  MARIInterface
Assembly:  MARIInterface (in MARIInterface.dll) Version: 8.0.0.100
Syntax
public List<clsImportProjectContractPosition> CollectionBOM { get; set; }

Return Value

Type: ListclsImportProjectContractPosition
Examples
Example using CollectionBOM to create a hierarchy
/// <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;
}
See Also