Exemple #1
0
        public string Add(Model.JobDetails payload)
        {
            MySqlCommand    mySqlCmd = null;
            MySqlDataReader reader   = null;

            try
            {
                DateTime date = DateTime.Parse(payload.deliveryDate);

                Dictionary <string, string> insertParam = new Dictionary <string, string>();
                insertParam.Add("owner_id", payload.ownerUserId);
                insertParam.Add("job_type_id", payload.jobTypeId);
                insertParam.Add("amount", payload.amount.ToString());
                insertParam.Add("partner_amount", payload.amountPartner.ToString());
                insertParam.Add("cash_on_delivery", payload.cashOnDelivery ? "1" : "0");

                insertParam.Add("worker_assistance", payload.workerAssistant.ToString());
                insertParam.Add("assemble_bed", payload.assembleBed.ToString());
                insertParam.Add("assemble_dining_table", payload.assembleDiningTable.ToString());
                insertParam.Add("assemble_wardrobe", payload.assembleWardrobe.ToString());
                insertParam.Add("assemble_office_table", payload.assembleOfficeTable.ToString());
                insertParam.Add("bubble_wrapping", payload.bubbleWrapping.ToString());
                insertParam.Add("shrink_wrapping", payload.shrinkWrapping.ToString());

                insertParam.Add("fleet_type_id", payload.fleetTypeId);
                insertParam.Add("delivery_date", date.ToString("yyyy-MM-dd HH:mm:ss"));
                insertParam.Add("remarks", payload.remarks.ToString());
                insertParam.Add("created_by", payload.createdBy);
                insertParam.Add("modify_by", payload.createdBy);

                mySqlCmd = GenerateAddCmd(TABLE_NAME_JOB, insertParam);
                PerformSqlNonQuery(mySqlCmd);

                return(mySqlCmd.LastInsertedId.ToString());
            }
            catch (Exception e)
            {
                DBLogger.GetInstance().Log(DBLogger.ESeverity.Info, e.Message);
                DBLogger.GetInstance().Log(DBLogger.ESeverity.Info, e.StackTrace);
            }
            finally
            {
                CleanUp(reader, mySqlCmd);
            }

            return(null);
        }
Exemple #2
0
        public static void SendOrderReceived(string jobId, Model.User user,
                                             Model.JobDetails jobDetails, string fleetType, string jobType)
        {
            Task.Run(async() =>
            {
                // send email
                String apiKey = ConfigurationManager.AppSettings.Get("SendGridApiKey");
                dynamic sg    = new SendGrid.SendGridAPIClient(apiKey);

                Email from      = new Email("*****@*****.**", "JustLorry");
                String subject  = ConfigurationManager.AppSettings.Get("InvoiceSubject") + string.Format("(Payment received. Order ID: {0})", jobId);
                Email to        = new Email("*****@*****.**", "JustLorry");
                Content content = new Content("text/html", subject);
                Mail mail       = new Mail(from, subject, to, content);

                mail.TemplateId = ConfigurationManager.AppSettings.Get("InvoiceTemplateId");
                mail.Personalization[0].AddSubstitution("{{orderId}}", jobId);
                mail.Personalization[0].AddSubstitution("{{name}}", user.displayName);
                mail.Personalization[0].AddSubstitution("{{contact}}", user.contactNumber);
                mail.Personalization[0].AddSubstitution("{{email}}", user.email);
                mail.Personalization[0].AddSubstitution("{{date}}", jobDetails.deliveryDate);
                mail.Personalization[0].AddSubstitution("{{jobType}}", jobType);
                mail.Personalization[0].AddSubstitution("{{fleetType}}", fleetType);
                mail.Personalization[0].AddSubstitution("{{amount}}", jobDetails.amount.ToString());
                mail.Personalization[0].AddSubstitution("{{paymentLink}}", "");

                var addressFrom = jobDetails.addressFrom[0];
                mail.Personalization[0].AddSubstitution("{{from}}", addressFrom.address1 + ", " + addressFrom.address2 + ", " + addressFrom.address3);

                try
                {
                    var addressTo = jobDetails.addressTo[0];
                    if (addressTo != null)
                    {
                        mail.Personalization[0].AddSubstitution("{{to}}", addressTo.address1 + ", " + addressTo.address2 + ", " + addressTo.address3);
                    }
                }
                catch (Exception)
                {
                    mail.Personalization[0].AddSubstitution("{{to}}", "");
                }

                dynamic response = await sg.client.mail.send.post(requestBody: mail.Get());
            });
        }
Exemple #3
0
        public static void SendOrderConfirmed(string jobUniqueId, Model.User user,
                                              Model.JobDetails jobDetails, Model.User driver, Model.Fleet fleet, Model.JobType jobType, Model.FleetType fleetType)
        {
            Task.Run(async() =>
            {
                String apiKey = ConfigurationManager.AppSettings.Get("SendGridApiKey");
                dynamic sg    = new SendGrid.SendGridAPIClient(apiKey);

                Email from      = new Email("*****@*****.**");
                String subject  = ConfigurationManager.AppSettings.Get("ConfirmSubject") + string.Format("(Order ID: {0})", jobUniqueId);
                Email to        = new Email(user.email);
                Content content = new Content("text/html", subject);
                Mail mail       = new Mail(from, subject, to, content);

                mail.TemplateId = ConfigurationManager.AppSettings.Get("ConfirmTemplateId");
                mail.Personalization[0].AddSubstitution("{{orderId}}", jobUniqueId);
                mail.Personalization[0].AddSubstitution("{{date}}", jobDetails.deliveryDate);
                mail.Personalization[0].AddSubstitution("{{jobType}}", jobType.name);
                mail.Personalization[0].AddSubstitution("{{fleetType}}", fleetType.name);
                mail.Personalization[0].AddSubstitution("{{amount}}", jobDetails.amount.ToString());
                mail.Personalization[0].AddSubstitution("{{driver}}", driver.displayName);
                mail.Personalization[0].AddSubstitution("{{driverContact}}", driver.contactNumber);
                mail.Personalization[0].AddSubstitution("{{driverIdentification}}", driver.identityCard);
                mail.Personalization[0].AddSubstitution("{{fleetRegistration}}", fleet.registrationNumber);

                var addressFrom = jobDetails.addressFrom[0];
                mail.Personalization[0].AddSubstitution("{{from}}", addressFrom.address1 + ", " + addressFrom.address2 + ", " + addressFrom.address3);

                try
                {
                    var addressTo = jobDetails.addressTo[0];
                    if (addressTo != null)
                    {
                        mail.Personalization[0].AddSubstitution("{{to}}", addressTo.address1 + ", " + addressTo.address2 + ", " + addressTo.address3);
                    }
                }
                catch (Exception)
                {
                    mail.Personalization[0].AddSubstitution("{{to}}", "");
                }

                dynamic response = await sg.client.mail.send.post(requestBody: mail.Get());
            });
        }
Exemple #4
0
        public bool Update(Model.JobDetails payload)
        {
            MySqlCommand    mySqlCmd = null;
            MySqlDataReader reader   = null;

            try
            {
                DateTime date = DateTime.Parse(payload.deliveryDate);

                Dictionary <string, string> updateParam = new Dictionary <string, string>();
                updateParam.Add("owner_id", payload.ownerUserId);
                updateParam.Add("job_type_id", payload.jobTypeId);
                updateParam.Add("amount", payload.amount.ToString());
                updateParam.Add("cash_on_delivery", payload.cashOnDelivery ? "1" : "0");
                updateParam.Add("fleet_type_id", payload.fleetTypeId);
                updateParam.Add("worker_assistance", payload.workerAssistant.ToString());
                updateParam.Add("delivery_date", date.ToString("yyyy-MM-dd HH:mm:ss"));
                updateParam.Add("remarks", payload.remarks);
                updateParam.Add("modify_by", payload.modifiedBy);

                Dictionary <string, string> destinationParam = new Dictionary <string, string>();
                destinationParam.Add("id", payload.jobId);

                mySqlCmd = GenerateEditCmd(TABLE_NAME_JOB, updateParam, destinationParam);
                return(PerformSqlNonQuery(mySqlCmd) != 0);
            }
            catch (Exception e)
            {
                DBLogger.GetInstance().Log(DBLogger.ESeverity.Info, e.Message);
                DBLogger.GetInstance().Log(DBLogger.ESeverity.Info, e.StackTrace);
            }
            finally
            {
                CleanUp(reader, mySqlCmd);
            }

            return(false);
        }
Exemple #5
0
        private Model.JobDetails getDetails(MySqlDataReader reader)
        {
            Model.JobDetails     result      = null;
            List <Model.Address> fromAddList = new List <Model.Address>();
            List <Model.Address> toAddList   = new List <Model.Address>();

            while (reader.Read())
            {
                if (result == null)
                {
                    result = new Model.JobDetails()
                    {
                        jobId               = reader["id"].ToString(),
                        ownerUserId         = reader["owner_id"].ToString(),
                        jobTypeId           = reader["job_type_id"].ToString(),
                        fleetTypeId         = reader["fleet_type_id"].ToString(),
                        amount              = (float)reader["amount"],
                        amountPaid          = (float)reader["amount_paid"],
                        cashOnDelivery      = (int)reader["cash_on_delivery"] == 0 ? false : true,
                        workerAssistant     = (int)reader["worker_assistance"],
                        deliveryDate        = reader.GetDateTime("delivery_date").ToString("yyyy-MM-dd HH:mm:ss"),
                        remarks             = (string)reader["remarks"],
                        enabled             = (int)reader["enabled"] == 0 ? false : true,
                        deleted             = (int)reader["deleted"] == 0 ? false : true,
                        createdBy           = reader["created_by"].ToString(),
                        creationDate        = reader.GetDateTime("creation_date").ToString("yyyy-MM-dd HH:mm:ss"),
                        modifiedBy          = reader["modify_by"].ToString(),
                        lastModifiedDate    = reader.GetDateTime("last_modified_date").ToString("yyyy-MM-dd HH:mm:ss"),
                        jobStatusId         = reader["job_status_id"] == null ? null : reader["job_status_id"].ToString(),
                        amountPartner       = reader.GetFloat("partner_amount"),
                        assembleBed         = (int)reader["assemble_bed"],
                        assembleDiningTable = (int)reader["assemble_dining_table"],
                        assembleWardrobe    = (int)reader["assemble_wardrobe"],
                        assembleOfficeTable = (int)reader["assemble_office_table"],
                        bubbleWrapping      = (int)reader["bubble_wrapping"],
                        shrinkWrapping      = (int)reader["shrink_wrapping"],
                        addressFrom         = new List <Model.Address>(),
                        addressTo           = new List <Model.Address>()
                    };
                }

                try
                {
                    result.addressFrom.Add(new Model.Address()
                    {
                        addressId     = reader["addFromId"].ToString(),
                        address1      = (string)reader["add_from_1"],
                        address2      = (string)reader["add_from_2"],
                        address3      = (string)reader["add_from_3"],
                        stateId       = reader["state_from"].ToString(),
                        countryId     = reader["country_from"].ToString(),
                        postcode      = (string)reader["postcode_from"],
                        gpsLongitude  = (float)reader["longitude_from"],
                        gpsLatitude   = (float)reader["latitude_from"],
                        contactPerson = (string)reader["customerFrom"],
                        contact       = (string)reader["contactFrom"]
                    });
                }
                catch (Exception)
                {
                    // possible do not have from
                }

                try
                {
                    result.addressTo.Add(new Model.Address()
                    {
                        addressId     = reader["addToId"].ToString(),
                        address1      = (string)reader["add_to_1"],
                        address2      = (string)reader["add_to_2"],
                        address3      = (string)reader["add_to_3"],
                        stateId       = reader["state_to"].ToString(),
                        countryId     = reader["country_to"].ToString(),
                        postcode      = (string)reader["postcode_to"],
                        gpsLongitude  = (float)reader["longitude_to"],
                        gpsLatitude   = (float)reader["latitude_to"],
                        contactPerson = (string)reader["customerTo"],
                        contact       = (string)reader["contactTo"]
                    });
                }
                catch (Exception)
                {
                    // possible do not have to
                }
            }

            return(result);
        }
Exemple #6
0
        public Response Post([FromBody] Model.JobDetails jobDetails, string promoCode = null)
        {
            try
            {
                // first add the user if not existed
                var userId  = jobDetails.ownerUserId;
                var userObj = userDao.GetUserById(userId);
                if (userObj == null)
                {
                    response = Utility.Utils.SetResponse(response, false, Constant.ErrorCode.EParameterError);
                    return(response);
                }

                // validate the voucher
                if (promoCode != null)
                {
                    var voucherResult = new Vouchers();

                    // TODO: bug here: as the amount pass in was discounted amount, so it might below the expected use amount
                    // best way is not taking the amount required, and recalculate here to avoid injection attack
                    var responseCode = validateVoucher(promoCode, jobDetails.amount, out voucherResult);
                    if (responseCode != Constant.ErrorCode.ESuccess)
                    {
                        response = Utility.Utils.SetResponse(response, false, responseCode);
                        return(response);
                    }

                    if (voucherDao.IncreaseUsedCount(promoCode) == false)
                    {
                        DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, "voucherDao.IncreaseUsedCount(promoCode) in Common controller: " + promoCode);
                        response = Utility.Utils.SetResponse(response, false, Constant.ErrorCode.EVoucherNotValid);
                        return(response);
                    }
                }

                // get the gps coordinate if not passed in
                // get the state id and country id if not passed in
                foreach (Model.Address address in jobDetails.addressFrom)
                {
                    if (address.gpsLongitude == 0 ||
                        address.gpsLatitude == 0 ||
                        address.stateId == null ||
                        address.countryId == null)
                    {
                        // request gps cordinate
                        AddressComponents mapsObj = Utils.GetGpsCoordinate(address.address1, address.address2, address.address3, address.postcode);
                        if (mapsObj == null)
                        {
                            // find from local database
                            Postcode postcodeClass = new Postcode();
                            string   nameLocal;
                            var      result = postcodeClass.PostcodeNameList.TryGetValue(address.postcode, out nameLocal);
                            if (result == false)
                            {
                                response = Utility.Utils.SetResponse(response, false, Constant.ErrorCode.EGeneralError);
                                return(response);
                            }
                            mapsObj = Utils.GetGpsCoordinate(nameLocal);
                        }

                        if (address.gpsLongitude == 0)
                        {
                            address.gpsLongitude = mapsObj.geometry.location.lng;
                        }

                        if (address.gpsLatitude == 0)
                        {
                            address.gpsLatitude = mapsObj.geometry.location.lat;
                        }

                        if (address.countryId == null)
                        {
                            var countryObj = countryDao.GetCountries().Find(t => t.name.Contains(mapsObj.address_components.Find(c => c.types.Contains("country")).long_name));
                            address.countryId = countryObj.countryId;
                        }

                        if (address.stateId == null)
                        {
                            var stateList = stateDao.GetByCountryId(address.countryId);
                            try
                            {
                                var stateObj = stateList.Find(t => t.name.Contains(mapsObj.address_components.Find(a => a.types.Contains("administrative_area_level_1")).long_name));
                                if (stateObj == null)
                                {
                                    // cannot find from google api, use local database
                                    Postcode postcodeClass = new Postcode();
                                    string   stateLocal;
                                    var      localDic = postcodeClass.PostcodeList.TryGetValue(address.postcode, out stateLocal);
                                    address.stateId = stateList.Find(t => t.name.Contains(stateLocal)).stateId;
                                }
                                else
                                {
                                    address.stateId = stateObj.stateId;
                                }
                            }
                            catch (Exception)
                            {
                                // cannot find from google api, use local database
                                Postcode postcodeClass = new Postcode();
                                string   stateLocal;
                                var      localDic = postcodeClass.PostcodeList.TryGetValue(address.postcode, out stateLocal);
                                address.stateId = stateList.Find(t => t.name.Contains(stateLocal)).stateId;
                            }
                        }
                    }
                }

                if (jobDetails.addressTo == null)
                {
                    jobDetails.addressTo = new List <Model.Address>();
                }

                foreach (Model.Address address in jobDetails.addressTo)
                {
                    if (address.gpsLongitude == 0 ||
                        address.gpsLatitude == 0 ||
                        address.stateId == null ||
                        address.countryId == null)
                    {
                        // request gps cordinate
                        AddressComponents mapsObj = Utils.GetGpsCoordinate(address.address1, address.address2, address.address3, address.postcode);
                        if (mapsObj == null)
                        {
                            // find from local database
                            Postcode postcodeClass = new Postcode();
                            string   nameLocal;
                            var      result = postcodeClass.PostcodeNameList.TryGetValue(address.postcode, out nameLocal);
                            if (result == false)
                            {
                                response = Utility.Utils.SetResponse(response, false, Constant.ErrorCode.EGeneralError);
                                return(response);
                            }
                            mapsObj = Utils.GetGpsCoordinate(nameLocal);
                        }

                        if (address.gpsLongitude == 0)
                        {
                            address.gpsLongitude = mapsObj.geometry.location.lng;
                        }

                        if (address.gpsLatitude == 0)
                        {
                            address.gpsLatitude = mapsObj.geometry.location.lat;
                        }

                        if (address.countryId == null)
                        {
                            var countryObj = countryDao.GetCountries().Find(t => t.name.Contains(mapsObj.address_components.Find(c => c.types.Contains("country")).long_name));
                            address.countryId = countryObj.countryId;
                        }

                        if (address.stateId == null)
                        {
                            var stateList = stateDao.GetByCountryId(address.countryId);

                            try
                            {
                                var stateObj = stateList.Find(t => t.name.Contains(mapsObj.address_components.Find(a => a.types.Contains("administrative_area_level_1")).long_name));
                                if (stateObj == null)
                                {
                                    // cannot find from google api, use local database
                                    Postcode postcodeClass = new Postcode();
                                    string   stateLocal;
                                    postcodeClass.PostcodeList.TryGetValue(address.postcode, out stateLocal);
                                    address.stateId = stateList.Find(t => t.name.Contains(stateLocal)).stateId;
                                }
                                else
                                {
                                    address.stateId = stateObj.stateId;
                                }
                            }
                            catch (Exception)
                            {
                                // cannot find from google api, use local database
                                Postcode postcodeClass = new Postcode();
                                string   stateLocal;
                                postcodeClass.PostcodeList.TryGetValue(address.postcode, out stateLocal);
                                address.stateId = stateList.Find(t => t.name.Contains(stateLocal)).stateId;
                            }
                        }
                    }
                }

                // handle if partner amount is not present
                bool notifyPartners = false;
                if (jobDetails.amountPartner == 0)
                {
                    if (jobDetails.jobTypeId == ((int)JustApi.Constants.Configuration.DeliveryJobType.Standard).ToString())
                    {
                        // standard delivery

                        // find the partner price for distance in this distance
                        StandardDeliveryController tempController = new StandardDeliveryController();
                        var priceDetails = tempController.GetPrice(jobDetails.distance.ToString(), jobDetails.fleetTypeId,
                                                                   jobDetails.addressFrom[0].buildingType, jobDetails.addressTo[0].buildingType, jobDetails.workerAssistant.ToString(),
                                                                   jobDetails.assembleBed.ToString(), jobDetails.assembleDiningTable.ToString(), jobDetails.assembleWardrobe.ToString(),
                                                                   jobDetails.assembleOfficeTable.ToString(),
                                                                   jobDetails.bubbleWrapping.ToString(), jobDetails.shrinkWrapping.ToString());

                        jobDetails.amountPartner = priceDetails.partnerTotal;
                    }
                    else if (jobDetails.jobTypeId == ((int)JustApi.Constants.Configuration.DeliveryJobType.Disposal).ToString())
                    {
                        // disposal
                        DisposalDeliveryController tempController = new DisposalDeliveryController();
                        var priceDetails = tempController.GetPrice(jobDetails.fleetTypeId, jobDetails.addressFrom[0].buildingType, promoCode);

                        jobDetails.amountPartner = priceDetails.partnerTotal;
                    }
                }
                else
                {
                    // only when admin add job then push notification
                    // else notification push when user pay using payment gateway
                    notifyPartners = true;
                }

                // add the job details
                jobDetails.createdBy  = userId;
                jobDetails.modifiedBy = userId;
                var jobId = jobDetailsDao.Add(jobDetails);
                if (jobId == null)
                {
                    response = Utility.Utils.SetResponse(response, false, Constant.ErrorCode.EGeneralError);
                    return(response);
                }

                // add the job status
                if (null == jobDetailsDao.AddOrder(jobId, userId))
                {
                    response = Utility.Utils.SetResponse(response, false, Constant.ErrorCode.EGeneralError);
                    return(response);
                }

                // add the address from, to
                foreach (Model.Address add in jobDetails.addressFrom)
                {
                    add.createdBy = userId;
                    var result = addressDao.Add(add, jobId, userObj.displayName, userObj.contactNumber, Dao.AddressDao.EType.From);
                    if (result == null)
                    {
                        response = Utility.Utils.SetResponse(response, false, Constant.ErrorCode.EGeneralError);
                        return(response);
                    }
                }

                foreach (Model.Address add in jobDetails.addressTo)
                {
                    add.createdBy = userId;
                    var result = addressDao.Add(add, jobId, userObj.displayName, userObj.contactNumber, Dao.AddressDao.EType.To);
                    if (result == null)
                    {
                        response = Utility.Utils.SetResponse(response, false, Constant.ErrorCode.EGeneralError);
                        return(response);
                    }
                }

                // generate the unique job id
                var uniqueId = Utils.EncodeUniqueId(jobId);

                // request the job payment
                PaymentController controller = new PaymentController();
                var paymentReq = controller.Post(uniqueId);

                // send notification to creator
                var clientIdentifiers = userDao.GetDeviceIdentifier(userId);
                var msg = NotificationMsg.NewJob_Desc + uniqueId;
                if (clientIdentifiers != null &&
                    clientIdentifiers.Count != 0)
                {
                    // user have app installed and identifier found, send push notification
                    var extraData = Helper.PushNotification.ConstructExtraData(Helper.PushNotification.ECategories.OrderCreated, uniqueId);
                    Utility.UtilNotification.BroadCastMessage(clientIdentifiers.ToArray(), extraData, NotificationMsg.NewJob_Title, msg);
                }

                if (ConfigurationManager.AppSettings.Get("Debug") != "0")
                {
                    // send sms together because no history of push notification
                    UtilSms.SendSms(userObj.contactNumber, msg);
                }

                // send email to user
                var fleetType = fleetTypeDao.Get(jobDetails.fleetTypeId);
                var jobType   = jobTypeDao.Get().Find(t => t.jobTypeId == jobDetails.jobTypeId);
                UtilEmail.SendInvoice(uniqueId, (string)paymentReq.payload, userObj, jobDetails, fleetType.name, jobType.name);

                if (notifyPartners)
                {
                    // update the job order status
                    if (false == jobDeliveryDao.UpdateJobStatus(jobId, ((int)Constants.Configuration.JobStatus.PaymentVerifying).ToString()))
                    {
                        DBLogger.GetInstance().Log(DBLogger.ESeverity.Critical, string.Format("Unable to update job status. Job id: {0}", jobId));
                    }

                    // send notification to partners
                    var extraDataPartner       = Helper.PushNotification.ConstructExtraData(Helper.PushNotification.ECategories.NewOpenJob, jobId);
                    var partnerListIdentifiers = userDao.GetUserIdentifiersByRoleId(((int)Constants.Configuration.Role.CompanyAdmin).ToString());
                    if (int.Parse(jobDetails.jobTypeId) == (int)Constants.Configuration.DeliveryJobType.Standard)
                    {
                        Utility.UtilNotification.BroadCastMessage(
                            partnerListIdentifiers.ToArray(),
                            extraDataPartner,
                            NotificationMsg.NewOpenJob_Title,
                            NotificationMsg.NewOpenJob_Desc + string.Format("From: {0}\nTo: {1}\nAmount:{2}",
                                                                            jobDetails.addressFrom[0].address3,
                                                                            jobDetails.addressTo[0].address3,
                                                                            jobDetails.amountPartner)
                            );
                    }
                    else if (int.Parse(jobDetails.jobTypeId) == (int)Constants.Configuration.DeliveryJobType.Disposal)
                    {
                        Utility.UtilNotification.BroadCastMessage(
                            partnerListIdentifiers.ToArray(),
                            extraDataPartner,
                            NotificationMsg.NewOpenJob_Title,
                            NotificationMsg.NewOpenJob_Desc + string.Format("Dispose items from: {0}\nAmount:{1}",
                                                                            jobDetails.addressFrom[0].address3,
                                                                            jobDetails.amountPartner)
                            );
                    }
                }

                response.payload = uniqueId;
                response         = Utility.Utils.SetResponse(response, true, Constant.ErrorCode.ESuccess);

                return(response);
            }
            catch (Exception e)
            {
                DBLogger.GetInstance().Log(DBLogger.ESeverity.Error, e.Message);
                DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, e.StackTrace);

                response = Utility.Utils.SetResponse(response, false, Constant.ErrorCode.EUnknownError);
                return(response);
            }
        }
Exemple #7
0
        public static void SendInvoice(string jobUniqueId, string paymentUrl, Model.User user,
                                       Model.JobDetails jobDetails, string fleetType, string jobType)
        {
            Task.Run(async() =>
            {
                try
                {
                    // send email
                    String apiKey = ConfigurationManager.AppSettings.Get("SendGridApiKey");
                    dynamic sg    = new SendGrid.SendGridAPIClient(apiKey);

                    Email from      = new Email("*****@*****.**", "JustLorry");
                    String subject  = ConfigurationManager.AppSettings.Get("InvoiceSubject") + string.Format("(Order ID: {0})", jobUniqueId);
                    Email to        = new Email(user.email, user.displayName);
                    Content content = new Content("text/html", subject);
                    Mail mail       = new Mail(from, subject, to, content);

                    mail.TemplateId = ConfigurationManager.AppSettings.Get("InvoiceTemplateId");
                    mail.Personalization[0].AddSubstitution("{{orderId}}", jobUniqueId);
                    mail.Personalization[0].AddSubstitution("{{name}}", user.displayName);
                    mail.Personalization[0].AddSubstitution("{{contact}}", user.contactNumber);
                    mail.Personalization[0].AddSubstitution("{{email}}", user.email);
                    mail.Personalization[0].AddSubstitution("{{date}}", jobDetails.deliveryDate);
                    mail.Personalization[0].AddSubstitution("{{jobType}}", jobType);
                    mail.Personalization[0].AddSubstitution("{{fleetType}}", fleetType);
                    mail.Personalization[0].AddSubstitution("{{amount}}", jobDetails.amount.ToString());
                    mail.Personalization[0].AddSubstitution("{{paymentLink}}", paymentUrl);

                    var addressFrom = jobDetails.addressFrom[0];
                    mail.Personalization[0].AddSubstitution("{{from}}", addressFrom.address1 + ", " + addressFrom.address2 + ", " + addressFrom.address3);

                    try
                    {
                        var addressTo = jobDetails.addressTo[0];
                        if (addressTo != null)
                        {
                            mail.Personalization[0].AddSubstitution("{{to}}", addressTo.address1 + ", " + addressTo.address2 + ", " + addressTo.address3);
                        }
                    }
                    catch (Exception)
                    {
                        mail.Personalization[0].AddSubstitution("{{to}}", "");
                    }

                    dynamic response = await sg.client.mail.send.post(requestBody: mail.Get());


                    // send to self as multiple email not supported
                    if (System.Configuration.ConfigurationManager.AppSettings["Debug"] == "0")
                    {
                        to = new Email("*****@*****.**");
                    }
                    else
                    {
                        to = new Email("*****@*****.**");
                    }

                    mail = new Mail(from, subject, to, content);

                    mail.TemplateId = ConfigurationManager.AppSettings.Get("InvoiceTemplateId");
                    mail.Personalization[0].AddSubstitution("{{orderId}}", jobUniqueId);
                    mail.Personalization[0].AddSubstitution("{{name}}", user.displayName);
                    mail.Personalization[0].AddSubstitution("{{contact}}", user.contactNumber);
                    mail.Personalization[0].AddSubstitution("{{email}}", user.email);
                    mail.Personalization[0].AddSubstitution("{{date}}", jobDetails.deliveryDate);
                    mail.Personalization[0].AddSubstitution("{{jobType}}", jobType);
                    mail.Personalization[0].AddSubstitution("{{fleetType}}", fleetType);
                    mail.Personalization[0].AddSubstitution("{{amount}}", jobDetails.amount.ToString());
                    mail.Personalization[0].AddSubstitution("{{paymentLink}}", paymentUrl);

                    addressFrom = jobDetails.addressFrom[0];
                    mail.Personalization[0].AddSubstitution("{{from}}", addressFrom.address1 + ", " + addressFrom.address2 + ", " + addressFrom.address3);

                    try
                    {
                        var addressTo = jobDetails.addressTo[0];
                        if (addressTo != null)
                        {
                            mail.Personalization[0].AddSubstitution("{{to}}", addressTo.address1 + ", " + addressTo.address2 + ", " + addressTo.address3);
                        }
                    }
                    catch (Exception)
                    {
                        mail.Personalization[0].AddSubstitution("{{to}}", "");
                    }

                    response = await sg.client.mail.send.post(requestBody: mail.Get());
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            });
        }