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); }
// 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; } }
/// <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}"); } }
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); }
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); }
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)); }
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")); }
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); }
// 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)); }
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" }))); }
// 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)); }
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); }
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); }
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); }
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; } }
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")); } }
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); }
/// <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}"); } }
public void UpdateCaseDetail(CaseDetail caseDetail) { caseDetailTransactional.Update(caseDetail); unitOfWork.SaveChanges(); }
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); }
/// <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); }
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; } }
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); }
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); } }