コード例 #1
0
ファイル: AdjustmentsController.cs プロジェクト: CarlosVV/sic
        private void CreateTransactionCierreBalanceMuerteItp(IndexViewModel model, CaseDetail caseDetail, bool esMuerte, CaseDetail caseMain)
        {
            Transaction sicTransactionCierre = new Transaction
            {
                CaseDetailId       = caseDetail.CaseDetailId,
                TransactionTypeId  = esMuerte ? ((int)SimeraTransactionEnum.CierreBalanceMuerte) : ((int)SimeraTransactionEnum.CierreBalanceITP),
                TransactionAmount  = 0,
                TransactionDate    = DateTime.UtcNow,
                ConceptId          = caseDetail.Case.ConceptId.Value,
                DecisionDate       = DateTime.UtcNow,
                AdjustmentReasonId = model.AdjustmentReasonId
            };

            SimeraTransaction transactionCierre = new SimeraTransaction
            {
                CaseDetailId         = caseDetail.CaseDetailId,
                CaseKey              = caseDetail.CaseKey,
                CaseNumber           = caseDetail.CaseNumber,
                SSN                  = !caseDetail.CaseKey.Equals("00") ? caseMain.Entity.SSN : caseDetail.Entity.SSN,
                FullName             = !caseDetail.CaseKey.Equals("00") ? caseMain.Entity.FullName : caseDetail.Entity.FullName,
                BirthDate            = !caseDetail.CaseKey.Equals("00") ? caseMain.Entity.BirthDate : caseDetail.Entity.BirthDate,
                SSN_Beneficiary      = !caseDetail.CaseKey.Equals("00") ? caseDetail.Entity.SSN : string.Empty,
                FullName_Beneficiary = !caseDetail.CaseKey.Equals("00") ? caseDetail.Entity.FullName : string.Empty,
                Relationship         = !caseDetail.CaseKey.Equals("00") ? caseDetail.RelationshipType.RelationshipType1 : string.Empty,
                Date                 = System.DateTime.UtcNow,
                AdjustmentReason     = model.AdjustmentReasonText,
                TransactionType      = esMuerte ? ((int)SimeraTransactionEnum.CierreBalanceMuerte).ToString() : ((int)SimeraTransactionEnum.CierreBalanceITP).ToString(),
                RequestCreatedByUser = WebHelper.GetUserName(),
                StatusSIC            = "S",
                CreatedBy            = "SIC Web",
                CreatedDateTime      = System.DateTime.UtcNow
            };

            SimeraTransactionService.InsertTransactions(transactionCierre, sicTransactionCierre);
        }
コード例 #2
0
        // El nombre de parámetro del id. debe coincidir con el valor DataKeyNames establecido en el control
        public void ClientPaymentDayInfo_UpdateItem(ClientPaymentDay subject)
        {
            try
            {
                var db   = new ApplicationDbContext();
                var pDay = db.ClientPaymentDays.Single(p => p.ClientPaymentDayID == subject.ClientPaymentDayID);
                if (pDay == null)
                {
                    Page.ModelState.AddModelError("", String.Format("No se encontró el elemento con id. {0}", subject.ClientPaymentDayID));
                    return;
                }
                pDay.PaymentDay = subject.PaymentDay;
                if (Page.ModelState.IsValid)
                {
                    db.SaveChanges();

                    ModifyCaseEffectiveDate(pDay.Person.PersonID, subject.PaymentDay);

                    CaseDetail.DataBind();
                }
            }
            catch (Exception exp)
            {
                ErrorLabel.Text    = exp.Message;
                ErrorLabel.Visible = true;
            }
        }
コード例 #3
0
ファイル: JiraCaseMgmtService.cs プロジェクト: limky2277/FQR
        /// <summary>
        /// Used to get the case status from JIRA
        /// </summary>
        /// <param name="company"></param>
        /// <param name="TicketSysCompanyCode"></param>
        /// <param name="CaseId"></param>
        /// <returns></returns>
        public async Task <CaseDetail> GetCaseStatusAsync(Company company, string TicketSysCompanyCode, string CaseId)
        {
            HttpResponseMessage resp = null;

            try
            {
                CaseDetail caseDetail = new CaseDetail();
                if (string.IsNullOrWhiteSpace(TicketSysCompanyCode))
                {
                    throw new ArgumentException($"Please enter correct company code", "TicketSysCompanyCode");
                }
                if (string.IsNullOrWhiteSpace(CaseId))
                {
                    throw new ArgumentException($"Please enter correct CaseId", "CaseId");
                }

                var JIRAReq = getJIRARequestObj(company.TicketSysId, Utility.ParseDInfo(company.TicketSysPassword, _appSettings.General.SysInfo));
                JIRAReq.Method     = HttpMethod.Get;
                JIRAReq.RequestUri = new Uri(string.Format(_appSettings.JIRAApiEndpoint.GetStatus, company.TicketSysUrl, CaseId));

                resp = await RestApiHelper.SendAsync(JIRAReq);

                resp.EnsureSuccessStatusCode();
                var caseInfo = JsonConvert.DeserializeObject <JIRACaseDetail>(await resp.Content.ReadAsStringAsync());

                if (!caseInfo.serviceDeskId.ToString().Equals(TicketSysCompanyCode))
                {
                    throw new ArgumentException($"This case ID {caseInfo.issueKey} doesnt link to your service desk. Please try again", "CaseId");
                }

                caseDetail = new CaseDetail()
                {
                    CaseID    = caseInfo.issueId,
                    CaseKey   = caseInfo.issueKey,
                    CreatedOn = caseInfo.createdDate.jira,
                    Status    = caseInfo.currentStatus.status,
                    Subject   = caseInfo.requestFieldValues.Where(x => x.fieldId == "summary").FirstOrDefault()?.value.ToString(),
                    Detail    = caseInfo.requestFieldValues.Where(x => x.fieldId == "description").FirstOrDefault()?.value.ToString(),
                    WebURL    = caseInfo.Links.Web
                };

                return(caseDetail);
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                string APIError = "<EMPTY>";
                if (resp != null)
                {
                    var error = JsonConvert.DeserializeObject <Error>(await resp.Content.ReadAsStringAsync());
                    if (error != null)
                    {
                        APIError = error.errorMessage;
                    }
                }

                throw new Exception($"Error: {ex.Message}. API Error:{APIError}");
            }
        }
コード例 #4
0
        public void ZFI_VENDOR_CREATION(CaseDetail caseTobeProcess)
        {
            RfcDestination rfcDestination = GetParameters();

            RfcRepository repoVendor = rfcDestination.Repository;

            bool isLawyer = false;

            if (caseTobeProcess.Entity.ParticipantType.ParticipantType1.ToUpper().Equals("ABOGADO", StringComparison.InvariantCultureIgnoreCase))
            {
                isLawyer = true;
            }

            IRfcFunction docVendor = repoVendor.CreateFunction("ZFI_VENDOR_CREATION");

            docVendor.SetValue("IM_INTERFACE_CODE", "ITF-GLPROC");
            docVendor.SetValue("IM_FLATFILE", "N");

            IRfcTable idTable = docVendor.GetTable("TBL_SOURCE_DATA");

            idTable.Insert();

            idTable.SetValue("LIFNR", String.Format("{0}{1}", caseTobeProcess.CaseNumber, caseTobeProcess.CaseKey));
            idTable.SetValue("BUKRS", "1000");
            idTable.SetValue("KTOKK", isLawyer ? "ZABO" : "ZCOM");
            idTable.SetValue("NAME1", caseTobeProcess.Entity.FirstName);
            idTable.SetValue("NAME2", caseTobeProcess.Entity.MiddleName);
            idTable.SetValue("LNAME1", caseTobeProcess.Entity.LastName);
            idTable.SetValue("LNAME2", caseTobeProcess.Entity.SecondLastName);
            idTable.SetValue("SORT1", isLawyer ? "HONORARIOS" : "COMPENSACIONES");

            var currentAddress = caseTobeProcess.Entity.Addresses.Where(a => a.AddressType.AddressType1.ToUpper().Equals("POSTAL", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

            idTable.SetValue("STREET", currentAddress.IsNull()? string.Empty: currentAddress.Line1);
            idTable.SetValue("STR_SUPPL1", currentAddress.IsNull() ? string.Empty : currentAddress.Line2);
            idTable.SetValue("CITY", currentAddress.IsNull() ? string.Empty : (currentAddress.City.IsNull() ? string.Empty : currentAddress.City.City1));
            idTable.SetValue("ZIP_CODE", currentAddress.IsNull() ? string.Empty : currentAddress.ZipCode);
            idTable.SetValue("COUNTRY", currentAddress.IsNull() ? string.Empty : (currentAddress.Country.IsNull() ? string.Empty : currentAddress.Country.Country1));
            idTable.SetValue("REGION", currentAddress.IsNull() ? string.Empty : (currentAddress.State.IsNull() ? string.Empty : currentAddress.State.State1));
            idTable.SetValue("LANGU", "E");
            idTable.SetValue("AKONT", isLawyer ? "2030050090" : "2010010010");
            idTable.SetValue("ZTERM", "0001");
            idTable.SetValue("ZWELS", "0001");

            var currentPhone = caseTobeProcess.Entity.Phones.Where(p => !p.PhoneNumber.IsNullOrEmpty()).FirstOrDefault();

            idTable.SetValue("TEL_NUMBER", currentPhone.IsNull()? string.Empty: currentPhone.PhoneNumber);
            idTable.SetValue("STCD1", caseTobeProcess.Entity.SSN);
            idTable.SetValue("WAERS", "USD");
            idTable.SetValue("WITHT", isLawyer ? "A7" : string.Empty);
            idTable.SetValue("WT_WITHCD", isLawyer ? "07" : string.Empty);
            idTable.SetValue("QLAND", isLawyer ? "PR" : string.Empty);
            idTable.SetValue("WT_SUBJCT", isLawyer ? "X" : string.Empty);
            idTable.SetValue("FDGRV", isLawyer ? "A010" : "A029");

            docVendor.Invoke(rfcDestination);
        }
コード例 #5
0
ファイル: AdjustmentsController.cs プロジェクト: CarlosVV/sic
        private void UpdateCancellationCaseDetail(IndexViewModel model, CaseDetail caseDetail)
        {
            caseDetail.CancellationId   = model.CancellationId.Value;
            caseDetail.CancellationDate = model.FromDate;
            caseDetail.ModifiedBy       = WebHelper.GetUserName();
            caseDetail.ModifiedDateTime = System.DateTime.UtcNow;
            caseDetail.ActiveIdent      = "I";

            CaseService.UpdateCaseDetail(caseDetail);
        }
コード例 #6
0
 public ActionResult Edit([Bind(Include = "DetailsID,CaseID,DefendantLastName,DefendantFirstName,DefendantAddress,DefendantCity,DefendantState")] CaseDetail caseDetail)
 {
     if (ModelState.IsValid)
     {
         db.Entry(caseDetail).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.CaseID = new SelectList(db.CaseMasters, "CaseID", "CaseNumber", caseDetail.CaseID);
     return(View(caseDetail));
 }
コード例 #7
0
        public ActionResult DeleteConfirmed(int id)
        {
            CaseDetail caseDetail = db.CaseDetails.Find(id);

            foreach (Charge c in caseDetail.Charges)
            {
                db.Charges.Remove(c);
            }
            db.CaseDetails.Remove(caseDetail);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
コード例 #8
0
        private void MapVendor(ref Dictionary <string, string> dicVendor, CaseDetail caseTobeProcess)
        {
            if (dicVendor.IsNull())
            {
                dicVendor = new Dictionary <string, string>();
            }

            if (caseTobeProcess.IsNull())
            {
                throw new ArgumentNullException();
            }

            dicVendor.Add("FUNCTION", "ZFI_VENDOR_CREATION");
            dicVendor.Add("IM_INTERFACE_CODE", "ITF_VENDOR");
            dicVendor.Add("IM_FLAT_FILE_FLAG", "N");
            dicVendor.Add("TABLE", "TBL_SOURCE_DATA");
            dicVendor.Add("LIFNR", String.Format("{0}{1}", caseTobeProcess.CaseNumber, caseTobeProcess.CaseKey));
            dicVendor.Add("BUKRS", "1000");
            dicVendor.Add("KTOKK", caseTobeProcess.Entity.ParticipantType.ParticipantType1.ToUpper().Equals("ABOGADO", StringComparison.InvariantCultureIgnoreCase) ? "ZABO" : "ZCOM");
            dicVendor.Add("NAME1", caseTobeProcess.Entity.FirstName);
            dicVendor.Add("NAME2", caseTobeProcess.Entity.MiddleName);
            dicVendor.Add("LNAME1", caseTobeProcess.Entity.LastName);
            dicVendor.Add("LNAME2", caseTobeProcess.Entity.SecondLastName);
            dicVendor.Add("SORT1", caseTobeProcess.Entity.ParticipantType.ParticipantType1.ToUpper().Equals("ABOGADO", StringComparison.InvariantCultureIgnoreCase) ? "HONORARIOS" : "COMPENSACIONES");

            var currentAddress = caseTobeProcess.Entity.Addresses.Where(a => a.AddressType.AddressType1.ToUpper().Equals("POSTAL", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

            dicVendor.Add("STREET", currentAddress.IsNull() ? string.Empty : currentAddress.Line1);
            dicVendor.Add("STR_SUPPL1", currentAddress.IsNull() ? string.Empty : currentAddress.Line2);
            dicVendor.Add("CITY", currentAddress.IsNull() ? string.Empty : (currentAddress.City.IsNull() ? string.Empty : currentAddress.City.City1));
            dicVendor.Add("ZIP_CODE", currentAddress.IsNull() ? string.Empty : currentAddress.ZipCode);
            dicVendor.Add("COUNTRY", currentAddress.IsNull() ? string.Empty : (currentAddress.Country.IsNull() ? string.Empty : currentAddress.Country.Country1));
            dicVendor.Add("REGION", currentAddress.IsNull() ? string.Empty : (currentAddress.State.IsNull() ? string.Empty : currentAddress.State.State1));
            dicVendor.Add("LANGU", "E");
            dicVendor.Add("AKONT", caseTobeProcess.Entity.ParticipantType.ParticipantType1.ToUpper().Equals("ABOGADO", StringComparison.InvariantCultureIgnoreCase) ? "2030050090" : "2010010010");
            dicVendor.Add("ZTERM", "0001");
            dicVendor.Add("ZWELS", "0001");

            var currentPhone = caseTobeProcess.Entity.Phones.Where(p => !p.PhoneNumber.IsNullOrEmpty()).FirstOrDefault();

            dicVendor.Add("TEL_NUMBER", currentPhone.IsNull() ? string.Empty : currentPhone.PhoneNumber);
            dicVendor.Add("STCD1", "580000001");
            dicVendor.Add("WAERS", "USD");
            dicVendor.Add("WITHT", caseTobeProcess.Entity.ParticipantType.ParticipantType1.ToUpper().Equals("ABOGADO", StringComparison.InvariantCultureIgnoreCase) ? "A7" : string.Empty);
            dicVendor.Add("WT_WITHCD", caseTobeProcess.Entity.ParticipantType.ParticipantType1.ToUpper().Equals("ABOGADO", StringComparison.InvariantCultureIgnoreCase) ? "07" : string.Empty);
            dicVendor.Add("QLAND", caseTobeProcess.Entity.ParticipantType.ParticipantType1.ToUpper().Equals("ABOGADO", StringComparison.InvariantCultureIgnoreCase) ? "PR" : string.Empty);
            dicVendor.Add("WT_SUBJCT", caseTobeProcess.Entity.ParticipantType.ParticipantType1.ToUpper().Equals("ABOGADO", StringComparison.InvariantCultureIgnoreCase) ? "X" : string.Empty);
            dicVendor.Add("Birthdate", caseTobeProcess.Entity.BirthDate.HasValue ? caseTobeProcess.Entity.BirthDate.Value.ToString("YYYYMMDD") : string.Empty);
            dicVendor.Add("DeadDate", caseTobeProcess.Entity.DeceaseDate.HasValue ? caseTobeProcess.Entity.DeceaseDate.Value.ToString("YYYYMMDD") : string.Empty);
            dicVendor.Add("Gender", caseTobeProcess.Entity.Gender.IsNull() ? "U" : caseTobeProcess.Entity.Gender.GenderCode);
        }
コード例 #9
0
        // GET: CaseDetails/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            CaseDetail caseDetail = db.CaseDetails.Find(id);

            if (caseDetail == null)
            {
                return(HttpNotFound());
            }
            return(View(caseDetail));
        }
コード例 #10
0
        public JsonResult InsertPendingDiet(int caseId, int caseDetailId, DateTime?fechadecision, DateTime?fechavisita,
                                            DateTime?fechanotificacion, string numerocaso, decimal?montototal, string periods, string comment, string caseNumber)
        {
            CaseDetail currentCase = CaseService.FindCaseDetailById(caseDetailId);

            DateTime workingDate = DateTime.Now;

            var transaction = new Transaction()
            {
                CaseDetailId       = caseDetailId,
                TransactionTypeId  = (int)TransactionTypeEnum.Retroactivo,
                TransactionAmount  = montototal,
                Comment            = comment,
                TransactionDate    = workingDate,
                ICCaseNumber       = numerocaso,
                NotificationDateIC = fechanotificacion,
                HearingDateIC      = fechavisita
            };

            TransactionService.CreateTransaction(transaction);

            var serializedPeriods = JsonConvert.DeserializeObject <List <PeriodDiet> >(periods);

            foreach (var period in serializedPeriods)
            {
                short totalDays = Common.GetBusinessDays(period.Desde, period.Hasta, currentCase.Case.DaysWeek.GetValueOrDefault(0));

                var payment = new Payment()
                {
                    CaseId           = caseId,
                    CaseDetailId     = caseDetailId,
                    CaseNumber       = caseNumber,
                    TransactionId    = transaction.TransactionId,
                    ConceptId        = 2,
                    ClassId          = 11,
                    Amount           = montototal,
                    StatusId         = 12,
                    IssueDate        = fechadecision,
                    StatusChangeDate = workingDate,
                    FromDate         = period.Desde,
                    ToDate           = period.Hasta,
                    Discount         = period.Descuento,
                    PaymentDay       = totalDays
                };

                PaymentService.CreatePayment(payment);
            }

            return(Json(new BasicDataTablesResult(new { Status = "OK" })));
        }
コード例 #11
0
        // GET: CaseDetails/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            CaseDetail caseDetail = db.CaseDetails.Find(id);

            if (caseDetail == null)
            {
                return(HttpNotFound());
            }
            ViewBag.CaseID = new SelectList(db.CaseMasters, "CaseID", "CaseNumber", caseDetail.CaseID);
            return(View(caseDetail));
        }
コード例 #12
0
        private Guid GetSourceMarketFrom(CaseDetail caseDetails, int department, ITracingService trace)
        {
            if (caseDetails == null)
            {
                return(Guid.Empty);
            }
            if (trace == null)
            {
                return(Guid.Empty);
            }

            trace.Trace("GetSourceMarketFrom - start");
            if (department == Department.InDestinationRep)
            {
                if (caseDetails.ContactSourceMarket != Guid.Empty)
                {
                    trace.Trace("source market retrieved from contact.");
                    return(caseDetails.ContactSourceMarket);
                }
                if (caseDetails.AccountSourceMarket != Guid.Empty)
                {
                    trace.Trace("source market retrieved from account.");
                    return(caseDetails.AccountSourceMarket);
                }
                trace.Trace("source market is not present in account or contact");
                return(Guid.Empty);
            }

            if (caseDetails.BookingSourceMarket != Guid.Empty)
            {
                trace.Trace("source market retrieved from booking.");
                return(caseDetails.BookingSourceMarket);
            }
            if (caseDetails.CaseSourceMarket != Guid.Empty)
            {
                trace.Trace("source market retrieved from case.");
                return(caseDetails.CaseSourceMarket);
            }

            trace.Trace("source market could not be determined");
            return(Guid.Empty);
        }
コード例 #13
0
ファイル: BotService.cs プロジェクト: limky2277/FQR
        private async Task CreateJiraTicket()
        {
            // Search previous conversation
            var conversationList = _conversationService.GetConversationList($"{_senderInfo.senderConversationId}~{_company.FbPageId}");

            string jiraSummary     = conversationList.FirstOrDefault(x => x.LastQuestionAsked == (int)Question.IssueApplicationName).AnswerFreeText;
            string jiraDescription = conversationList.FirstOrDefault(x => x.LastQuestionAsked == (int)Question.IssueDescription).AnswerFreeText;

            // Search clients databases
            var clientList = _clientService.Get();

            // Jira integration here

            // Create Jira case
            List <TicketSysUser> ticketSysUserList = _jiraUserMgmtService.Get();
            var ticketSysUser = ticketSysUserList.Where(x => x.UserFbId == _senderInfo.senderConversationId).FirstOrDefault();

            var clientCompany = _clientService.GetById(ticketSysUser.ClientCompanyId);

            CaseDetail caseDetailResult = await _caseMgmtService.CreateCaseAsync(_company, clientCompany, $"{jiraSummary} [Create from FB ChatBot]", $"{jiraDescription}\n\n[Sent from FB ChatBot]");

            // If Jira case successfully created, inform user with case number
            await ConstructAndSendMessage(ConstructType.TicketCreated, caseDetailResult);
        }
コード例 #14
0
ファイル: AdjustmentsController.cs プロジェクト: CarlosVV/sic
        private void CreateTransactionAjusteMensualidad(IndexViewModel model, CaseDetail caseDetail, CaseDetail caseMain)
        {
            Transaction sicTransactionAjusteMensualidad = new Transaction
            {
                CaseDetailId       = caseDetail.CaseDetailId,
                TransactionTypeId  = (int)SimeraTransactionEnum.AjustesMensualidad,
                TransactionAmount  = 0,
                TransactionDate    = DateTime.UtcNow,
                ConceptId          = caseDetail.Case.ConceptId.Value,
                DecisionDate       = DateTime.UtcNow,
                AdjustmentReasonId = model.AdjustmentReasonId
            };

            SimeraTransaction transactionAjusteMensualidad = new SimeraTransaction
            {
                CaseDetailId         = caseDetail.CaseDetailId,
                CaseKey              = caseDetail.CaseKey,
                CaseNumber           = caseDetail.CaseNumber,
                SSN                  = !caseDetail.CaseKey.Equals("00") ? caseMain.Entity.SSN : caseDetail.Entity.SSN,
                FullName             = !caseDetail.CaseKey.Equals("00") ? caseMain.Entity.FullName : caseDetail.Entity.FullName,
                BirthDate            = !caseDetail.CaseKey.Equals("00") ? caseMain.Entity.BirthDate : caseDetail.Entity.BirthDate,
                SSN_Beneficiary      = !caseDetail.CaseKey.Equals("00") ? caseDetail.Entity.SSN : string.Empty,
                FullName_Beneficiary = !caseDetail.CaseKey.Equals("00") ? caseDetail.Entity.FullName : string.Empty,
                Relationship         = !caseDetail.CaseKey.Equals("00") ? caseDetail.RelationshipType.RelationshipType1 : string.Empty,
                Date                 = System.DateTime.UtcNow,
                AdjustmentReason     = model.AdjustmentReasonText,
                MonthlyAdjustment    = model.MonthlyInstallment.Value,
                TransactionType      = ((int)SimeraTransactionEnum.AjustesMensualidad).ToString(),
                RequestCreatedByUser = WebHelper.GetUserName(),
                StatusSIC            = "S",
                CreatedBy            = "SIC Web",
                CreatedDateTime      = System.DateTime.UtcNow
            };

            SimeraTransactionService.InsertTransactions(transactionAjusteMensualidad, sicTransactionAjusteMensualidad);
        }
コード例 #15
0
        public async Task BlastJiraStatusUpdateNotification()
        {
            try
            {
                List <TicketSysNotification> pendingStatusUpdateNotifList = _userCaseNotifService.Get();

                foreach (var pending in pendingStatusUpdateNotifList)
                {
                    var ticketUser        = _jiraUserMgmtService.GetById(pending.TicketSysUserId);
                    var ticketUserCompany = _clientCompanyService.GetById(ticketUser.ClientCompanyId);
                    _company = _companyService.GetById(ticketUser.CompanyId);

                    CaseDetail caseDetail = null;
                    try
                    {
                        caseDetail = await _jiraCaseMgmtService.GetCaseStatusAsync(_company, ticketUserCompany.TicketSysCompanyCode, pending.JiraCaseKey);
                    }
                    catch { }

                    // Jira no result
                    if (caseDetail == null)
                    {
                        continue;
                    }

                    // If Jira status remain the same / no updates
                    var pendingStatus = pending.JiraCaseStatus ?? "";
                    if (caseDetail.Status.Trim().ToLower().Equals(pendingStatus.Trim().ToLower()))
                    {
                        continue;
                    }

                    // Prepare send notification
                    List <JObject> messageList = new List <JObject>();
                    messageList.Add(JObject.FromObject(new
                    {
                        recipient = new { one_time_notif_token = pending.OneTimeNotifToken },
                        message   = new { text = $"New Updates with Case: {caseDetail.CaseKey} \n\nStatus changed to: {caseDetail.Status} \n\nCase Subject: {caseDetail.Subject} \n\nClick the link below for more. \n{caseDetail.WebURL}" }
                    }));

                    // Delete entry from database
                    _userCaseNotifService.Remove(pending);

                    // If case status not completed, then ask whether want to subscribe for next update or not
                    if (caseDetail.Status != JiraServiceDeskStatus.Declined || caseDetail.Status != JiraServiceDeskStatus.Completed)
                    {
                        messageList.Add(JObject.FromObject(new
                        {
                            recipient = new { id = ticketUser.UserFbId },
                            message   = new
                            {
                                attachment = new
                                {
                                    type    = "template",
                                    payload = new
                                    {
                                        template_type = "one_time_notif_req",
                                        title         = $"Do you want to get notified with {pending.JiraCaseKey} updates?",
                                        payload       = string.Format(FacebookCustomPayload.CASE_GET_NOTIFIED_PAYLOAD, pending.JiraCaseKey)
                                    }
                                }
                            }
                        }));
                    }

                    foreach (var msg in messageList)
                    {
                        await _fbApiClientService.PostMessageAsync(Utility.ParseDInfo(_company.FbPageToken, _applicationSettings.General.SysInfo), msg);
                    }
                }
            }
            catch (Exception ex)
            {
                LoggingHelper.LogError(ex, _logger);
                throw;
            }
        }
コード例 #16
0
        private void ZFI_VENDOR_CREATION(CaseDetail caseTobeProcess, Entity remitterTobeProcess)
        {
            RfcDestination rfcDestination = GetParameters();

            RfcRepository repoVendor = rfcDestination.Repository;

            bool isLawyer = false;

            //if (remitterTobeProcess.ParticipantType.ParticipantType1.ToUpper().Equals("ABOGADO", StringComparison.InvariantCultureIgnoreCase))
            isLawyer = true;

            IRfcFunction docVendor = repoVendor.CreateFunction("ZFI_VENDOR_CREATION");

            docVendor.SetValue("IM_INTERFACE_CODE", "ITF-VENDOR");
            docVendor.SetValue("IM_FLAT_FILE_FLAG", "N");

            IRfcTable idTable = docVendor.GetTable("TBL_SOURCE_DATA");

            idTable.Insert();

            //idTable.SetValue("LIFNR", String.Format("{0}{1}", caseTobeProcess.CaseNumber, caseTobeProcess.CaseKey));
            idTable.SetValue("LIFNR", "");
            idTable.SetValue("BUKRS", SettingService.GetSettingValueByName("Interface.SAP.CompanyCode"));
            idTable.SetValue("KTOKK", isLawyer ? "ZABO" : "ZCOM");
            idTable.SetValue("NAME1", "Prueba");
            idTable.SetValue("NAME2", "Prueba");
            idTable.SetValue("LAST_NAME1", "Prueba");
            idTable.SetValue("LAST_NAME2", "Prueba");
            idTable.SetValue("SORT1", isLawyer ? "HONORARIOS" : "COMPENSACIONES");

            var currentAddress = remitterTobeProcess.Addresses.Where(a => a.AddressType.AddressType1.ToUpper().Equals("POSTAL", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

            idTable.SetValue("STREET", currentAddress.IsNull() ? string.Empty : currentAddress.Line1);
            idTable.SetValue("STR_SUPPL1", currentAddress.IsNull() ? string.Empty : currentAddress.Line2);
            idTable.SetValue("CITY", currentAddress.IsNull() ? string.Empty : (currentAddress.City.IsNull() ? string.Empty : "New York"));
            idTable.SetValue("ZIP_CODE", currentAddress.IsNull() ? string.Empty : "10001");
            idTable.SetValue("COUNTRY", currentAddress.IsNull() ? string.Empty : (currentAddress.Country.IsNull() ? string.Empty : currentAddress.Country.CountryKey));
            idTable.SetValue("REGION", currentAddress.IsNull() ? string.Empty : (currentAddress.State.IsNull() ? string.Empty : currentAddress.Country.CountryKey.Equals("PR") ? currentAddress.State.State1.Substring(1, 3) : "NY"));
            idTable.SetValue("LANGU", SettingService.GetSettingValueByName("Interface.SAP.LanguageKey"));
            idTable.SetValue("AKONT", isLawyer ? "2030050090" : "2030050090");
            idTable.SetValue("ZTERM", SettingService.GetSettingValueByName("Interface.SAP.TermsOfPaymentKey"));
            idTable.SetValue("ZWELS", "C");
            idTable.SetValue("ZAHLS", "A");

            var currentPhone = remitterTobeProcess.Phones.Where(p => !p.PhoneNumber.IsNullOrEmpty()).FirstOrDefault();

            idTable.SetValue("TEL_NUMBER", currentPhone.IsNull() ? "Prueba" : currentPhone.PhoneNumber ?? "Prueba");
            idTable.SetValue("STCD1", "580000002" ?? "Prueba");
            idTable.SetValue("WAERS", SettingService.GetSettingValueByName("Interface.SAP.CurrencyKey"));
            idTable.SetValue("WITHT", isLawyer ? "A7" : string.Empty);
            idTable.SetValue("WT_WITHCD", isLawyer ? "07" : string.Empty);
            idTable.SetValue("QLAND", isLawyer ? "PR" : string.Empty);
            idTable.SetValue("WT_SUBJCT", isLawyer ? "X" : string.Empty);
            idTable.SetValue("FDGRV", isLawyer ? "A010" : "A029");
            idTable.SetValue("Birthdate", remitterTobeProcess.BirthDate.HasValue ? remitterTobeProcess.BirthDate.Value.ToString("YYYYMMDD") : string.Empty);
            idTable.SetValue("DeadDate", remitterTobeProcess.DeceaseDate.HasValue ? remitterTobeProcess.DeceaseDate.Value.ToString("YYYYMMDD") : string.Empty);
            idTable.SetValue("Gender", remitterTobeProcess.Gender.IsNull() ? "U" : remitterTobeProcess.Gender.GenderCode);

            docVendor.Invoke(rfcDestination);

            IRfcTable tblOuput = docVendor.GetTable("TBL_MESSAGE_LOG");

            docVendor.Invoke(rfcDestination);

            if (tblOuput.RowCount == 0)
            {
                Console.WriteLine("Parece que todo fue bien con el Case Number: " + caseTobeProcess.CaseNumber + " " + caseTobeProcess.CaseKey);
            }
            else
            {
                Console.WriteLine("Oops!, error al procesar el pago del Case Number: " + caseTobeProcess.CaseNumber + " " + caseTobeProcess.CaseKey);
                Console.WriteLine("Empezamos a mostrar los errores......");
            }

            for (int cuIndex = 0; cuIndex < tblOuput.RowCount; cuIndex++)
            {
                tblOuput.CurrentIndex = cuIndex;
                Console.WriteLine(tblOuput.GetString("OUTPUT3"));
            }
        }
コード例 #17
0
        public static CaseViewModel CreateFrom(CaseDetail caseDetail, decimal?balance, CaseDetail caseMain = null, decimal?balanceLesionado = null)
        {
            var model = new CaseViewModel();

            DateTime now = DateTime.Now;

            model.CaseId                   = caseDetail.CaseId.Value;
            model.CaseDetailId             = caseDetail.CaseDetailId;
            model.NumeroCaso               = caseDetail.CaseNumber;
            model.NumeroCasoMostrado       = string.Format("{0} {1}", caseDetail.CaseNumber, caseDetail.CaseKey);
            model.CaseKey                  = caseDetail.CaseKey;
            model.FechaRadicacion          = caseDetail.Case.CaseDate.HasValue ? caseDetail.Case.CaseDate.Value.ToShortDateString() : string.Empty;
            model.FechaAccidente           = caseDetail.Case.AccidentDate.HasValue ? caseDetail.Case.AccidentDate.Value.ToShortDateString() : string.Empty;
            model.Region                   = caseDetail.Case.Region == null ? string.Empty : caseDetail.Case.Region.Region1;
            model.Dispensario              = caseDetail.Case.Clinic == null ? string.Empty : caseDetail.Case.Clinic.Clinic1;
            model.CasoMenor                = caseDetail.Case.IsMinor.GetValueOrDefault(false);
            model.CasoMuerte               = caseDetail.Case.DeathFlag.GetValueOrDefault(false);
            model.TipoIncapacidad          = caseDetail.Case.Concept == null ? string.Empty : caseDetail.Case.Concept.Concept1;
            model.TienePerentorio          = caseDetail.Transactions.Any(t => t.TransactionTypeId == 4);
            model.TieneInversionMenor3     = caseDetail.Transactions.Any(t => t.TransactionTypeId == 3 && (t.TransactionDate.HasValue && t.TransactionDate.Value.AddYears(3) > now));
            model.FechaAccidenteMenor1984  = caseDetail.Case.AccidentDate.HasValue ? (caseDetail.Case.AccidentDate.Value < new DateTime(1984, 5, 30)) : false;
            model.TienePagoTercerosVigente = caseDetail.ThirdPartySchedules.Any(t => !t.TerminationDate.HasValue || (t.TerminationDate.Value < now));
            model.DiasSemana               = caseDetail.Case.DaysWeek.GetValueOrDefault(0);
            model.CompSemanal              = caseDetail.Case.WeeklyComp.GetValueOrDefault(decimal.Zero);
            model.CompSemanalInca          = caseDetail.Case.WeeklyCompDisability.GetValueOrDefault(decimal.Zero);
            model.FechaSuspension          = caseDetail.CancellationDate.HasValue ? caseDetail.CancellationDate.Value.ToShortDateString() : string.Empty;
            model.RazonSuspension          = caseDetail.Cancellation.IsNull() ? string.Empty : caseDetail.Cancellation.Cancellation1;
            model.FechaReanudacion         = caseDetail.RestartDate.HasValue ? caseDetail.RestartDate.Value.ToShortDateString() : string.Empty;
            model.FromCase                 = caseDetail.CaseFolderId.HasValue ? true : false;
            model.CaseFolderId             = caseDetail.CaseFolderId.IsNull() ? 0 : caseDetail.CaseFolderId;


            if (caseDetail.CancellationDate.HasValue)
            {
                model.PaymentStatus = "Suspendido";
            }
            else
            {
                if (caseDetail.ActiveIdent.IsNullOrEmpty())
                {
                    model.PaymentStatus = "Activo";
                }
                else
                {
                    if (caseDetail.ActiveIdent.Contains("A"))
                    {
                        if (!caseDetail.Cancellation.IsNull())
                        {
                            if (caseDetail.Cancellation.CancellationCode.Contains("A") ||
                                caseDetail.Cancellation.CancellationCode.Contains("C") ||
                                caseDetail.Cancellation.CancellationCode.Contains("T"))
                            {
                                model.PaymentStatus = "Suspendido";
                            }
                            else
                            {
                                model.PaymentStatus = "Activo";
                            }
                        }
                        else
                        {
                            model.PaymentStatus = "Activo";
                        }
                    }
                    else if (caseDetail.ActiveIdent.Contains("I"))
                    {
                        model.PaymentStatus = "Inactivo";
                    }
                    else if (caseDetail.ActiveIdent.Contains("S"))
                    {
                        model.PaymentStatus = "Suspendido";
                    }
                }
            }

            if (caseDetail.Entity == null)
            {
                model.Lesionado       = string.Empty;
                model.SSN             = string.Empty;
                model.FechaNacimiento = string.Empty;
                model.EsBeneficiario  = false;
                model.EsLesionado     = false;
            }
            else
            {
                model.EntityId       = caseDetail.EntityId.Value;
                model.EsLesionado    = caseDetail.Entity.ParticipantTypeId == 8;
                model.EsBeneficiario = caseDetail.Entity.ParticipantTypeId == 4;


                if (model.EsBeneficiario && !caseMain.IsNull())
                {
                    model.Lesionado       = caseMain.Entity.FullName;
                    model.SSN             = caseMain.Entity.SSN.ToSSN();
                    model.FechaNacimiento = caseMain.Entity.BirthDate.HasValue ? caseMain.Entity.BirthDate.Value.ToShortDateString() : string.Empty;

                    if (caseMain.Entity.Addresses.Any())
                    {
                        var addressPostal = caseMain.Entity.Addresses.Where(a => a.AddressTypeId == 2).FirstOrDefault();
                        if (addressPostal != null)
                        {
                            model.Direccion = AddressViewModel.CreateFrom(addressPostal);
                        }
                    }
                    else
                    {
                        model.Direccion = new AddressViewModel();
                    }

                    model.EBT               = caseMain.EBTAccount.IsNull() ? string.Empty : caseMain.EBTAccount;
                    model.EBTStatus         = caseMain.EBTStatus.IsNull() ? string.Empty : caseMain.EBTStatus;
                    model.EBTBalance        = caseMain.EBTBalance.IsNull() ? 0 : caseMain.EBTBalance;
                    model.BalanceFormateado = balanceLesionado.HasValue ? balanceLesionado.Value.ToCurrency() : string.Empty;
                }
                else
                {
                    model.Lesionado       = caseDetail.Entity.FullName;
                    model.SSN             = caseDetail.Entity.SSN.ToSSN();
                    model.FechaNacimiento = caseDetail.Entity.BirthDate.HasValue ? caseDetail.Entity.BirthDate.Value.ToShortDateString() : string.Empty;

                    if (caseDetail.Entity.Addresses.Any())
                    {
                        var addressPostal = caseDetail.Entity.Addresses.Where(a => a.AddressTypeId == 2).FirstOrDefault();
                        if (addressPostal != null)
                        {
                            model.Direccion = AddressViewModel.CreateFrom(addressPostal);
                        }
                    }
                    else
                    {
                        model.Direccion = new AddressViewModel();
                    }
                    model.EBT               = caseDetail.EBTAccount.IsNull() ? string.Empty : caseDetail.EBTAccount;
                    model.EBTStatus         = caseDetail.EBTStatus.IsNull() ? string.Empty : caseDetail.EBTStatus;
                    model.EBTBalance        = caseDetail.EBTBalance.IsNull() ? 0 : caseDetail.EBTBalance;
                    model.BalanceFormateado = balanceLesionado.HasValue ? balanceLesionado.Value.ToCurrency() : string.Empty;
                }
            }

            model.Patrono             = EmployerViewModel.CreateFrom(caseDetail.Case);
            model.Beneficiario        = BeneficiaryViewModel.CreateFrom(caseDetail, balance);
            model.Balance             = balance;
            model.AdjudicacionInicial = caseDetail.GetInitialAllocation();
            model.TieneAbogado        = !caseDetail.EntityId_Lawyer.IsNull();

            return(model);
        }
コード例 #18
0
ファイル: JiraCaseMgmtService.cs プロジェクト: limky2277/FQR
        /// <summary>
        /// Used to create a new case in JIRA
        /// </summary>
        /// <param name="company"></param>
        /// <param name="clientCompany"></param>
        /// <param name="CaseSubject"></param>
        /// <param name="CaseDescription"></param>
        /// <returns></returns>
        public async Task <CaseDetail> CreateCaseAsync(Company company, ClientCompany clientCompany, string CaseSubject, string CaseDescription)
        {
            HttpResponseMessage resp = null;

            try
            {
                CaseDetail caseDetail = new CaseDetail();
                if (company == null)
                {
                    throw new ArgumentException($"Company details should not be empty", "Company");
                }
                if (string.IsNullOrWhiteSpace(CaseSubject))
                {
                    throw new ArgumentException($"Please enter correct Case subject", "CaseSubject");
                }

                var JIRAReq = getJIRARequestObj(company.TicketSysId, Utility.ParseDInfo(company.TicketSysPassword, _appSettings.General.SysInfo));
                JIRAReq.Method     = HttpMethod.Post;
                JIRAReq.RequestUri = new Uri(string.Format(_appSettings.JIRAApiEndpoint.CreateCase, company.TicketSysUrl));
                var caseDt = new ServiceDeskRequest()
                {
                    serviceDeskId      = clientCompany.TicketSysCompanyCode,
                    requestTypeId      = "1240",
                    requestFieldValues = new RequestFieldValues()
                    {
                        summary     = CaseSubject,
                        description = CaseDescription,
                        duedate     = DateTime.Now.AddDays(7).ToString("yyyy-MM-dd")
                    },
                };

                JIRAReq.Content = new StringContent(
                    JsonConvert.SerializeObject(caseDt),
                    Encoding.UTF8,
                    "application/json");

                resp = await RestApiHelper.SendAsync(JIRAReq);

                resp.EnsureSuccessStatusCode();
                var caseInfo = JsonConvert.DeserializeObject <JIRACaseDetail>(await resp.Content.ReadAsStringAsync());

                caseDetail = new CaseDetail()
                {
                    CaseID    = caseInfo.issueId,
                    CaseKey   = caseInfo.issueKey,
                    CreatedOn = caseInfo.createdDate.jira,
                    Status    = caseInfo.currentStatus.status,
                    Subject   = caseInfo.requestFieldValues.Where(x => x.fieldId == "summary").FirstOrDefault()?.value.ToString(),
                    Detail    = caseInfo.requestFieldValues.Where(x => x.fieldId == "description").FirstOrDefault()?.value.ToString(),
                    WebURL    = caseInfo.Links.Web
                };

                return(caseDetail);
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                string APIError = "<EMPTY>";
                if (resp != null)
                {
                    var error = JsonConvert.DeserializeObject <Error>(await resp.Content.ReadAsStringAsync());
                    if (error != null)
                    {
                        APIError = error.errorMessage;
                    }
                }

                throw new Exception($"Error: {ex.Message}. API Error:{APIError}");
            }
        }
コード例 #19
0
ファイル: CaseService.cs プロジェクト: CarlosVV/sic
 public void UpdateCaseDetail(CaseDetail caseDetail)
 {
     caseDetailTransactional.Update(caseDetail);
     unitOfWork.SaveChanges();
 }
コード例 #20
0
ファイル: BeneficiaryViewModel.cs プロジェクト: CarlosVV/sic
        public static BeneficiaryViewModel CreateFrom(CaseDetail caseDetail, decimal?balance = null)
        {
            var model = new BeneficiaryViewModel();

            model.EBT               = caseDetail.EBTAccount.IsNull()? string.Empty: caseDetail.EBTAccount;
            model.EBTStatus         = caseDetail.EBTStatus.IsNull() ? string.Empty : caseDetail.EBTStatus;
            model.EBTBalance        = caseDetail.EBTBalance.IsNull() ? 0 : caseDetail.EBTBalance;
            model.FechaSuspension   = caseDetail.CancellationDate.HasValue ? caseDetail.CancellationDate.Value.ToShortDateString() : string.Empty;
            model.RazonSuspension   = caseDetail.Cancellation.IsNull() ? string.Empty : caseDetail.Cancellation.Cancellation1;
            model.FechaReanudacion  = caseDetail.RestartDate.HasValue ? caseDetail.RestartDate.Value.ToShortDateString() : string.Empty;
            model.BalanceFormateado = balance.HasValue ? balance.Value.ToCurrency() : string.Empty;

            if (caseDetail.CancellationDate.HasValue)
            {
                model.PaymentStatus = "Suspendido";
            }
            else
            {
                if (caseDetail.ActiveIdent.IsNullOrEmpty())
                {
                    model.PaymentStatus = "Activo";
                }
                else
                {
                    if (caseDetail.ActiveIdent.Contains("A"))
                    {
                        if (!caseDetail.Cancellation.IsNull())
                        {
                            if (caseDetail.Cancellation.CancellationCode.Contains("A") ||
                                caseDetail.Cancellation.CancellationCode.Contains("C") ||
                                caseDetail.Cancellation.CancellationCode.Contains("T"))
                            {
                                model.PaymentStatus = "Suspendido";
                            }
                            else
                            {
                                model.PaymentStatus = "Activo";
                            }
                        }
                        else
                        {
                            model.PaymentStatus = "Activo";
                        }
                    }
                    else if (caseDetail.ActiveIdent.Contains("I"))
                    {
                        model.PaymentStatus = "Inactivo";
                    }
                    else if (caseDetail.ActiveIdent.Contains("S"))
                    {
                        model.PaymentStatus = "Suspendido";
                    }
                }
            }
            model.Sufijo = caseDetail.CaseKey;

            if (caseDetail.Entity != null)
            {
                model.Nombre          = caseDetail.Entity.FullName;
                model.SSN             = caseDetail.Entity.SSN.ToSSN();
                model.FechaNacimiento = caseDetail.Entity.BirthDate.HasValue ? caseDetail.Entity.BirthDate.Value.ToShortDateString() : string.Empty;
            }

            if (caseDetail.RelationshipType != null)
            {
                model.Relacion = caseDetail.RelationshipType.RelationshipType1;
            }

            if (model.Relacion.IndexOf("Viuda") >= 0 || model.Relacion.IndexOf("Concubina") >= 0 || model.Relacion.IndexOf("Padre") >= 0 || model.Relacion.IndexOf("Madre") >= 0)
            {
                model.EsBeneficiarioValido = true;
            }
            else
            {
                model.EsBeneficiarioValido = false;
            }

            return(model);
        }
コード例 #21
0
ファイル: BotService.cs プロジェクト: limky2277/FQR
        /// <summary>
        /// get text message template
        /// </summary>
        /// <param name="text">text</param>
        /// <param name="sender">sender id</param>
        /// <returns>json</returns>
        private async Task <List <JObject> > ConstructAndSendMessage(ConstructType type, CaseDetail caseDetailResult = null, JObject additionalMessage = null, string messageInfo = null)
        {
            // To-do: consider to convert to JSON
            List <JObject> messageList = new List <JObject>();

            if (additionalMessage != null)
            {
                messageList.Add(additionalMessage);
            }

            switch (type)
            {
            case ConstructType.Greeting:
                var greetingOption = new List <QuickReplyOption>
                {
                    new QuickReplyOption {
                        title = REQ_BOT_ASSIST, payload = REQ_BOT_ASSIST
                    },
                    new QuickReplyOption {
                        title = NO_BOT_ASSIST, payload = NO_BOT_ASSIST
                    },
                };

                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"👋 Greeting { _senderInfo.first_name} { _senderInfo.last_name} 👋! {Environment.NewLine}We love having you with us." }
                }));

                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Should I help you to work with your suppot cases? Here are some option(s). 🕵", quick_replies = greetingOption }
                }));

                _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", new ConversationData {
                    LastQuestionAsked = (int)Question.None, Answered = true
                });


                break;

            case ConstructType.RequestBotAssistance:
                var assistanceOptions = new List <QuickReplyOption>
                {
                    new QuickReplyOption {
                        title = RAISE_TICKET, payload = RAISE_TICKET
                    },
                    new QuickReplyOption {
                        title = TICKET_STATUS, payload = TICKET_STATUS
                    }
                    //new QuickReplyOption { title = JUST_BROWSE, payload = JUST_BROWSE },
                };

                //check any notification pending, if yes user can cancel it too..
                var result = _jiraUserMgmtService.GetUser(_senderInfo.senderConversationId, _company.Id);
                if (result != null && _tickSysNotifService.GetByUser(result.Id) != null)
                {
                    assistanceOptions.Add(new QuickReplyOption {
                        title = CANCEL_NOTIF, payload = CANCEL_NOTIF
                    });
                }

                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Greeting {_senderInfo.first_name} {_senderInfo.last_name}! I'm TicketBOT! 🤓" }
                }));

                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"👨🏻‍🔧 How can I help you? Here are some option(s).", quick_replies = assistanceOptions }
                }));

                _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", new ConversationData {
                    LastQuestionAsked = (int)Question.None, Answered = true
                });
                break;

            case ConstructType.RequestOperator:
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Okay! Please submit your details here, our team will check and get back to you. " }
                }));

                Conversation conversation = new Conversation
                {
                    SenderPageId        = $"{_senderInfo.senderConversationId}~{_company.FbPageId}",
                    ConversationLogType = (int)ConvLogType.MuteLog,
                    ConversationData    = JsonConvert.SerializeObject(new List <ConversationData> {
                        new ConversationData {
                            LastQuestionAsked = (int)Question.None, Answered = true
                        }
                    }),
                };

                _conversationService.RemoveActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}");

                _conversationService.Create(conversation);
                break;

            case ConstructType.Ending:
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Thank you! Have a nice day! :)" }
                }));

                _conversationService.RemoveActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}");
                break;

            case ConstructType.CreateTicket:
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Okay got it!\nIn which application do you encounter the issue?" }
                }));
                _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", new ConversationData {
                    LastQuestionAsked = (int)Question.IssueApplicationName, Answered = false
                });
                break;

            case ConstructType.TicketDescription:
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Can you describe the issue?" }
                }));
                _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", new ConversationData {
                    LastQuestionAsked = (int)Question.IssueDescription, Answered = false
                });
                break;

            case ConstructType.TicketCreationConfirmation:
                var createCaseConfirmationOption = new List <QuickReplyOption>
                {
                    new QuickReplyOption {
                        title = CASE_SUBMIT_YES, payload = CASE_SUBMIT_YES
                    },
                    new QuickReplyOption {
                        title = CASE_SUBMIT_NO, payload = CASE_SUBMIT_NO
                    },
                };
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Summary:\n\nSubject: {caseDetailResult.Subject} \n\nDescription: {caseDetailResult.Detail} \n\nAre you sure you want to submit?", quick_replies = createCaseConfirmationOption }
                }));;
                _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", new ConversationData {
                    LastQuestionAsked = (int)Question.IssueDescription, Answered = true
                });
                break;

            case ConstructType.TicketCreated:
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"All done! Your case has been logged. Please quote {caseDetailResult.CaseKey} to follow up." }
                }));

                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new
                    {
                        attachment = new
                        {
                            type    = "template",
                            payload = new
                            {
                                template_type = "one_time_notif_req",
                                title         = $"Do you want to get notified with {caseDetailResult.CaseKey} update?",
                                payload       = string.Format(FacebookCustomPayload.CASE_GET_NOTIFIED_PAYLOAD, caseDetailResult.CaseKey)
                            }
                        }
                    }
                }));

                _conversationService.RemoveActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}");
                break;

            case ConstructType.CheckTicket:
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Sure! Please quote your ticket code." }
                }));
                _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", new ConversationData {
                    LastQuestionAsked = (int)Question.TicketCode, Answered = false
                });
                break;

            case ConstructType.TicketFound:
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"There you go! \n\nTicket Code: {caseDetailResult.CaseKey} \n\nStatus: {caseDetailResult.Status} \n\nCase Subject: {caseDetailResult.Subject} \n\nClick the link below for more. \n{caseDetailResult.WebURL}" }
                }));
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Thank you for using TicketBOT! Have a nice day! :)" }
                }));

                // One time notification integration here
                // Check user whether already subscribe
                if (caseDetailResult.Status != JiraServiceDeskStatus.Declined || caseDetailResult.Status != JiraServiceDeskStatus.Completed)
                {
                    messageList.Add(JObject.FromObject(new
                    {
                        recipient = new { id = _senderInfo.senderConversationId },
                        message   = new
                        {
                            attachment = new
                            {
                                type    = "template",
                                payload = new
                                {
                                    template_type = "one_time_notif_req",
                                    title         = $"Do you want to get notified with {caseDetailResult.CaseKey} updates?",
                                    payload       = string.Format(FacebookCustomPayload.CASE_GET_NOTIFIED_PAYLOAD, caseDetailResult.CaseKey)
                                }
                            }
                        }
                    }));
                }

                _conversationService.RemoveActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}");
                break;

            case ConstructType.SearchCompany:
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"☝🏻 Before we get started, I wanna know one thing. Can you tell me your company name please? \nAs our cilent's privacy matters, we need you to enter full company name. \n😬 For testing enter 'ZTEST COMPANY' 😬" }
                }));
                _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", new ConversationData {
                    LastQuestionAsked = (int)Question.CompanyName, Answered = false
                });
                break;

            case ConstructType.RequestVerificationCode:
                string testOTPInfo = string.Empty;
                if (!string.IsNullOrWhiteSpace(messageInfo))
                {
                    testOTPInfo = $"\n😬 For testing you can enter verification code as {messageInfo} 😬";
                }

                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Okay great! We've sent you a verification email which contains a verification code. Can you tell me your verification code please?{testOTPInfo}" }
                }));
                _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", new ConversationData {
                    LastQuestionAsked = (int)Question.VerificationCode, Answered = false
                });
                break;

            case ConstructType.Retry:
                var retryOption = new List <QuickReplyOption>
                {
                    new QuickReplyOption {
                        title = RETRY_YES, payload = RETRY_YES
                    },
                    new QuickReplyOption {
                        title = RETRY_NO, payload = RETRY_NO
                    },
                };

                //messageList.Add(JObject.FromObject(new
                //{
                //    recipient = new { id = _senderInfo.senderConversationId },
                //    message = new { text = $"Sorry, I didn't quite catch that. It seems like invalid option/answer." }
                //}));
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Do you want to retry?", quick_replies = retryOption }
                }));
                _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", new ConversationData {
                    LastQuestionAsked = (int)Question.Retry, Answered = true
                });
                break;

            case ConstructType.NotImplemented:
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Im still learning, you can submit ideas to {_company.contactEmail}. 💡" }
                }));
                _conversationService.RemoveActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}");
                break;

            case ConstructType.Error:
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = _senderInfo.senderConversationId },
                    message   = new { text = $"Something went wrong, please try again :(" }
                }));
                _conversationService.RemoveActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}");
                break;

            case ConstructType.None:
                break;
            }

            foreach (var message in messageList)
            {
                await _fbApiClientService.PostMessageAsync(Utility.ParseDInfo(_company.FbPageToken, _applicationSettings.General.SysInfo), message);
            }
            return(messageList);
        }
コード例 #22
0
ファイル: BotService.cs プロジェクト: limky2277/FQR
        private async Task ValidateQnA(ConversationData conversation, string answer)
        {
            switch (conversation.LastQuestionAsked)
            {
            case (int)Question.CompanyName:
                // Validate message (reported issue) e.g. min length
                if (!string.IsNullOrEmpty(answer))
                {
                    // Search company from Jira (Get company code)
                    var clientResultList = await _caseMgmtService.GetClientCompanies(_company, answer);

                    // Search clients databases
                    // var clientList = _clientService.Get();
                    // var clientResult = clientList.Where(x => x.ClientCompanyName.ToLower() == answer.ToLower()).FirstOrDefault();

                    if (clientResultList.Count == 1)
                    {
                        var clientResult = clientResultList.FirstOrDefault();

                        if (clientResult.ClientCompanyName.ToLower().Equals(answer.ToLower()))
                        {
                            // Check client company exist, if yes update, else insert.
                            var createdClientCompany = _clientService.Create(clientResult);

                            //generate OTP and send to ticketsys user company's email
                            Random generator        = new Random();
                            var    verificationCode = generator.Next(0, 9999).ToString("D4");
                            // Add user
                            TicketSysUser user = new TicketSysUser {
                                UserFbId        = _senderInfo.id,
                                ClientCompanyId = createdClientCompany.Id,
                                CompanyId       = _company.Id, UserNickname = $"{_senderInfo.last_name} {_senderInfo.first_name}", Active = false, VerificationCode = verificationCode
                            };

                            _jiraUserMgmtService.Create(user);


                            conversation.Answered       = true;
                            conversation.AnswerFreeText = createdClientCompany.Id.ToString();
                            conversation.CreatedOn      = DateTime.Now;
                            _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                            // Ask for verification code
                            var testOTP = string.Empty;
                            if (answer == "ZTEST COMPANY")
                            {
                                testOTP = verificationCode;
                            }

                            await ConstructAndSendMessage(ConstructType.RequestVerificationCode, messageInfo : testOTP);

                            break;
                        }
                    }
                    conversation.CreatedOn = DateTime.Now;
                    _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                    var comNotFoundMsg = JObject.FromObject(new
                    {
                        recipient = new { id = _senderInfo.senderConversationId },
                        message   = new { text = $"I'm sorry :( , we can't find your company in our system. Please enter the correct name or you may also contact {_company.contactEmail} for the company name." }
                    });

                    // Invalid input / no company found, please try again
                    await ConstructAndSendMessage(ConstructType.Retry, null, comNotFoundMsg);
                }
                else
                {
                    conversation.CreatedOn = DateTime.Now;
                    _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                    // Invalid input / no company found, please try again
                    await ConstructAndSendMessage(ConstructType.Retry);
                }
                break;

            case (int)Question.VerificationCode:
                // Validate message (reported issue) e.g. min length
                if (!string.IsNullOrEmpty(answer))
                {
                    // Check previous conversation, get ClientCompanyGuid
                    List <ConversationData> qaConv = _conversationService.GetConversationList($"{_senderInfo.senderConversationId}~{_company.FbPageId}");
                    if (qaConv != null)
                    {
                        ConversationData verifyConv = qaConv.Where(x => x.LastQuestionAsked == (int)Question.CompanyName).FirstOrDefault();

                        // Check verification code
                        var TicketSysUser = _jiraUserMgmtService.Get(_senderInfo.id);

                        if (TicketSysUser.VerificationCode == answer)
                        {
                            // Check & Update ClientCompany to true
                            if (!TicketSysUser.Active)
                            {
                                TicketSysUser.Active = true;
                                _jiraUserMgmtService.Update(TicketSysUser.Id, TicketSysUser);
                            }


                            // Begin create ticket
                            await ConstructAndSendMessage(ConstructType.CreateTicket);
                        }
                        else
                        {
                            // Incorrect verification code. Try again or end conversation
                            conversation.CreatedOn = DateTime.Now;
                            _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                            var jObj = JObject.FromObject(new
                            {
                                recipient = new { id = _senderInfo.senderConversationId },
                                message   = new { text = $"Sorry, I didn't quite catch that. It seems like invalid option/answer." }
                            });

                            // Invalid input / no company found, please try again
                            await ConstructAndSendMessage(ConstructType.Retry, additionalMessage : jObj);
                        }
                    }
                    else
                    {
                        conversation.CreatedOn = DateTime.Now;
                        _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                        // Invalid input / no company found, please try again
                        await ConstructAndSendMessage(ConstructType.Retry);
                    }
                }
                else
                {
                    await ConstructAndSendMessage(ConstructType.NotImplemented);
                }
                break;

            case (int)Question.IssueApplicationName:
                // Validate message (reported issue) e.g. min length
                if (!string.IsNullOrEmpty(answer))
                {
                    conversation.Answered       = true;
                    conversation.AnswerFreeText = answer;
                    conversation.CreatedOn      = DateTime.Now;
                    _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                    // Ask for description
                    await ConstructAndSendMessage(ConstructType.TicketDescription);
                }
                else
                {
                    conversation.CreatedOn = DateTime.Now;
                    _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                    // Invalid input / no company found, please try again
                    await ConstructAndSendMessage(ConstructType.Retry);
                }
                break;

            case (int)Question.IssueDescription:
                // Validate message (reported issue) e.g. min length
                if (!string.IsNullOrEmpty(answer))
                {
                    conversation.Answered       = true;
                    conversation.AnswerFreeText = answer;
                    conversation.CreatedOn      = DateTime.Now;
                    _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                    var conversationList = _conversationService.GetConversationList($"{_senderInfo.senderConversationId}~{_company.FbPageId}");

                    string jiraSummary     = conversationList.FirstOrDefault(x => x.LastQuestionAsked == (int)Question.IssueApplicationName).AnswerFreeText;
                    string jiraDescription = conversationList.FirstOrDefault(x => x.LastQuestionAsked == (int)Question.IssueDescription).AnswerFreeText;

                    // Show case summary & ask for creation confirmation
                    await ConstructAndSendMessage(ConstructType.TicketCreationConfirmation, new CaseDetail { Subject = $"Issue in {jiraSummary}", Detail = jiraDescription });
                }
                else
                {
                    conversation.CreatedOn = DateTime.Now;
                    _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                    // Invalid input / no company found, please try again
                    await ConstructAndSendMessage(ConstructType.Retry);
                }
                break;

            case (int)Question.TicketCode:
                // Validate message (reported issue) e.g. min length
                if (!string.IsNullOrEmpty(answer))
                {
                    // Jira integration here
                    // Search ticket status

                    CaseDetail caseDetail = null;
                    try
                    {
                        List <TicketSysUser> ticketSysUserList = _jiraUserMgmtService.Get();
                        var ticketSysUser = ticketSysUserList.Where(x => x.UserFbId == _senderInfo.senderConversationId).FirstOrDefault();

                        var clientCompany = _clientService.GetById(ticketSysUser.ClientCompanyId);

                        caseDetail = await _caseMgmtService.GetCaseStatusAsync(_company, clientCompany.TicketSysCompanyCode, answer);
                    }
                    catch { }

                    if (caseDetail != null)
                    {
                        conversation.Answered       = true;
                        conversation.AnswerFreeText = answer;
                        conversation.CreatedOn      = DateTime.Now;
                        _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                        await ConstructAndSendMessage(ConstructType.TicketFound, caseDetail);
                    }
                    else
                    {
                        conversation.CreatedOn = DateTime.Now;
                        _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                        var reply = JObject.FromObject(new
                        {
                            recipient = new { id = _senderInfo.senderConversationId },
                            message   = new { text = $"Looks like you have entered a wrong ticket code 😟" }
                        });
                        // Invalid input / no company found, please try again
                        await ConstructAndSendMessage(ConstructType.Retry, additionalMessage : reply);
                    }
                }
                else
                {
                    conversation.CreatedOn = DateTime.Now;
                    _conversationService.UpsertActiveConversation($"{_senderInfo.senderConversationId}~{_company.FbPageId}", conversation);

                    // Invalid input / no company found, please try again
                    await ConstructAndSendMessage(ConstructType.Retry);
                }
                break;

            default:
                break;
            }
        }
コード例 #23
0
        private CaseDetail GetCaseDetailsFor(EntityReference caseId, IOrganizationService service, ITracingService trace)
        {
            if (caseId == null)
            {
                return(null);
            }
            if (service == null)
            {
                return(null);
            }
            if (trace == null)
            {
                return(null);
            }

            trace.Trace("GetCaseDetailsFor - start");
            var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
                              <entity name='incident'>
                                <attribute name='incidentid' />
                                <attribute name='tc_sourcemarketid' />
                                <attribute name='ownerid' />
                                <filter type='and'>
                                  <condition attribute='incidentid' operator='eq' value='{0}' />
                                </filter>
                                <link-entity name='tc_booking' from='tc_bookingid' to='tc_bookingid' link-type='outer' alias='b'>
                                  <attribute name='tc_sourcemarketid' />
                                </link-entity>
                                <link-entity name='contact' from='contactid' to='customerid' link-type='outer' alias='c'>
                                  <attribute name='tc_sourcemarketid' />
                                </link-entity>
                                <link-entity name='account' from='accountid' to='customerid' link-type='outer' alias='a'>
                                  <attribute name='tc_sourcemarketid' />
                                </link-entity>
                              </entity>
                            </fetch>";

            fetchXml = string.Format(fetchXml, caseId.Id);

            trace.Trace(fetchXml);
            var query = new FetchExpression(fetchXml);

            trace.Trace("Calling retrieve multiple of service.");
            var response = service.RetrieveMultiple(query);

            if (response == null || response.Entities == null || response.Entities.Count == 0)
            {
                trace.Trace("response is null or response.Entities is null or count is null");
                return(null);
            }

            if (response.Entities.Count > 1)
            {
                trace.Trace("Multiple queues exist with the same name.");
                throw new InvalidPluginExecutionException("Multiple queues exist with the same name.");
            }

            trace.Trace("case record retrieved.");
            var caseDetail = new CaseDetail();

            if (response.Entities[0].Contains(Attributes.Booking.SourceMarketId) && response.Entities[0][Attributes.Booking.SourceMarketId] != null)
            {
                trace.Trace($"case source market: {((EntityReference)(response.Entities[0][Attributes.Booking.SourceMarketId])).Id}");
                caseDetail.CaseSourceMarket = ((EntityReference)(response.Entities[0][Attributes.Booking.SourceMarketId])).Id;
            }
            if (response.Entities[0].Contains($"b.{Attributes.Booking.SourceMarketId}") && response.Entities[0][$"b.{Attributes.Booking.SourceMarketId}"] != null)
            {
                trace.Trace($"booking source market: {((AliasedValue)response.Entities[0][$"b.{Attributes.Booking.SourceMarketId}"]).Value}");
                caseDetail.BookingSourceMarket = ((EntityReference)((AliasedValue)response.Entities[0][$"b.{Attributes.Booking.SourceMarketId}"]).Value).Id;
            }
            if (response.Entities[0].Contains($"c.{Attributes.Booking.SourceMarketId}") && response.Entities[0][$"c.{Attributes.Booking.SourceMarketId}"] != null)
            {
                trace.Trace($"booking source market: {((AliasedValue)response.Entities[0][$"c.{Attributes.Booking.SourceMarketId}"]).Value}");
                caseDetail.ContactSourceMarket = ((EntityReference)((AliasedValue)response.Entities[0][$"c.{Attributes.Booking.SourceMarketId}"]).Value).Id;
            }
            if (response.Entities[0].Contains($"a.{Attributes.Booking.SourceMarketId}") && response.Entities[0][$"a.{Attributes.Booking.SourceMarketId}"] != null)
            {
                trace.Trace($"booking source market: {((AliasedValue)response.Entities[0][$"a.{Attributes.Booking.SourceMarketId}"]).Value}");
                caseDetail.AccountSourceMarket = ((EntityReference)((AliasedValue)response.Entities[0][$"a.{Attributes.Booking.SourceMarketId}"]).Value).Id;
            }
            if (response.Entities[0].Contains(Attributes.Booking.Owner) && response.Entities[0][Attributes.Booking.Owner] != null)
            {
                trace.Trace($"owner: {((EntityReference)(response.Entities[0][Attributes.Booking.Owner])).Id}");
                caseDetail.Owner     = ((EntityReference)(response.Entities[0][Attributes.Booking.Owner])).Id;
                caseDetail.OwnerType = ((EntityReference)(response.Entities[0][Attributes.Booking.Owner])).LogicalName;
            }

            trace.Trace("GetCaseDetailsFor - end");
            return(caseDetail);
        }
コード例 #24
0
        public async Task UserOptinCaseNoification(Messaging message, Company company)
        {
            try
            {
                _company = company;

                var jiraCaseKey       = message.optin.payload.Replace(FacebookCustomPayload.CASE_GET_NOTIFIED, string.Empty);
                var oneTimeNotifToken = message.optin.one_time_notif_token;

                var user = _jiraUserMgmtService.GetUser(message.sender.id, _company.Id);
                var ticketUserCompany = _clientCompanyService.GetById(user.ClientCompanyId);

                // Get current ticket status
                CaseDetail caseDetail = null;
                try
                {
                    caseDetail = await _jiraCaseMgmtService.GetCaseStatusAsync(company, ticketUserCompany.TicketSysCompanyCode, jiraCaseKey);
                }
                catch { }

                // Jira no result

                TicketSysNotification ticketSysNotification = new TicketSysNotification
                {
                    TicketSysUserId   = user.Id,
                    OneTimeNotifToken = oneTimeNotifToken,
                    JiraCaseKey       = jiraCaseKey,
                    JiraCaseStatus    = caseDetail != null ? caseDetail.Status : null,
                };

                _userCaseNotifService.Create(ticketSysNotification);

                List <JObject> messageList = new List <JObject>();

                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = message.sender.id },
                    message   = new { text = $"All set! We'll send you a notification when there is an update! 👍" }
                }));
                messageList.Add(JObject.FromObject(new
                {
                    recipient = new { id = message.sender.id },
                    message   = new { text = $"Thank you for using TicketBOT! Have a nice day! :)" }
                }));

                foreach (var msg in messageList)
                {
                    await _fbApiClientService.PostMessageAsync(Utility.ParseDInfo(_company.FbPageToken, _applicationSettings.General.SysInfo), msg);
                }
            }
            catch (Exception ex)
            {
                var errMsg = JObject.FromObject(new
                {
                    recipient = new { id = message.sender.id },
                    message   = new { text = $"DEBUG --> Error. Check exception" }
                });
                await _fbApiClientService.PostMessageAsync(Utility.ParseDInfo(_company.FbPageToken, _applicationSettings.General.SysInfo), errMsg);

                LoggingHelper.LogError(ex, _logger);
            }
        }