예제 #1
0
        //Created By : Raphael Herrera, Created On : 7/19/2016

        /*Purpose: Replicate Receiving Transaction Fields
         * Registration Details:
         * Event/Message:
         *      Pre/Create:
         *      Post/Update:
         *      Post/Create: Return Transaction
         * Primary Entity: Return Transaction
         */
        public void PopulateReturnTransactionFields(Entity returnTransaction)
        {
            _tracingService.Trace("Started PopulateReturnTransactionFields Method...");

            var receivingTransactionId = returnTransaction.Contains("gsc_receivingtransactionid") ? returnTransaction.GetAttributeValue <EntityReference>("gsc_receivingtransactionid").Id
                : Guid.Empty;

            EntityCollection receivingTransactionCollection = CommonHandler.RetrieveRecordsByOneValue("gsc_cmn_receivingtransaction", "gsc_cmn_receivingtransactionid", receivingTransactionId, _organizationService,
                                                                                                      null, OrderType.Ascending, new [] { "gsc_invoiceno", "gsc_purchaseorderid", "gsc_siteid", "gsc_isreturnrecordcreated" });

            EntityCollection receivingDetailsCollection = CommonHandler.RetrieveRecordsByOneValue("gsc_cmn_receivingtransactiondetail", "gsc_receivingtransactionid", receivingTransactionId, _organizationService,
                                                                                                  null, OrderType.Ascending, new[] { "gsc_productid", "gsc_modelcode", "gsc_optioncode", "gsc_modelyear", "gsc_vehiclecolorid", "gsc_csno", "gsc_vin", "gsc_productionno", "gsc_engineno", "gsc_inventoryid", "gsc_receivingtransactiondetailpn", "gsc_basemodelid" });

            _tracingService.Trace("ReceivingTransaction Records: " + receivingTransactionCollection.Entities.Count + " | ReceivingDetails Records: " + receivingDetailsCollection.Entities.Count);


            //retrieve and delete pre existing return details
            EntityCollection returnDetailsCollection = CommonHandler.RetrieveRecordsByOneValue("gsc_cmn_returntransactiondetails", "gsc_returntransactionid", returnTransaction.Id, _organizationService, null,
                                                                                               OrderType.Ascending, new[] { "gsc_cmn_returntransactiondetailsid" });

            _tracingService.Trace("Existing return details: " + returnDetailsCollection.Entities.Count);

            foreach (Entity returnDetails in returnDetailsCollection.Entities)
            {
                _organizationService.Delete(returnDetails.LogicalName, returnDetails.Id);
            }

            EntityReference          siteid = null;
            InventoryMovementHandler inventoryMovementHandler = new InventoryMovementHandler(_organizationService, _tracingService);

            //create return transaction details
            if (receivingDetailsCollection.Entities.Count > 0)
            {
                foreach (Entity receivingDetailEntity in receivingDetailsCollection.Entities)
                {
                    Guid inventoryid = receivingDetailEntity.GetAttributeValue <EntityReference>("gsc_inventoryid").Id;
                    siteid = inventoryMovementHandler.getSiteId(inventoryid);

                    Entity returnTransactionDetail = new Entity("gsc_cmn_returntransactiondetails");

                    returnTransactionDetail["gsc_returntransactionid"] = new EntityReference(returnTransaction.LogicalName, returnTransaction.Id);

                    returnTransactionDetail["gsc_productid"] = receivingDetailEntity.Contains("gsc_productid") ? receivingDetailEntity.GetAttributeValue <EntityReference>("gsc_productid")
                       : null;
                    returnTransactionDetail["gsc_modelcode"] = receivingDetailEntity.Contains("gsc_modelcode") ? receivingDetailEntity.GetAttributeValue <string>("gsc_modelcode")
                       : string.Empty;
                    returnTransactionDetail["gsc_optioncode"] = receivingDetailEntity.Contains("gsc_optioncode") ? receivingDetailEntity.GetAttributeValue <string>("gsc_optioncode")
                       : string.Empty;
                    returnTransactionDetail["gsc_modelyear"] = receivingDetailEntity.Contains("gsc_modelyear") ? receivingDetailEntity.GetAttributeValue <string>("gsc_modelyear")
                        : string.Empty;
                    returnTransactionDetail["gsc_vehiclecolorid"] = receivingDetailEntity.Contains("gsc_vehiclecolorid") ? receivingDetailEntity.GetAttributeValue <EntityReference>("gsc_vehiclecolorid")
                       : null;
                    returnTransactionDetail["gsc_csno"] = receivingDetailEntity.Contains("gsc_csno") ? receivingDetailEntity.GetAttributeValue <string>("gsc_csno")
                       : string.Empty;
                    returnTransactionDetail["gsc_vin"] = receivingDetailEntity.Contains("gsc_vin") ? receivingDetailEntity.GetAttributeValue <string>("gsc_vin")
                        : string.Empty;
                    returnTransactionDetail["gsc_productionno"] = receivingDetailEntity.Contains("gsc_productionno") ? receivingDetailEntity.GetAttributeValue <string>("gsc_productionno")
                       : string.Empty;
                    returnTransactionDetail["gsc_engineno"] = receivingDetailEntity.Contains("gsc_engineno") ? receivingDetailEntity.GetAttributeValue <string>("gsc_engineno")
                        : string.Empty;
                    returnTransactionDetail["gsc_inventoryid"] = new EntityReference("gsc_iv_inventory", inventoryid);

                    returnTransactionDetail["gsc_returntransactionpn"] = receivingDetailEntity.Contains("gsc_receivingtransactiondetailpn") ? receivingDetailEntity.GetAttributeValue <string>("gsc_receivingtransactiondetailpn")
                        : string.Empty;
                    returnTransactionDetail["gsc_basemodelid"] = receivingDetailEntity.Contains("gsc_basemodelid") ? receivingDetailEntity.GetAttributeValue <EntityReference>("gsc_basemodelid")
                       : null;

                    _tracingService.Trace("Creating Return Transaction Detail...");
                    _organizationService.Create(returnTransactionDetail);
                }
            }


            //Update return transaction fields
            if (receivingTransactionCollection.Entities.Count > 0)
            {
                Entity receivingTransaction = receivingTransactionCollection.Entities[0];

                returnTransaction["gsc_invoiceno"] = receivingTransaction.Contains("gsc_invoiceno") ?receivingTransaction.GetAttributeValue <string>("gsc_invoiceno")
                    : string.Empty;
                returnTransaction["gsc_vpono"] = receivingTransaction.Contains("gsc_purchaseorderid") ? receivingTransaction.GetAttributeValue <EntityReference>("gsc_purchaseorderid").Name
                    : string.Empty;
                returnTransaction["gsc_site"] = siteid.Name;

                //set returnstatus to Open
                returnTransaction["gsc_returnstatus"] = new OptionSetValue(100000000);
                returnTransaction["gsc_vrstatus"]     = new OptionSetValue(100000000);

                _tracingService.Trace("Updating Return Transaction...");
                _organizationService.Update(returnTransaction);

                //Set 'Is Return Record Created' field to true
                receivingTransaction["gsc_isreturnrecordcreated"] = true;

                _tracingService.Trace("Updating Receiving Transaction...");
                _organizationService.Update(receivingTransaction);
            }

            _tracingService.Trace("Ending PopulateReturnTransactionFields Method...");
        }