//Created By : Jerome Anthony Gerero, Created On : 2/3/2017 /*Purpose: Create Inventory record on Receiving Transaction Detail update * Registration Details: * Event/Message: * Pre/Create: * Post/Update: Model Code, Option Code, CS No, VIN, Production No, Engine No * Post/Create: * Primary Entity: Receiving Transaction Detail */ public Entity CreateUpdateInventoryRecord(Entity receivingTransactionDetail) { _tracingService.Trace("Started CreateUpdateInventoryRecord Method..."); ReceivingTransactionHandler receivingHandler = new ReceivingTransactionHandler(_organizationService, _tracingService); Guid receivingTransactionId = receivingTransactionDetail.GetAttributeValue <EntityReference>("gsc_receivingtransactionid").Id; //Retrieve In-Transit Site field from Receiving Transaction record Entity receivingTransaction = _organizationService.Retrieve("gsc_cmn_receivingtransaction", receivingTransactionId, new ColumnSet("gsc_intransitsiteid", "gsc_receivingstatus", "gsc_receivingtransactionpn", "gsc_vendorid", "gsc_vendorname", "gsc_intransitreceiptdate")); if (!receivingTransaction.FormattedValues["gsc_receivingstatus"].Equals("Open")) { _tracingService.Trace("Status not Open."); return(null); } String productName = receivingTransactionDetail.Contains("gsc_productid") ? receivingTransactionDetail.GetAttributeValue <EntityReference>("gsc_productid").Name : String.Empty; String colorName = receivingTransactionDetail.Contains("gsc_vehiclecolorid") ? receivingTransactionDetail.GetAttributeValue <EntityReference>("gsc_vehiclecolorid").Name : String.Empty; String inTransitSiteName = receivingTransaction.Contains("gsc_intransitsiteid") ? receivingTransaction.GetAttributeValue <EntityReference>("gsc_intransitsiteid").Name : String.Empty; EntityReference inventoryId = receivingTransactionDetail.Contains("gsc_inventoryid") ? receivingTransactionDetail.GetAttributeValue <EntityReference>("gsc_inventoryid") : null; Guid inTransitSite = receivingTransaction.Contains("gsc_intransitsiteid") ? receivingTransaction.GetAttributeValue <EntityReference>("gsc_intransitsiteid").Id : Guid.Empty; DateTime transactionDate = receivingTransaction.Contains("gsc_intransitreceiptdate") ? receivingTransaction.GetAttributeValue <DateTime>("gsc_intransitreceiptdate") : DateTime.MinValue; if (inventoryId == null) { _tracingService.Trace("Create Inventory."); Int32 onHand = 0; Int32 available = 0; //Create new inventory record Entity inventory = new Entity("gsc_iv_inventory"); inventory["gsc_inventorypn"] = productName + "-" + colorName + "-" + inTransitSiteName; inventory["gsc_color"] = colorName; inventory["gsc_vin"] = receivingTransactionDetail.Contains("gsc_vin") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_vin") : String.Empty; inventory["gsc_engineno"] = receivingTransactionDetail.Contains("gsc_engineno") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_engineno") : String.Empty; inventory["gsc_optioncode"] = receivingTransactionDetail.Contains("gsc_optioncode") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_optioncode") : String.Empty; inventory["gsc_csno"] = receivingTransactionDetail.Contains("gsc_csno") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_csno") : String.Empty; inventory["gsc_modelcode"] = receivingTransactionDetail.Contains("gsc_modelcode") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_modelcode") : String.Empty; inventory["gsc_productionno"] = receivingTransactionDetail.Contains("gsc_productionno") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_productionno") : String.Empty; inventory["gsc_modelyear"] = receivingTransactionDetail.Contains("gsc_modelyear") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_modelyear") : String.Empty; inventory["gsc_siteid"] = receivingTransaction.Contains("gsc_intransitsiteid") ? receivingTransaction.GetAttributeValue <EntityReference>("gsc_intransitsiteid") : null; Guid newInventory = _organizationService.Create(inventory); _tracingService.Trace("Inventory Created"); Entity newInventoryEntity = _organizationService.Retrieve("gsc_iv_inventory", newInventory, new ColumnSet("gsc_productquantityid")); receivingTransactionDetail["gsc_inventoryid"] = new EntityReference("gsc_iv_inventory", newInventory); _organizationService.Update(receivingTransactionDetail); _tracingService.Trace("Updated Receiving Item Inventory"); //Reference inventory to product quantity Guid productId = receivingTransactionDetail.Contains("gsc_productid") ? receivingTransactionDetail.GetAttributeValue <EntityReference>("gsc_productid").Id : Guid.Empty; Guid inTransitSiteId = receivingTransaction.Contains("gsc_intransitsiteid") ? receivingTransaction.GetAttributeValue <EntityReference>("gsc_intransitsiteid").Id : Guid.Empty; Guid colorId = receivingTransactionDetail.Contains("gsc_vehiclecolorid") ? receivingTransactionDetail.GetAttributeValue <EntityReference>("gsc_vehiclecolorid").Id : Guid.Empty; var productQuantityFilter = new List <ConditionExpression> { new ConditionExpression("gsc_productid", ConditionOperator.Equal, productId), new ConditionExpression("gsc_siteid", ConditionOperator.Equal, inTransitSiteId), new ConditionExpression("gsc_vehiclecolorid", ConditionOperator.Equal, colorId), new ConditionExpression("gsc_isonorder", ConditionOperator.Equal, false) }; EntityCollection productQuantityRecords = CommonHandler.RetrieveRecordsByConditions("gsc_iv_productquantity", productQuantityFilter, _organizationService, null, OrderType.Ascending, new[] { "gsc_iv_productquantityid", "gsc_onhand", "gsc_available", "gsc_allocated", "gsc_onorder", "gsc_sold", "gsc_intransit", "gsc_damaged", "gsc_backorder" }); _tracingService.Trace("Product Quantity record/s retrieved : " + productQuantityRecords.Entities.Count); if (productQuantityRecords != null && productQuantityRecords.Entities.Count > 0) { _tracingService.Trace("Retrieve Product Quantity"); Entity productQuantity = productQuantityRecords.Entities[0]; newInventoryEntity["gsc_productquantityid"] = new EntityReference("gsc_iv_productquantity", productQuantity.Id); _organizationService.Update(newInventoryEntity); _tracingService.Trace("Inventory Product Quantity Updated"); onHand = productQuantity.GetAttributeValue <Int32>("gsc_onhand") + 1; available = productQuantity.GetAttributeValue <Int32>("gsc_available") + 1; productQuantity["gsc_onhand"] = onHand; productQuantity["gsc_available"] = available; _organizationService.Update(productQuantity); _tracingService.Trace("Product Quantity Updated"); } else { _tracingService.Trace("Create Product Quantity"); Entity productQuantity = new Entity("gsc_iv_productquantity"); productQuantity["gsc_productquantitypn"] = productName; productQuantity["gsc_siteid"] = receivingTransaction.Contains("gsc_intransitsiteid") ? receivingTransaction.GetAttributeValue <EntityReference>("gsc_intransitsiteid") : null; productQuantity["gsc_productid"] = receivingTransactionDetail.Contains("gsc_productid") ? receivingTransactionDetail.GetAttributeValue <EntityReference>("gsc_productid") : null; productQuantity["gsc_vehiclecolorid"] = receivingTransactionDetail.Contains("gsc_vehiclecolorid") ? receivingTransactionDetail.GetAttributeValue <EntityReference>("gsc_vehiclecolorid") : null; productQuantity["gsc_vehiclemodelid"] = receivingTransactionDetail.Contains("gsc_basemodelid") ? receivingTransactionDetail.GetAttributeValue <EntityReference>("gsc_basemodelid") : null; Guid newProductQuantity = _organizationService.Create(productQuantity); newInventoryEntity["gsc_productquantityid"] = new EntityReference("gsc_iv_productquantity", newProductQuantity); _organizationService.Update(newInventoryEntity); _tracingService.Trace("Inventory Product Quantity Updated"); EntityCollection productQuantity2Records = CommonHandler.RetrieveRecordsByOneValue("gsc_iv_productquantity", "gsc_iv_productquantityid", newProductQuantity, _organizationService, null, OrderType.Ascending, new[] { "gsc_onhand", "gsc_available", "gsc_allocated", "gsc_onorder", "gsc_sold", "gsc_intransit", "gsc_damaged", "gsc_backorder" }); if (productQuantity2Records != null && productQuantity2Records.Entities.Count > 0) { Entity productQuantity2 = productQuantity2Records.Entities[0]; onHand = productQuantity2.GetAttributeValue <Int32>("gsc_onhand") + 1; available = productQuantity2.GetAttributeValue <Int32>("gsc_available") + 1; productQuantity2["gsc_onhand"] = onHand; productQuantity2["gsc_available"] = available; _organizationService.Update(productQuantity2); _tracingService.Trace("Product Quantity Updated"); } } receivingHandler.CreateReceivingInventoryHistory(receivingTransaction, transactionDate, 1, 0, inTransitSite, Guid.Empty, inTransitSite, onHand, true); } else { _tracingService.Trace("Update Inventory"); //Update existing inventory record EntityCollection inventoryRecords = CommonHandler.RetrieveRecordsByOneValue("gsc_iv_inventory", "gsc_iv_inventoryid", inventoryId.Id, _organizationService, null, OrderType.Ascending, new[] { "gsc_productquantityid" }); if (inventoryRecords != null && inventoryRecords.Entities.Count > 0) { _tracingService.Trace("Retrieve Inventory"); Entity inventory = inventoryRecords.Entities[0]; inventory["gsc_inventorypn"] = productName + "-" + colorName + "-" + inTransitSiteName; inventory["gsc_color"] = receivingTransactionDetail.Contains("gsc_vehiclecolorid") ? receivingTransactionDetail.GetAttributeValue <EntityReference>("gsc_vehiclecolorid").Name : String.Empty; inventory["gsc_vin"] = receivingTransactionDetail.Contains("gsc_vin") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_vin") : String.Empty; inventory["gsc_engineno"] = receivingTransactionDetail.Contains("gsc_engineno") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_engineno") : String.Empty; inventory["gsc_optioncode"] = receivingTransactionDetail.Contains("gsc_optioncode") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_optioncode") : String.Empty; inventory["gsc_csno"] = receivingTransactionDetail.Contains("gsc_csno") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_csno") : String.Empty; inventory["gsc_modelcode"] = receivingTransactionDetail.Contains("gsc_modelcode") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_modelcode") : String.Empty; inventory["gsc_productionno"] = receivingTransactionDetail.Contains("gsc_productionno") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_productionno") : String.Empty; inventory["gsc_modelyear"] = receivingTransactionDetail.Contains("gsc_modelyear") ? receivingTransactionDetail.GetAttributeValue <String>("gsc_modelyear") : String.Empty; inventory["gsc_siteid"] = receivingTransaction.Contains("gsc_intransitsiteid") ? receivingTransaction.GetAttributeValue <EntityReference>("gsc_intransitsiteid") : null; _organizationService.Update(inventory); _tracingService.Trace("Inventory Updated"); } //receivingHandler.CreateReceivingInventoryHistory(receivingTransaction, 1, 0, inTransitSite, Guid.Empty, inTransitSite, 1); } _tracingService.Trace("Created Receiving Inventory History..."); receivingTransaction["gsc_receivingstatus"] = new OptionSetValue(100000003); _organizationService.Update(receivingTransaction); _tracingService.Trace("Receving Status Updated"); _tracingService.Trace("Ended CreateUpdateInventoryRecord Method..."); return(receivingTransactionDetail); }