public List <CityDropdown> GetBMTCitiesByLineId(string id)
        {
            var decryptedId = Encryption.EncryptDecryptQueryString.Decrypt(id, "r0b1nr0y").ToInt();
            var stops       = new DatamanagementDLL.Repository.OrderStopRepository().GetOrderStopsByQuoteOrderLineId(decryptedId);
            var lldStop     = stops.OrderBy(s => s.StopSequence).FirstOrDefault(s => s.EventCode == "LLD" || s.EventCode == "HLT");

            return(new DatamanagementDLL.Repository.CityRepository().GetCitiesByStateId(lldStop.City == null ? 0 : lldStop.City.StateID.ToInt())
                   .Where(c => c.UseCityForDupCitySTZip3Ind == true)
                   .Select(c => new CityDropdown
            {
                CityId = c.CityID,
                CityStateZip = c.CityStateZip
            })
                   .ToList());
        }
        public StopData GetStopData(string id)
        {
            var decryptedId = Encryption.EncryptDecryptQueryString.Decrypt(id, "r0b1nr0y");
            var stops       = new DatamanagementDLL.Repository.OrderStopRepository().GetOrderStopsByQuoteOrderLineId(decryptedId.ToInt());
            var bmtStop     = stops.FirstOrDefault(s => s.EventCode == "BMT");
            var firstStop   = stops.OrderBy(s => s.StopSequence).FirstOrDefault(s => s.EventCode != "BMT" && (s.EventCode == "LUL" || s.EventCode == "HLT"));
            var lastStop    = stops.OrderByDescending(s => s.StopSequence).FirstOrDefault(s => s.EventCode != "BMT" && (s.EventCode == "LLD" || s.EventCode == "DLT"));
            var bmtCity     = bmtStop == null ? null : new DatamanagementDLL.Repository.CityRepository().GetCityById(bmtStop.CityId.ToInt());

            return(new StopData
            {
                BMTCity = bmtCity,
                BMTStopDate = bmtStop == null ? (DateTime?)null : bmtStop.ArrivalDate,
                EstimatedArrivalDate = lastStop.ArrivalDate,
                Stops = stops.OrderBy(s => s.StopSequence).ToList()
            });
        }
        public bool SaveTenderData([FromBody] PostTenderData data)
        {
            try
            {
                var decoded   = HttpUtility.UrlDecode(data.EncryptedId);
                var lineId    = Encryption.EncryptDecryptQueryString.Decrypt(decoded, "r0b1nr0y").ToInt();
                var orderRepo = new DatamanagementDLL.Repository.QuoteOrderLineRepository();
                var offerRepo = new DatamanagementDLL.Repository.OfferRepository();
                var stopRepo  = new DatamanagementDLL.Repository.OrderStopRepository();
                var orderLine = orderRepo.GetQuoteOrderLineById(lineId);
                var offer     = offerRepo.GetAwardedOfferByQuoteOrderLineID(lineId);
                var stops     = stopRepo.GetOrderStopsByQuoteOrderLineId(lineId);
                offer.CarrierAccepted = data.Accepted;
                if (data.Accepted)
                {
                    offer.CarrierAcceptedDate = DateTime.Now;
                }
                if (!data.Accepted)
                {
                    offer.CarrierDeclinedDate = DateTime.Now;
                }
                offerRepo.SaveOffer(offer);

                if (!data.Accepted)
                {
                    try
                    {
                        var carrierReturn = API.SystemLink.Public.Custom.SetCarrierOnLegHeader(orderLine.APILoadId.ToInt(), "UNKNOWN");
                        var payDetails    = API.SystemLink.Public.PayDetails.GetPayDetailsByLegHeaderNumberOrderNumber(orderLine.APILoadId.ToInt(), orderLine.OrderNumber.ToInt());

                        foreach (var payDetail in payDetails)
                        {
                            API.SystemLink.Public.PayDetails.DeletePayDetailByNumber(payDetail.PayDetailNumber);
                        }
                    }
                    catch (Exception ex)
                    {
                        var ok = ex;
                    }

                    offer.Awarded             = false;
                    offer.AwardedDate         = null;
                    offer.CarrierDropped      = true;
                    offer.CarrierDropReasonID = 3;
                    offerRepo.SaveOffer(offer);

                    orderLine.ERPLoadStatus = "AVL";
                    orderLine.ERPAssignedTo = "AAVAILABLE";
                    orderLine.CarrierId     = 0;
                    orderLine.LoadStatusID  = 1;
                    orderRepo.SaveQuoteOrderLine(orderLine);

                    var trailerType = new DatamanagementDLL.Repository.TrailerTypeRepository().GetTrailerTypeById(orderLine.TrailerTypeId.ToInt());
                    var empRepo     = new DatamanagementDLL.Repository.EmployeeRepository();
                    var csr         = empRepo.GetEmployeeByEmployeeId(orderLine.AwardedCarrierRepId.ToInt());
                    var csManagers  = empRepo.GetCSManagers();
                    var toAddresses = new Dictionary <string, string>();
                    toAddresses.Add("*****@*****.**", "Corey");
                    //toAddresses.Add(csr.Email, csr.FullName);

                    //foreach(var manager in csManagers)
                    //{
                    //    toAddresses.Add(manager.Email, manager.FullName);
                    //}

                    var htmlString =
                        "<p>Order #" + orderLine.OrderNumber + ", has an offer that has been declined from: " + orderLine.Carrier.CarrierCode + " for " + string.Format("{0:C}", orderLine.Cost) + "</p>" +
                        "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">" +
                        "<tr><th>Load Offer</th><th>Origin</th><th>Destination</th><th>Miles</th><th>Equipment</th></tr>" +
                        "<tr>" +
                        "<td>" + offer.AwardedDate.ToSafeString() + "</td>" +
                        "<td>" + orderLine.OriginCityStateZip + "</td>" +
                        "<td>" + orderLine.DestinationCityStateZip + "</td>" +
                        "<td>" + orderLine.Miles.ToSafeString() + "</td>" +
                        "<td>" + trailerType.Description + "</td>" +
                        "</tr>" +
                        "</table>" +
                        "<br/><br/>" +
                        "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">" +
                        "<tr><th>Stop #</th><th>Type</th><th>Event</th><th>Earliest</th><th>Latest</th><th>City/St</th><th>Pieces</th><th>Weight</th></tr>";

                    foreach (var stop in stops.OrderBy(s => s.StopSequence))
                    {
                        htmlString +=
                            "<tr>" +
                            "<td>" + stop.StopSequence + "</td>" +
                            "<td>" + stop.StopType + "</td>" +
                            "<td>" + stop.EventCode + "</td>" +
                            "<td>" + stop.EarliestDate.ToSafeString() + "</td>" +
                            "<td>" + stop.LatestDate.ToSafeString() + "</td>" +
                            "<td>" + stop.StopCityST + "</td>" +
                            "<td>" + stop.Pieces + "</td>" +
                            "<td>" + stop.Weight + "</td>" +
                            "</tr>";
                    }

                    htmlString += "</table>";

                    API.AzureServices.Email.SendHTMLEmail("*****@*****.**", "Tender Response", toAddresses,
                                                          "Declined: " + orderLine.Carrier.CarrierCode + " Load #" + orderLine.OrderNumber,
                                                          htmlString);

                    return(true);
                }

                var contactRepo = new DatamanagementDLL.Repository.ContactRepository();

                var bmtStop  = stops.FirstOrDefault(s => s.EventCode == "BMT");
                var stopDate = data.BMTArrivalDate.Date;
                stopDate = stopDate.AddHours(data.BMTArrivalHours);
                stopDate = stopDate.AddMinutes(data.BMTArrivalMinutes);

                if (bmtStop == null)
                {
                    bmtStop = new DatamanagementDLL.OrderStop
                    {
                        QuoteOrderLineId    = orderLine.QuoteOrderLineId,
                        LegHeaderNumber     = orderLine.APILoadId.ToInt(),
                        OrderNumber         = orderLine.OrderNumber,
                        EventCode           = "BMT",
                        StopType            = "NONE",
                        CustomerId          = 0,
                        CityId              = data.BMTCity.CityID,
                        StopSequence        = 0,
                        Pieces              = 0,
                        PiecesUnit          = "PLT",
                        Weight              = 0,
                        WeightUnit          = "LBS",
                        CreatedByEmployeeId = -1,
                        CreatedDate         = DateTime.Now
                    }
                }
                ;

                bmtStop.ArrivalDate  = stopDate;
                bmtStop.DepartDate   = stopDate;
                bmtStop.EarliestDate = stopDate;
                bmtStop.LatestDate   = stopDate;

                try
                {
                    var tmwStop = API.SystemLink.Public.Stops.SaveStopFromEpiStop(bmtStop, data.BMTCity.ERPCityID.ToInt(), "UNKNOWN");
                    if (tmwStop != null)
                    {
                        bmtStop.StopNumber = tmwStop.StopNumber;
                    }
                }
                catch (Exception ex)
                {
                    var ok = ex;
                }

                stopRepo.SaveOrderStop(bmtStop);

                if (data.Driver1Cell.ToSafeString().Trim().Length > 0)
                {
                    var driver1 = contactRepo.GetDriverByCell(data.Driver1Cell);
                    if (driver1 == null)
                    {
                        driver1 = new DatamanagementDLL.Contact
                        {
                            DriverInd          = true,
                            Title              = "Driver",
                            TableID            = orderLine.CarrierId.ToInt(),
                            ContactType        = "Carrier",
                            CreateDate         = DateTime.Now,
                            CreateEmployeeId   = -1,
                            EmailBlastIncluded = false
                        }
                    }
                    ;

                    driver1.Cell      = data.Driver1Cell;
                    driver1.FirstName = data.Driver1Name.Split(' ')[0].ToSafeString().Trim();
                    driver1.LastName  = data.Driver1Name.Replace(driver1.FirstName, "").ToSafeString().Trim();
                    contactRepo.SaveContact(driver1);
                    orderLine.DriverId = driver1.ContactId;
                }

                if (data.Driver2Cell.ToSafeString().Trim().Length > 0)
                {
                    var driver2 = contactRepo.GetDriverByCell(data.Driver2Cell);
                    if (driver2 == null)
                    {
                        driver2 = new DatamanagementDLL.Contact
                        {
                            DriverInd          = true,
                            Title              = "Driver",
                            TableID            = orderLine.CarrierId.ToInt(),
                            ContactType        = "Carrier",
                            CreateDate         = DateTime.Now,
                            CreateEmployeeId   = -1,
                            EmailBlastIncluded = false,
                        }
                    }
                    ;

                    driver2.Cell      = data.Driver2Cell;
                    driver2.FirstName = data.Driver2Name.Split(' ')[0].ToSafeString().Trim();
                    driver2.LastName  = data.Driver2Name.Replace(driver2.FirstName, "").ToSafeString().Trim();
                    contactRepo.SaveContact(driver2);
                    orderLine.Driver2Id = driver2.ContactId;
                }

                orderLine.TruckNumber   = data.TruckNumber.ToSafeString().Trim();
                orderLine.TrailerNumber = data.TrailerNumber.ToSafeString().Trim();
                orderRepo.SaveQuoteOrderLine(orderLine);

                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }