public async Task <JsonResult> GetWarehouseWhenDateChanged(string action, string customerNumber, string itemName, string deliveryDateStr)
        {
            DateTime deliveryDate;

            if (!string.IsNullOrEmpty(itemName) && DateTime.TryParse(deliveryDateStr, out deliveryDate))
            {
                var deliveryAssurance = new Core.DataModels.DeliveryAssuranceDtos.DeliveryAssurance()
                {
                    Item           = DeliveryAssuranceHelper.ParseItemValue(itemName),
                    Sort           = DeliveryAssuranceHelper.ParseSortValue(itemName),
                    Leveransdatum  = deliveryDate,
                    SupplierNumber = customerNumber
                };

                var wareHouseList = await GetWarehouseList(deliveryAssurance);

                if (!action.Equals(DeliveryAssuranceAction.Approve))
                {
                    var depaAvtals = await GetDepaAvtalDelAssAsync(deliveryAssurance, action);

                    return(Json(new { warehouses = wareHouseList, depaAvtals = depaAvtals }, JsonRequestBehavior.AllowGet));
                }

                return(Json(new { warehouses = wareHouseList }, JsonRequestBehavior.AllowGet));
            }

            return(Json(new { warehouses = new List <KeyValuePair <string, string> >() }, JsonRequestBehavior.AllowGet));
        }
        private async Task <List <KeyValuePair <string, string> > > GetWarehouseList(
            Core.DataModels.DeliveryAssuranceDtos.DeliveryAssurance deliveryAssurance)
        {
            var warehouses = await _deliveryNoteRepository.GetWarehouseListAsync(deliveryAssurance.Item, deliveryAssurance.Sort,
                                                                                 deliveryAssurance.Leveransdatum);

            if (SettingPage.IsInternal)
            {
                return(warehouses.Select(i => new KeyValuePair <string, string>(i.Keyvalue, i.Description)).ToList());
            }

            var filteredWarehouses = from singleWarehouse in warehouses
                                     let warehouseName = singleWarehouse.Description
                                                         where !warehouseName.Contains("z(")
                                                         select singleWarehouse;

            return(filteredWarehouses.Select(i => new KeyValuePair <string, string>(i.Keyvalue, i.Description)).ToList());
        }
        private static string GetDatePickerCssClass(string action, Core.DataModels.DeliveryAssuranceDtos.DeliveryAssurance deliveryAssurance)
        {
            if (action.Equals(DeliveryAssuranceAction.Approve))
            {
                if (SettingPage.IsInternal || (DeliveryAssuranceHelper.IsInStoragePeriod() && deliveryAssurance.OrderTyp == "206"))
                {
                    return(string.Empty);
                }

                if (!DeliveryAssuranceHelper.IsInHarvestPeriod())
                {
                    return(DeliveryDateCssClass.DateRange);
                }

                if (deliveryAssurance.OrderTyp == "206")
                {
                    return(DeliveryDateCssClass.DateHarvest206);
                }

                if (deliveryAssurance.Status < 45)
                {
                    return(DeliveryDateCssClass.DateHarvestRange);
                }

                return(DeliveryDateCssClass.DateRange);
            }
            else if (action.Equals(DeliveryAssuranceAction.Change) && deliveryAssurance != null)
            {
                if (SettingPage.IsInternal)
                {
                    return(DeliveryDateCssClass.DateHigherThanToday);
                }

                if (DeliveryAssuranceHelper.IsInStoragePeriod() && deliveryAssurance.OrderTyp == "206")
                {
                    return(string.Empty);
                }

                if (!DeliveryAssuranceHelper.IsInHarvestPeriod())
                {
                    return($"{DeliveryDateCssClass.DateRange} {DeliveryDateCssClass.DateHigherThanToday}");
                }

                if (deliveryAssurance.OrderTyp == "206") //Utsäde (_earlierAssurance.OrderTyp != 204) 204 = spannmål
                {
                    return(DeliveryDateCssClass.DateHarvest206);
                }

                if (deliveryAssurance.Status < 45) //När det inte är transportplanerat
                {
                    return(DeliveryDateCssClass.DateHarvestRange);
                }

                return($"{DeliveryDateCssClass.DateRange} {DeliveryDateCssClass.DateHigherThanToday}");
            }
            else if (action.Equals(DeliveryAssuranceAction.Create) && deliveryAssurance != null && string.IsNullOrWhiteSpace(deliveryAssurance.IONumber))
            {
                if (SettingPage.IsInternal)
                {
                    return(DeliveryDateCssClass.DateHigherThanToday);
                }

                return($"{DeliveryDateCssClass.DateHarvestRange} {DeliveryDateCssClass.DateHigherThanToday}");
            }

            return(string.Empty);
        }
        private async Task <List <KeyValuePair <string, string> > > GetDepaAvtalDelAssAsync(Core.DataModels.DeliveryAssuranceDtos.DeliveryAssurance deliveryAssurance, string action)
        {
            var deliveryDate = deliveryAssurance.Leveransdatum;

            if (action.Equals(DeliveryAssuranceAction.Approve))
            {
                deliveryDate = deliveryAssurance.RequestDate;
            }

            var depaAvtals =
                await
                _deliveryNoteRepository.GetDepaAvtalDelAssAsync(deliveryAssurance.SupplierNumber, deliveryAssurance.Item,
                                                                deliveryAssurance.Sort, deliveryDate);

            return(depaAvtals?.Select(i => new KeyValuePair <string, string>(i.Keyvalue, i.Description)).ToList());
        }
        private async Task <DeliveryAssuranceOverviewViewModel> PopulateOverviewModel(
            DeliveryAssuranceListPage currentPage,
            Core.DataModels.DeliveryAssuranceDtos.DeliveryAssurance deliveryAssurance, bool isGeneratePdf = false)
        {
            var urlHelper            = ServiceLocator.Current.GetInstance <UrlHelper>();
            var deliveryAssuranceUrl = urlHelper.ContentUrl(currentPage.ContentLink);

            var lorryType =
                _deliveryNoteRepository.GetLorryTypes()
                .FirstOrDefault(x => x.Keyvalue.Equals(deliveryAssurance.Levsatt));

            var deliveryAddress =
                _deliveryNoteRepository.GetDeliveryAdresses(deliveryAssurance.SupplierNumber)
                .FirstOrDefault(x => x.AddressNumber.Equals(deliveryAssurance.DeliveryAddress));

            var mergedItem =
                _deliveryNoteRepository.GetMergedItems(deliveryAssurance.SupplierNumber, isGeneratePdf ? DateTime.Now : deliveryAssurance.Leveransdatum, !SettingPage.IsInternal)?
                .FirstOrDefault(i => DeliveryAssuranceHelper.GetItemSort(deliveryAssurance.Item, deliveryAssurance.Sort) == i.Keyvalue);

            var warehouse =
                (await _deliveryNoteRepository.GetWarehouseListAsync(deliveryAssurance.Item, deliveryAssurance.Sort, deliveryAssurance.Leveransdatum))?
                .FirstOrDefault(w => w.Keyvalue == deliveryAssurance.Warehouse);

            var depaAvtals = await _deliveryNoteRepository.GetDepaAvtalAsync(deliveryAssurance.SupplierNumber, deliveryAssurance.Item, deliveryAssurance.Sort);

            var depaAvtal = depaAvtals.FirstOrDefault(d => d.Keyvalue == deliveryAssurance.Depaavtal);

            var model = new DeliveryAssuranceOverviewViewModel(currentPage)
            {
                DeliveryAssurance = new DeliveryAssuranceOverview()
                {
                    CustomerName   = GetCustomerName(deliveryAssurance.SupplierNumber),
                    CustomerNumber = deliveryAssurance.SupplierNumber,
                    IONumber       = deliveryAssurance.IONumber,

                    KundorderNr  = deliveryAssurance.KundorderNr,
                    GHGvarde     = deliveryAssurance.GHGvarde,
                    KundsOrderNr = deliveryAssurance.KundsOrderNr,

                    TermAndCondition = deliveryAssurance.Leveransvillkor,
                    Gardshamtning    = deliveryAssurance.Gardshamtning,
                    TransportType    = GetTransportType(deliveryAssurance.Gardshamtning, deliveryAssurance.Leveransvillkor),

                    LorryTypeDesc   = lorryType?.Description,
                    Address         = deliveryAddress ?? new DeliveryAddress(),
                    DeliveryAddress = deliveryAddress != null ? $"{deliveryAddress.Street}, {deliveryAddress.City}" : string.Empty,

                    ItemName = mergedItem?.Description ?? deliveryAssurance.ItemName,
                    Quantity = deliveryAssurance.Quantity.ConvertToTon(),

                    SlamDesc          = await _deliveryNoteRepository.GetM3DescriptionAsync(DeliveryAssuranceRadioButtons.Slam, deliveryAssurance.SLAM),
                    StraforkortatDesc = await _deliveryNoteRepository.GetM3DescriptionAsync(DeliveryAssuranceRadioButtons.Straforkortat, deliveryAssurance.Straforkortat),
                    TorkatDesc        = await _deliveryNoteRepository.GetM3DescriptionAsync(DeliveryAssuranceRadioButtons.Torkat, deliveryAssurance.Torkat),
                    RedDesc           = await _deliveryNoteRepository.GetM3DescriptionAsync(DeliveryAssuranceRadioButtons.Red, deliveryAssurance.RED),

                    OtherInfo     = deliveryAssurance.Ovrigt,
                    HarvestYear   = deliveryAssurance.Skordear,
                    WarehouseDesc = warehouse?.Description,
                    DepaAvtal     = !string.IsNullOrWhiteSpace(depaAvtal?.Keyvalue) ? depaAvtal.Description : string.Empty,

                    DeliveryDate     = DeliveryAssuranceHelper.GetValidDate(deliveryAssurance.Leveransdatum),
                    DeliveryTypeDesc = depaAvtals.Length > 1 ? DeliveryTypes.Depa : DeliveryTypes.Spon,
                    Status           = deliveryAssurance.Status
                },
                ChangeUrl = DeliveryAssuranceHelper.BuildQueryUrl($"{deliveryAssuranceUrl}Change", new Dictionary <string, string>()
                {
                    { "a", deliveryAssurance.IONumber },
                    { "l", deliveryAssurance.LineNumber.ToString() }
                })
            };

            return(model);
        }
        private async Task <DeliveryAssuranceViewModel> CreateDeliveryAssuranceViewModel(DeliveryAssuranceListPage currentPage,
                                                                                         Core.DataModels.DeliveryAssuranceDtos.DeliveryAssurance deliveryAssurance, string action)
        {
            var depaAvtals = await GetDepaAvtalDelAssAsync(deliveryAssurance, action);

            var sessionKey = $"{nameof(DeliveryAssuranceDetail)}-{action}-{deliveryAssurance.IONumber}";
            var deliveryAssuranceDetail = Session[sessionKey] as DeliveryAssuranceDetail;
            var savedDeliveryAssurance  = deliveryAssuranceDetail != null
                ? new Core.DataModels.DeliveryAssuranceDtos.DeliveryAssurance()
            {
                SupplierNumber = deliveryAssuranceDetail.CustomerNumber,
                IONumber       = deliveryAssuranceDetail.IONumber,
                Item           = deliveryAssuranceDetail.Item,
                Sort           = deliveryAssuranceDetail.Sort,
                Leveransdatum  = Convert.ToDateTime(deliveryAssuranceDetail.DeliveryDate),
                RequestDate    = Convert.ToDateTime(deliveryAssuranceDetail.DeliveryDate),
                OrderTyp       = deliveryAssuranceDetail.OrderType,
                Levsatt        = deliveryAssuranceDetail.LorryType,
                Gardshamtning  = deliveryAssuranceDetail.Gardshamtning == "1",
                Status         = deliveryAssuranceDetail.Status
            }: deliveryAssurance;

            var model = new DeliveryAssuranceViewModel(currentPage)
            {
                DeliveryAssurance = deliveryAssuranceDetail ?? new DeliveryAssuranceDetail()
                {
                    CustomerName   = GetCustomerName(deliveryAssurance.SupplierNumber),
                    CustomerNumber = deliveryAssurance.SupplierNumber,
                    IONumber       = deliveryAssurance.IONumber,
                    LineNumber     = deliveryAssurance.LineNumber,

                    TermAndCondition = deliveryAssurance.Leveransvillkor,
                    Gardshamtning    = deliveryAssurance.Gardshamtning ? "1" : "0",

                    LorryType       = deliveryAssurance.Levsatt,
                    DeliveryAddress = deliveryAssurance.DeliveryAddress,

                    ItemName = deliveryAssurance.ItemName,
                    Item     = deliveryAssurance.Item,
                    Sort     = deliveryAssurance.Sort,
                    Quantity = deliveryAssurance.Quantity.ConvertToTon(),

                    Slam          = deliveryAssurance.SLAM,
                    Straforkortat = deliveryAssurance.Straforkortat,
                    Torkat        = deliveryAssurance.Torkat,
                    Red           = deliveryAssurance.RED,

                    OtherInfo   = !string.IsNullOrWhiteSpace(deliveryAssurance.Ovrigt) ? deliveryAssurance.Ovrigt.ReplaceBrToReturn() : string.Empty,
                    HarvestYear = deliveryAssurance.Skordear,
                    Warehouse   = deliveryAssurance.Warehouse != null && deliveryAssurance.Warehouse.Equals(DefaultWarehouse) ? string.Empty : deliveryAssurance.Warehouse,
                    DepaAvtal   = deliveryAssurance.Depaavtal,

                    OrderType    = deliveryAssurance.OrderTyp,
                    DeliveryType = depaAvtals.Count > 1 ? nameof(DeliveryTypes.Depa) : nameof(DeliveryTypes.Spon),
                    RequestDate  = $"{deliveryAssurance.RequestDate:yyyy-MM-dd}",
                    DeliveryDate = action.Equals(DeliveryAssuranceAction.Approve) ?
                                   $"{deliveryAssurance.RequestDate:yyyy-MM-dd}" : $"{deliveryAssurance.Leveransdatum:yyyy-MM-dd}",

                    Article    = !string.IsNullOrWhiteSpace(deliveryAssurance.Item) && !string.IsNullOrWhiteSpace(deliveryAssurance.Sort) ? $"{deliveryAssurance.Item};-;{deliveryAssurance.Sort}" : string.Empty,
                    Action     = action,
                    CurrentUrl = Request?.Url?.PathAndQuery ?? string.Empty,
                    Status     = deliveryAssurance.Status
                },
                IsInternal = SettingPage.IsInternal,
                IsNew      = action.Equals(DeliveryAssuranceAction.Create),

                LorryTypes        = GetLorryTypes(),
                DeliveryAddresses = GetDeliveryAddresses(savedDeliveryAssurance.SupplierNumber),
                WarehouseList     = !string.IsNullOrWhiteSpace(savedDeliveryAssurance.Item) && !string.IsNullOrWhiteSpace(savedDeliveryAssurance.Sort) ?
                                    await GetWarehouseList(savedDeliveryAssurance) :
                                    new List <KeyValuePair <string, string> >()
                {
                    new KeyValuePair <string, string>("", "-- Välj mottagningsplats--")
                },
                //WarehouseList = await GetWarehouseList(savedDeliveryAssurance),
                DepaAvtals       = depaAvtals,
                DeliveryValues   = GetDeliveryValues(),
                HarvestYears     = await GetYears(),
                M3RedValues      = await _deliveryNoteRepository.GetM3ValuesAsync(DeliveryAssuranceRadioButtons.Red),
                M3SlamValues     = await _deliveryNoteRepository.GetM3ValuesAsync(DeliveryAssuranceRadioButtons.Slam),
                M3StraforkValues = await _deliveryNoteRepository.GetM3ValuesAsync(DeliveryAssuranceRadioButtons.Straforkortat),
                M3TorkatValues   = await _deliveryNoteRepository.GetM3ValuesAsync(DeliveryAssuranceRadioButtons.Torkat),
                Articles         = GetMergedItems(savedDeliveryAssurance.SupplierNumber, DateTime.Now)
            };

            if (!string.IsNullOrWhiteSpace(model.DeliveryAssurance.IONumber)) //for create from existed delivery, update, approve
            {
                var enalbedDeliveryDate = (SettingPage.IsInternal || model.DeliveryAssurance.OrderType != "206" || !DeliveryAssuranceHelper.IsInStoragePeriod());

                model.EnabledLorryType = model.DeliveryAssurance.OrderType != "206" && model.DeliveryAssurance.LorryType != "630";

                model.EnabledWarehouse = deliveryAssuranceDetail != null ? deliveryAssuranceDetail.EnabledWarehouse == "1" :
                                         ((SettingPage.IsInternal && model.DeliveryAssurance.OrderType != "206") ||
                                          (!SettingPage.IsInternal && !savedDeliveryAssurance.Gardshamtning &&
                                           DeliveryAssuranceHelper.IsInHarvestPeriod()));

                model.EnalbedDeliveryDate = enalbedDeliveryDate;

                model.DeliveryDateCssClass = enalbedDeliveryDate ? GetDatePickerCssClass(action, savedDeliveryAssurance) : string.Empty;
            }
            else //for create new one
            {
                model.EnabledLorryType     = model.EnabledWarehouse = model.EnalbedDeliveryDate = true;
                model.DeliveryDateCssClass = GetDatePickerCssClass(action, savedDeliveryAssurance);
            }

            Session.Remove(sessionKey);

            return(model);
        }