public List<InventoryOperation> NotifySubmittingCharterOutStart(CharterOut charterOutStart)
 {
     return new List<InventoryOperation>(new InventoryOperation[]
             {
              new InventoryOperation(
              "INV# - " +DateTime.Now.Ticks,
                 DateTime.Now,
                 InventoryActionType.Issue,
                 (long? )null,
                 (long? )null)});
 }
 public List<InventoryOperation> NotifySubmittingCharterOutStart(CharterOut charterOutStart)
 {
     try
     {
         return new List<InventoryOperation>()
                {
                    this.inventoryOperationManager.ManageCharterOutStart(charterOutStart,
                                 //TODO: Fake ActorId
                                 1101)
                };
     }
     catch
     {
         throw;
     }
 }
        //================================================================================
        public InventoryOperation ManageCharterOutStart(CharterOut charterOutStart, int userId)
        {
            if (charterOutStart.CharterType != CharterType.Start)
                throw new InvalidArgument("The given entity is not Charter Out Start", "charterOutStart");

            using (var dbContext = new InventoryDbContext())
            {
                using (var transaction = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
                {
                    //try
                    //{
                    //    dbContext.Database.ExecuteSqlCommand(
                    //                                         TransactionalBehavior.EnsureTransaction,
                    //                                         "dbo.[IssueItemPricesOperation]");
                    //}
                    //catch (Exception)
                    //{
                    //    throw;
                    //}

                    InventoryOperation result = null;

                    var reference = findInventoryOperationReference(dbContext, InventoryOperationType.Issue, CHARTER_OUT_START_ISSUE, charterOutStart.Id.ToString());

                    //if (reference.OperationId == INVALID_ID)
                    if (reference == null)
                    {
                        string transactionCode, transactionMessage;

                        var operationReference = issue(
                                  dbContext,
                                  (int)charterOutStart.VesselInCompany.CompanyId,
                                  (int)charterOutStart.VesselInCompany.VesselInInventory.Id,
                                  1,
                                  convertCharterOutTypeToStoreType(charterOutStart),
                                    null,
                                  CHARTER_OUT_START_ISSUE,
                                  charterOutStart.Id.ToString(),
                                  userId,
                                  out transactionCode,
                                  out transactionMessage);

                        string transactionItemMessage;

                        var transactionItems = new List<TransactionItem>();

                        foreach (var charterItem in charterOutStart.CharterItems)
                        {

                            transactionItems.Add(new TransactionItem()
                            {
                                GoodId = (int)charterItem.Good.SharedGoodId,
                                CreateDate = DateTime.Now,
                                Description = "Charter Out Start > " + charterItem.Good.Code,
                                QuantityAmount = charterItem.Rob,
                                QuantityUnitId = getMeasurementUnitId(dbContext, charterItem.GoodUnit.Abbreviation),
                                TransactionId = (int)operationReference.OperationId,
                                UserCreatorId = userId
                            });
                        }

                        var registeredTransactionIds = addTransactionItems(dbContext, (int)operationReference.OperationId, transactionItems, userId, out transactionItemMessage);

                        string issuedItemsPricingMessage;

                        var pricingTransactionIds = registeredTransactionIds.Select(id => new TransactionItemPricingId() { Id = id, Description = "Charter-Out Start FIFO Pricing" });

                        priceIssuedItemsInFIFO(dbContext, pricingTransactionIds, userId, out issuedItemsPricingMessage, CHARTER_OUT_START_ISSUE_PRICING, charterOutStart.Id.ToString());

                        deactivateWarehouse(dbContext, (int)charterOutStart.VesselInCompany.VesselInInventory.Id, userId);

                        result = new InventoryOperation(
                                       inventoryOperationId: operationReference.OperationId,
                                       actionNumber: string.Format("{0}/{1}", (InventoryOperationType)operationReference.OperationType, operationReference.OperationId),
                                       actionDate: DateTime.Now,
                                       actionType: InventoryActionType.Issue,
                                       fuelReportDetailId: null,
                                       charterId: null);
                    }
                    else
                    {
                        throw new InvalidOperation("CharterOutStart disapprovement", "CharterOutStart disapprovement is invalid.");

                        var transactionItems = dbContext.TransactionItems.Where(ti => ti.TransactionId == reference.OperationId);

                    }

                    transaction.Commit();

                    return result;
                }
            }
        }
        //================================================================================
        public List<InventoryOperation> ManageCharterOutEnd(CharterOut charterOutEnd, int userId)
        {
            if (charterOutEnd.CharterType != CharterType.End)
                throw new InvalidArgument("The given entity is not Charter Out End", "charterOutEnd");

            using (var dbContext = new InventoryDbContext())
            {
                using (var transaction = new TransactionScope())
                {
                    var reference = findInventoryOperationReference(dbContext, InventoryOperationType.Receipt, CHARTER_IN_START_RECEIPT, charterOutEnd.Id.ToString());

                    //if (reference.OperationId == INVALID_ID)
                    if (reference == null)
                    {

                    }
                    else
                    {
                        var transactionItems = dbContext.TransactionItems.Where(ti => ti.TransactionId == reference.OperationId);

                    }
                }
            }
            return null;
        }
        private int convertCharterOutTypeToStoreType(CharterOut charterOut)
        {
            switch (charterOut.CharterType)
            {
                case CharterType.Start:
                    return 9;

                case CharterType.End:
                    return 8;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
        public List<InventoryOperation> NotifySubmittingCharterOutStart(CharterOut charterOutStart)
        {
            var charterOutDto = charterOutToDtoMapper.MapToDtoModel(charterOutStart);

            charterOutDto.CharterType = CharterType.Out;

            charterOutDto.CharterItems = new ObservableCollection<CharterItemDto>(charterOutStart.CharterItems.Select(charterItemToDtoMapper.MapToDtoModel));

            //var inventoryOperationDtosResult = svc.NotifySubmittingCharterOutStart(charterOutDto).ToList();

            //var result = inventoryOperationDtosResult.Select(mapInventoryOperationDtoToInventoryOperation);

            //return result.ToList();

            var syncEvent = new AutoResetEvent(false);

            List<InventoryOperation> callResult = null;
            Exception callException = null;

            ClientHelper.Post<List<FuelReportInventoryOperationDto>, CharterDto>
                //(new Uri("http://localhost:65234/api/fuelevents", UriKind.Absolute),
                //(new Uri("http://evaluation-srv:9090/api/fuelevents", UriKind.Absolute),
                (MessageBrokerApiUri, (result, exp) =>
                {
                    callException = exp;
                    if (result != null)
                        callResult = result.Select(mapInventoryOperationDtoToInventoryOperation).ToList();

                    syncEvent.Set();

                    //if (exp != null) tcs.TrySetException(exp);
                    //else if (result != null)
                    //{
                    //    var mappedResult = result.Select(mapInventoryOperationDtoToInventoryOperation).ToList();
                    //    tcs.TrySetResult(mappedResult);
                    //}
                },
                charterOutDto, ClientHelper.MessageFormat.Json, new Dictionary<string, string>(), "CharterDto");

            /////var inventoryOperationDtosResult.Select(mapInventoryOperationDtoToInventoryOperation).ToList();
            syncEvent.WaitOne();

            if (callException != null)
                throw callException;

            return callResult;
        }
        public List<InventoryOperation> NotifySubmittingCharterOutStart(CharterOut charterOutStart)
        {
            //var charterOutDto = charterOutToDtoMapper.MapToDtoModel(charterOutStart);

            //charterOutDto.CharterType = "Out";

            //charterOutDto.CharterItems = charterOutStart.CharterItems.Select(charterItemToDtoMapper.MapToDtoModel).ToList();

            //var inventoryOperationDtosResult = svc.NotifySubmittingCharterOutStart(charterOutDto).ToList();

            //var result = inventoryOperationDtosResult.Select(mapInventoryOperationDtoToInventoryOperation);

            //return result.ToList();

            return null;
        }