コード例 #1
0
        //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);
        }