예제 #1
0
        public IResult UpdateInventoryTreatmentOrder(IUpdateTreatmentOrderParameters parameters)
        {
            var parsedParameters = new UpdateTreatmentOrderConductorParameters <IUpdateTreatmentOrderParameters>(parameters);

            if (!parsedParameters.Result.Success)
            {
                return(parsedParameters.Result.ConvertTo <InventoryShipmentOrderKey>());
            }

            var updateResult = new UpdateTreatmentOrderConductor(_inventoryShipmentOrderUnitOfWork).Update(_timeStamper.CurrentTimeStamp, parsedParameters);

            if (!updateResult.Success)
            {
                return(updateResult.ConvertTo <InventoryShipmentOrderKey>());
            }

            _inventoryShipmentOrderUnitOfWork.Commit();

            var key = updateResult.ResultingObject.ToInventoryShipmentOrderKey();

            return(SyncParameters.Using(new SuccessResult <string>(key), new SyncInventoryShipmentOrderParameters
            {
                InventoryShipmentOrderKey = key,
                New = false
            }));
        }
        internal IResult <TreatmentOrder> Update <TParams>(DateTime timeStamp, UpdateTreatmentOrderConductorParameters <TParams> parameters)
            where TParams : IUpdateTreatmentOrderParameters
        {
            var treatmentOrder = UnitOfWork.TreatmentOrderRepository.FindByKey(parameters.TreatmentOrderKey,
                                                                               o => o.InventoryShipmentOrder.DestinationFacility.Locations,
                                                                               o => o.InventoryShipmentOrder.SourceFacility.Locations,
                                                                               o => o.InventoryShipmentOrder.ShipmentInformation,
                                                                               o => o.InventoryShipmentOrder.PickedInventory.Items.Select(i => i.CurrentLocation),
                                                                               o => o.InventoryShipmentOrder.PickedInventory.Items.Select(i => i.FromLocation),
                                                                               o => o.InventoryShipmentOrder.InventoryPickOrder.Items.Select(i => i.Customer));

            if (treatmentOrder == null)
            {
                return(new InvalidResult <TreatmentOrder>(null, string.Format(UserMessages.TreatmentOrderNotFound, parameters.TreatmentOrderKey)));
            }

            var updateResult = Update(treatmentOrder, timeStamp, parameters);

            if (updateResult.Success)
            {
                var itemCodesResult = SetPickedItemCodes(treatmentOrder.InventoryShipmentOrder, parameters.SetPickedInventoryItemCodes);
                if (!itemCodesResult.Success)
                {
                    return(itemCodesResult.ConvertTo <TreatmentOrder>());
                }
            }

            return(updateResult);
        }