Skip to main content

How to develop your own integration?

Updated over 2 months ago

There are a couple of use cases for developing your own integration with the Quotation Factory platform. Some of those use cases are:

  • integrate with your ERP system: various 3rd parties have already developed integrations with various ERP systems. But if no integration for your ERP system has been built yet, you can develop it on your own. It's no rocket science! Existing ERP system integrations are:

    • Ridder iQ

    • Bemet

    • MKG

    • ISAH

    • Lantek Integra

  • integrate with your CAM system(s): various 3rd parties have already developed integrations with CAM systems. But if no integration for your CAM system has been built yet, you can develop it on your own. It's no rocket science! Existing CAM system integrations are:

    • LVD CADMAN-B

    • LVD CADMAN SDI

    • Trumpf TruTop Boost

    • Trumpf TruTop Fab

    • Bystronic Bysoft CAM

    • Autopol

    • Lantek

  • estimate specific working steps: using your own logic in code that runs in your own on-premise data center.

Are there any examples of pre-build integrations?

You'll find examples of how to develop your own integration on GitHub.

The URL of our GitHub repository is: https://github.com/QuotationFactory

Note:

On github, in the code examples, and in NuGet, you might find references to Rhodium24 and MetalHeaven. Those names come from the initial phase of the startup. Rhodium24 was the name of the platform and MetalHeaven the name of the company. In 2022, we rebranded both the platform and the company to Quotation Factory.

NuGet package for .NET development

All the information in a quotation project is available in .json format and is based on versioned data contracts to make sure that changes won't break any existing integrations.

To make development as easy as possible, you can use an open-source Nuget package to deserialize the .json file into a tree structure of POCOs (Plain Old C# Objects).

Understanding the structure of the Bill of Materials (BoM)

The first step in working with the project data is understanding the structure of the BoM (Bill of Materials).

BoM Items

The Bill of Materials consists of objects of the generic type BoMItem. Every BoMItem has a unique ID of the data type GUID.

A BoMItem can represent:

  • the project

  • an assembly

  • a subassembly

  • a part type

  • a part instance

Note that

- the BoM always has exactly one BoMItem of type Project which is the root of the tree-structure

- the project can include more than one assembly, which will be BoM Items of type assembly and are direct children of the BoM Item of type Project.

- if individual parts (mono parts) are uploaded, those parts will be grouped as children of one and the same assembly (placeholder) names "individual parts". The ID of this assembly is a constant value GUID. Meaning, every project that has individual parts will have an assembly (placeholder) with the same constant value GUID.

Part Types versus Part Instances

The easiest way to understand the difference between part types and part instances is by using the example of a table. Imagine a table with four legs. Let's suppose that the four legs are geometrically identical. In the CAD model, the engineer modeled the leg only once and made 3 additional (logical) copies. Then the designer positioned every one of the legs accordingly in the 3-dimensional space to finish up the design of the table. The designer was clever enough to make logical copies of the legs. Meaning that if he changes one of the legs, he actually changes the design of the other 3 legs too. The copies are linked to each other.

In this example, the leg of the table is a BoMItem and will show up as one line in the BoM with a quantity set to 4. The quantity of 4 indicates that in the product, 4 instances exist of the PartType. The 4 instances are also explicitly part of the BoM structure and are BoMItems of the type PartInstance.

Another example could be an assembly made out of sheet metal with many inserts. Imagine the inserts being of one model/type only. The assembly can have 50 inserts of the same type meaning that the insert in a BoM Item, occurs only once as a PartType with a quantity of 50. Also, somewhere in the BoM structure, there exist 50 PartInstances referring to the same PartType.

The PartList collection

The PartList is a collection of BoMItems of the type PartType. The collection contains all PartTypes in the project, independent of the (sub)assembly they are part of.

Every PartType has a reference (assemblyId) to the assembly of which it is a member.

Every PartType has a collection of PartInstances, referencing the individual instances of this part somewhere within the structure of the assembly.

The Assemblies collection

The Assemblies collection contains children of BoMItems of type Assembly.

Every assembly can have a collection of BoMItems of type SubAssembly and SubAssembly items can have children of type SubAssembly too. As such, a tree structure of subassemblies is modeled.

Every BoMItem of type Assembly and of type SubAssembly also has a collection of PartInstance. This way, a relation exists between the PartTypes in the PartList collection, through the PartInstances with the same IDs (or object instances in case of a POCO structure) that are both children of PartTypes as well as of (Sub)Assemblies.

Understanding Money and Units Of Measure based properties

The Quotation Factory platform under the hood is always explicit in the case of money-based properties and properties that can have a unit of measure. Two specific different .NET libraries are used:

Note:

The Noda Money library makes sure that that both the currency and the currency value are first class citizens. The UnitsNet library makes sure that both the unit type (e.g. Length), the unit itself (e.g. mm) as well as the value are first class citizens. The Quotation Factory Nuget Package with external data contracts to de-serialize the .json into a POCO object hierarchy, includes the appropriate de-serializers for the Noda Money as well as the UnitsNet datatypes.

The Financial object

The Financial object is a property that every BoM item has. As such, the Financial can be found at all levels in the BoM structure:

  • the project

  • an assembly

  • a subassembly

  • a part type

  • a part instance

The Financial object has the following structure:

  • Quantity: Quantity is found in the CAD model

  • TotalProjectQuantity: Quantity * batch size at assembly level * batch size at the project level

  • CostPricePerItem: CostPrice of 1 item (money value)

  • CostPriceOfItems: CostPrice * TotalProjectQuantity (money value)

  • SurchargeRatio: ratio, based on scaled ratios configured for this type of item

  • SurchargeValuePerItem: surcharge as money value based on CostPricePerItem

  • SurchargeValueOfItems: surcharge as money value based on CostPriceOfItems

  • DiscountRatio: ratio, based on the scaled ratios configured for this type of item

  • DiscountValuePerItem: discount as money value based on CostPricePerItem + SurchargePerItem

  • DiscountValueOfItems: discount as money value based on CostPriceOfItems + SurchargeOfItems

  • SalesPricePerItem: CostPricePerItem + SurchargeValuePerItem - DiscountValuePerItem

  • SalesPriceOfItems: CostPriceOfItems + SurchargeValueOfItems - DiscountValueOfItems

  • DiscountOrSurchargeRatio: deprecated

  • DiscountOrSurchargePerItem: deprecated

  • DiscountOrSurchargeOfItems: deprecated

Working step types

WorkingStepType enumerator:

  • NotInitialized (0)

  • SheetCutting (1)

  • Sawing (2)

  • SheetBending (3)

  • CounterSinking (4)

  • Milling (5)

  • TubeOrProfileCutting (6)

  • Turning (7)

  • Purchasing (8)

  • Engraving (9)

  • ThreadTapping (10)

  • Anodising (12)

  • Assembling (13)

  • BoltPressing (14)

  • Deburring (15)

  • Drilling (16)

  • EdgeMilling (17)

  • EdgeTrimming (18)

  • LevelTensioning (19)

  • NutPressing (20)

  • PicklingPassivating (21)

  • Polishing (23)

  • PowderCoating (24)

  • Punching (25)

  • Rolling (26)

  • StudWelding (27)

  • TubeProfileOrBarBending (28)

  • Welding (29)

  • ZincPlating (30)

  • Designing (31)

  • Loading (32)

  • Unloading (33)

  • SheetShearing (34)

  • Setup (37) (preparing)

  • Certifying (38)

  • Shipping (39)

  • Programming (40)

  • OrderPicking (41)

  • Packaging (42)

  • BeadBlasting (43) (pearl blasting, glass pearl blasting)

  • SandBlasting (44)

  • SteelGridBlasting (45)

  • WetBlasting (46)

  • VacuumBlasting (47)

  • CentrifugalBlasting (48)

  • SodaBlasting (49)

  • BristleBlasting (50)

  • DryIceBlasting (51)

  • PencilBlasting (52)

  • WeldGrinding (53)

  • RobotWelding (54)

  • RobotStudWelding (55)

  • Nitriding (56)

  • DieSinking (57) (NL: Zinkvonken)

  • WireErosion (58) (NL: Draadvonken)

  • Hemming (59)

  • VibratoryDeburring (60) (NL: trommelen)

  • Foiling (61)

  • Cleaning (62)

  • QualityControlling (63)

  • ElectrolyticPolishing (64)

  • CathodicDipCoating (65) (NL: KTL lakken)

  • ElectrophoreticDipCoating (66) (NL: EDP)

  • FlowDrilling (67)

  • HoleProtectioning (68)

  • Operating (69)

  • Researching (70)

Project state enum

  • NotInitialized: 0

  • Defining: 1 (action state)

  • Requested: 2 (waiting state)

  • Quoting: 3 (action state)

  • Quoted: 4 (waiting state)

  • Negotiating: 5 (action state)

  • Ordered: 6 (waiting state)

  • Producing: 7 (action state)

  • Produced: 8 (waiting state)

  • Packaging: 10 (action state)

  • Packaged: 11 (waiting state)

  • Delivering: 12 (action state)

  • Delivered: 13

  • Canceled: 14

Quotation Factory Agent commands

  • RequestedIntegrationSettings

  • RequestedAddressbookSync

  • RequestedArticlesSync

  • EstimateProductionTime

  • EstimateAdditionalCosts

  • EstimateManufacturability

Did this answer your question?