public FrayteResult SendLabelEmail(ExpressEmailModel emailModel)
        {
            FrayteResult result = new FrayteResult();

            emailModel.ImageHeader = "FrayteLogo";
            try
            {
                var operationzone = UtilityRepository.GetOperationZone();

                var result1 = (from s in dbContext.Expresses
                               join Usr in dbContext.Users on s.CustomerId equals Usr.UserId
                               join Rl in dbContext.UserRoles on Usr.UserId equals Rl.UserId
                               join UA in dbContext.UserAdditionals on Usr.UserId equals UA.UserId
                               join OU in dbContext.Users on UA.OperationUserId equals OU.UserId
                               join OUA in dbContext.UserAdditionals on OU.UserId equals OUA.UserId
                               where Usr.UserId == emailModel.ShipmentDetail.CustomerId
                               select new
                {
                    UserName = OU.ContactName,
                    Name = Usr.ContactName,
                    UserEmail = OU.Email,
                    UserPosition = OU.Position,
                    CutomerCompany = Usr.CompanyName
                }).FirstOrDefault();

                var detail = dbContext.CustomerCompanyDetails.Where(p => p.UserId == emailModel.ShipmentDetail.CustomerId).FirstOrDefault();

                if (detail != null)
                {
                    emailModel.StaffUserEmail  = detail.OperationStaffEmail;
                    emailModel.UserPosition    = detail.UserPosition;
                    emailModel.StaffUserName   = detail.OperationStaff;
                    emailModel.CompanyName     = detail.CompanyName;
                    emailModel.UserPhone       = detail.OperationStaffPhone;
                    emailModel.SiteAddress     = detail.SiteAddress;
                    emailModel.TrackingWebsite = detail.TrackingUrl + "/#/tracking/" + emailModel.ShipmentDetail.AWBNumber.Replace(" ", "");
                    emailModel.TrackingURL     = detail.TrackingUrl + "/#/tracking/" + emailModel.ShipmentDetail.TrackingNumber.Replace("Order_", "");
                }
                else
                {
                    emailModel.UserEmail       = result1.UserEmail;
                    emailModel.UserName        = result1.UserName;
                    emailModel.UserPosition    = result1.UserPosition;
                    emailModel.SiteCompany     = "FRAYTE GLOBAL";
                    emailModel.UserPhone       = UtilityRepository.GetOperationZone().OperationZoneId == 1 ? "(+852) 2148 4880" : "(+44) 01792 277295";
                    emailModel.SiteAddress     = UtilityRepository.GetOperationZone().OperationZoneId == 1 ? "www.FRAYTE.com" : "www.FRAYTE.co.uk";
                    emailModel.TrackingWebsite = UtilityRepository.GetOperationZone().OperationZoneId == 1 ? "https://frayte.com/tracking-detail/" + emailModel.ShipmentDetail.AWBNumber.Replace(" ", "") : "https://frayte.co.uk/tracking-detail/" + emailModel.ShipmentDetail.AWBNumber.Replace(" ", "");
                    emailModel.TrackingURL     = AppSettings.TrackingUrl + "/tracking-detail/" + emailModel.ShipmentDetail.TrackingNumber.Replace("Order_", "");;
                }

                emailModel.TotalCarton = emailModel.ShipmentDetail.Packages.Sum(p => p.CartonValue);
                emailModel.TotalWeight = emailModel.ShipmentDetail.Packages.Sum(p => p.CartonValue * p.Weight);
                emailModel.CreatedOn   = emailModel.ShipmentDetail.CreatedOnUtc != null?emailModel.ShipmentDetail.CreatedOnUtc.ToString("dd-MMM-yyyy hh:mm") : "";

                emailModel.CustomerName = result1.Name;
                string template = File.ReadAllText(AppSettings.EmailServicePath + "/EmailTeamplate/Express/EXS_E1_3.cshtml");

                var    templateService = new TemplateService();
                var    EmailBody       = templateService.Parse(template, emailModel, null, null);
                string EmailSubject    = string.Empty;
                EmailSubject = result1.CutomerCompany + " - Shipment Detail with Label - " + emailModel.ShipmentDetail.AWBNumber;

                var To     = emailModel.To;
                var Status = "";

                #region Attach Labels

                string Attachment = PackageLabelPath_EXS_E1(emailModel.ShipmentDetail.ExpressId);

                #endregion

                Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("Customer Email " + emailModel.ShipmentDetail.FrayteNumber));
                //Send mail to Customer
                Send_FrayteEmail(To, AppSettings.TOCC, "FRAYTE - Booking (" + UtilityRepository.OperationZoneName(operationzone.OperationZoneId) + ")", EmailSubject, EmailBody, Attachment, Status, emailModel.ShipmentDetail.CustomerId);
                result.Status = true;
                Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception(EmailBody));
            }
            catch (Exception ex)
            {
                result.Status = false;
            }

            return(result);
        }
        public FrayteResult SendExportManifest(ExpressEmailModel emailModel, string FilePath, int UserId)
        {
            FrayteResult result = new FrayteResult();

            emailModel.ImageHeader = "FrayteLogo";
            try
            {
                var operationzone = UtilityRepository.GetOperationZone();

                var result1 = (from Usr in dbContext.Users
                               join Rl in dbContext.UserRoles on Usr.UserId equals Rl.UserId
                               join UA in dbContext.UserAdditionals on Usr.UserId equals UA.UserId into UAA
                               from UA in UAA.DefaultIfEmpty()
                               join OU in dbContext.Users on UA.OperationUserId equals OU.UserId into OUU
                               from OU in OUU.DefaultIfEmpty()
                               where Usr.UserId == emailModel.ManifestDetail.CustomerId
                               select new
                {
                    UserName = OU.ContactName,
                    CustomerName = Usr.ContactName,
                    StaffEmail = OU.Email,
                    UserEmail = Rl.RoleId == 3 ? Usr.UserEmail : Usr.Email,
                    UserPosition = OU.Position,
                    CutomerCompany = Usr.CompanyName
                }).FirstOrDefault();

                var result2 = (from Usr in dbContext.Users
                               join Rl in dbContext.UserRoles on Usr.UserId equals Rl.UserId
                               join UA in dbContext.UserAdditionals on Usr.UserId equals UA.UserId into UAA
                               from UA in UAA.DefaultIfEmpty()
                               join OU in dbContext.Users on UA.OperationUserId equals OU.UserId into OUU
                               from OU in OUU.DefaultIfEmpty()
                               where Usr.UserId == UserId
                               select new
                {
                    UserName = Usr.ContactName,
                    StaffEmail = OU.Email,
                    UserEmail = Rl.RoleId == 3 ? Usr.UserEmail : Usr.Email,
                    UserPosition = OU.Position,
                    CutomerCompany = Usr.CompanyName
                }).FirstOrDefault();


                if (operationzone.OperationZoneId == 1)
                {
                    emailModel.UserEmail    = result1.StaffEmail;
                    emailModel.UserName     = result1.UserName;
                    emailModel.UserPosition = result1.UserPosition;
                    emailModel.UserPhone    = "(+852) 2148 4880";
                    //Res.SiteAddress = AppSettings.TrackingUrl;
                    emailModel.SiteCompany = "FRAYTE GLOBAL";
                    emailModel.SiteAddress = "www.FRAYTE.com";
                }
                if (operationzone.OperationZoneId == 2)
                {
                    emailModel.UserEmail    = result1.StaffEmail;
                    emailModel.UserName     = result1.UserName;
                    emailModel.UserPosition = result1.UserPosition;
                    emailModel.SiteCompany  = "FRAYTE GLOBAL";
                    emailModel.UserPhone    = "(+44) 01792 277295";
                    // Res.SiteAddress = AppSettings.TrackingUrl;
                    emailModel.SiteAddress = "www.FRAYTE.co.uk";
                }

                emailModel.CreatedOn = emailModel.ManifestDetail.CreatedOn != null?emailModel.ManifestDetail.CreatedOn.Value.ToString("dd-MMM-yyyy hh:mm") : "";

                emailModel.CustomerName = result2.UserName;
                string template = File.ReadAllText(AppSettings.EmailServicePath + "/EmailTeamplate/Express/EXS_E5.cshtml");

                var    templateService = new TemplateService();
                var    EmailBody       = templateService.Parse(template, emailModel, null, null);
                string EmailSubject    = string.Empty;
                EmailSubject = result1.CutomerCompany + " - Origin Manifest  - " + emailModel.ManifestDetail.MAWB;

                var To     = result2.UserEmail;
                var Status = "";

                #region Attach Labels

                string Attachment = FilePath;
                //string Attachment = "";

                #endregion

                //Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("Customer Email " + emailModel.ShipmentDetail.FrayteNumber));
                //Send mail to Customer
                Send_FrayteEmail(To, AppSettings.TOCC, "FRAYTE - Booking (" + UtilityRepository.OperationZoneName(operationzone.OperationZoneId) + ")", EmailSubject, EmailBody, Attachment, Status, emailModel.ManifestDetail.CustomerId);
                result.Status = true;
                Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception(EmailBody));
            }
            catch (Exception ex)
            {
                result.Status = false;
            }
            return(result);
        }