public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { if (sessionID.Equals("0")) { return new GetRolesResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, RolList = new RolList() } } ; GetRolesRequestBody request = requestObject as GetRolesRequestBody; GetRolesResponseBody response = null; LogisticsInterface logisticsWS = new LogisticsInterface(); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[GetRolesProvider] [SEND-DATA] getRolesParameters {agentReference=" + request.Agent + "}"); response = new GetRolesResponseBody() { ResponseCode = 0, ResponseMessage = "OK", RolList = Utils.GetRoles(request.Agent), TransactionID = 0 }; StringBuilder sb = new StringBuilder(); foreach (Rol rol in response.RolList) { sb.Append("Rol={RolId=" + rol.RolId + ",RolName=" + rol.RolName + "},"); } if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[GetRolesProvider] [RECV-DATA] getRolesResult {response={" + sb.ToString() + "}}"); return(response); } }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { if (sessionID.Equals("0")) { return new GetSalesSummaryResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, FinalAmount = 0m, InitialAmount = 0m, Summaries = new SummaryItems(), SummaryDate = DateTime.Now } } ; GetSalesSummaryRequestBody request = requestObject as GetSalesSummaryRequestBody; GetSalesSummaryResponseBody response = null; ManagementInterface managementWS = new ManagementInterface(); LogisticsInterface logisticsWS = new LogisticsInterface(); string message; #region comentario //int voucherQtyDownload, retailerId; //string retailerName, retailerAddress, retailerLegalId, ticketHeader, currentTime; //if (!managementWS.GetRetailerInfo(int.Parse(sessionID), out retailerId, out retailerName, out retailerAddress, out retailerLegalId, out voucherQtyDownload, out ticketHeader, out currentTime, out message)) //{ // return new GetSalesSummaryResponseBody() // { // ResponseCode = 97, // ResponseMessage = message, // Summaries = null, // SummaryDate = request.Date, // TransactionID = new Random().Next(100000, 999999) // }; //} //int userId; //long timeOut; //string userName, userLastName, userAddress; //if (!managementWS.GetUserInfo(int.Parse(sessionID), out userId, out userName, out userLastName, out userAddress, out timeOut, out message)) //{ // return new GetSalesSummaryResponseBody() // { // ResponseCode = 98, // ResponseMessage = message, // Summaries = null, // SummaryDate = request.Date, // TransactionID = new Random().Next(100000, 999999) // }; //} #endregion /* Se comenta porque no hace nada (sólo reventar en caso de overflow * int amount, count; * * if (!kinacuWS.SaleCountBySeller(int.Parse(sessionID), out amount, out count, out message)) * { * return new GetSalesSummaryResponseBody() * { * ResponseCode = 99, * ResponseMessage = message, * Summaries = null, * SummaryDate = request.Date, * TransactionID = new Random().Next(100000, 999999) * }; * }*/ //long balance = kinacuWS.GetAccountBalance(int.Parse(sessionID), out message); SummaryItems summary = new SummaryItems(); decimal initialAmount, finalAmount; if (request.SummaryType == null || request.SummaryType.Equals(SummaryType.NotSpecified) || request.SummaryType.Equals(SummaryType.ByUser)) { summary = Utils.SalesSummary(request.AuthenticationData.Username, request.Date); response = new GetSalesSummaryResponseBody() { ResponseCode = 0, ResponseMessage = "OK", Summaries = summary, SummaryDate = request.Date, TransactionID = new Random().Next(100000, 999999) }; } else { summary = Utils.SalesSummaryByAgent(request.AuthenticationData.Username, request.Date, out initialAmount, out finalAmount); response = new GetSalesSummaryResponseBody() { ResponseCode = 0, ResponseMessage = "OK", Summaries = summary, SummaryDate = request.Date, TransactionID = new Random().Next(100000, 999999), InitialAmount = initialAmount, FinalAmount = finalAmount }; } // Asignar Nombre de agencia y fecha de impresion if (response != null) { response.BranchName = Utils.GetAgentName(request.AuthenticationData.Username); response.DatePrinter = Utils.GetLocalTimeZone().ToString("yyyy-MM-dd HH:mm:ss"); } //response.Summaries = new SummaryItems(); //if (request.WalletType == WalletType.Stock) // response.Summaries.Add(new SummaryItem() { TotalAmount = amount / 100m, TransactionCount = count, TransactionType = "Recargas y pines" }); //else // response.Summaries.Add(new SummaryItem() { TotalAmount = 0, TransactionCount = 0, TransactionType = "Recargas y pines" }); logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[GetSalessSummaryResult]").Tag(" GetSalesSummaries ").Value(response.Summaries.Count)); return(response); } }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { if (sessionID.Equals("0")) { return new GetPurchasesSummaryDashBoardResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, PurchasesSummariesDashBoard = new PurchasesSummaryDashBoardItems() } } ; GetPurchasesSummaryDashBoardRequestBody request = requestObject as GetPurchasesSummaryDashBoardRequestBody; GetPurchasesSummaryDashBoardResponseBody response = null; ManagementInterface managementWS = new ManagementInterface(); LogisticsInterface logisticsWS = new LogisticsInterface(); string message; PurchasesSummaryDashBoardItems summary = new PurchasesSummaryDashBoardItems(); summary = Utils.PurchasesSummaryByAgentDashBoard(request.AuthenticationData.Username, request.InitialDate, request.EndDate, out message); if (message.Equals("OK")) { decimal auxTotalPurchases = 0; if (summary != null) { auxTotalPurchases = summary.Sum(r => r.TotalAmount); } CommissionPurchasesSummaryDashItem summaryCommi = new CommissionPurchasesSummaryDashItem(); summaryCommi = Utils.CommissionPurchasesSummaryByAgentDashBoard(request.AuthenticationData.Username, request.InitialDate, request.EndDate, out message); if (message.Equals("OK") && summaryCommi != null) { response = new GetPurchasesSummaryDashBoardResponseBody() { ResponseCode = 0, ResponseMessage = message, PurchasesSummariesDashBoard = summary, SummaryDate = request.EndDate, TransactionID = 0, TotalPurchases = auxTotalPurchases, TotalRevenue = summaryCommi.TotalCommiPurchases, AverageCommission = summaryCommi.CommiPercentage }; } else { response = new GetPurchasesSummaryDashBoardResponseBody() { ResponseCode = 90, ResponseMessage = message, PurchasesSummariesDashBoard = new PurchasesSummaryDashBoardItems(), SummaryDate = request.EndDate, TransactionID = 0 }; } } else { response = new GetPurchasesSummaryDashBoardResponseBody() { ResponseCode = 90, ResponseMessage = message, PurchasesSummariesDashBoard = new PurchasesSummaryDashBoardItems(), SummaryDate = request.EndDate, TransactionID = 0 }; } logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[GetPurchasesSummaryDashBoardResult]").Tag(" GetPurchasesSummaryDashBoardProvider ").Value(response.PurchasesSummariesDashBoard.Count).Tag("Mensaje").Value(message)); return(response); } }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { if (sessionID.Equals("0")) { return new GetChildListResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, ChildList = new ChildList() } } ; //GetChildListRequestBody request = requestObject as GetChildListRequestBody; GetChildListRequestBody request = requestObject as GetChildListRequestBody; GetChildListResponseBody response = new GetChildListResponseBody(); LogisticsInterface logisticsWS = new LogisticsInterface(); logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetChildListProvider] [SEND-DATA] getChildRetailersParameters {UserId=" + sessionID + "}"); KinacuLogisticsWebService.Retailer[] childList = logisticsWS.GetChildRetailers(int.Parse(sessionID)); if (childList == null || childList.Count() <= 0) { logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetChildListProvider] [RECV-DATA] getChildRetailersResult {No posee Hijos}"); } else { StringBuilder sb = new StringBuilder(); KinacuLogisticsWebService.Retailer retailer = childList[0]; sb.Append("Retailer={Id=" + retailer.Id + ",Name=" + retailer.Name + "},"); if (childList.Length > 1) { retailer = childList[1]; sb.Append("Retailer={Id=" + retailer.Id + ",Name=" + retailer.Name + "},"); } sb.Remove(sb.Length - 1, 1); sb.Append("..."); logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetChildListProvider] [RECV-DATA] getChildRetailersResult {response=" + childList.Length + ",[" + sb.ToString() + "]}"); } response = new GetChildListResponseBody() { ResponseCode = (childList != null ? 0 : 99), ResponseMessage = (childList != null ? "exito" : "error"), TransactionID = 0 }; if (childList != null && childList.Length > 0) { response.ChildList = new ChildList(); foreach (KinacuLogisticsWebService.Retailer retailer in childList) { response.ChildList.Add(new BasicAgentInfo() { Agent = retailer.Id.ToString(), Name = retailer.Name }); } if (request.ExtendedValues ?? false) { var extendedValues = Utils.GetAgentExtendedValues(String.Join(",", response.ChildList.Select(ch => ch.Agent))); var rand = new Random(); foreach (BasicAgentInfo item in response.ChildList) { if (extendedValues.Any(e => e.Agent == item.Agent)) { var values = extendedValues.Single(e => e.Agent == item.Agent); item.Email = values.Email; item.Department = values.Department; item.City = values.City; item.CurrentBalance = values.CurrentBalance; item.Status = values.Status; item.ChildsCount = values.ChildsCount; item.PDVId = values.PDVId; } } } } return(response); } }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, string sessionID) { if (sessionID.Equals("0")) { return new GetSalesSummaryResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, FinalAmount = 0m, InitialAmount = 0m, Summaries = new SummaryItems(), SummaryDate = DateTime.Now } } ; GetSalesSummaryReportRequestBody request = requestObject as GetSalesSummaryReportRequestBody; if (request.InitialDate > request.EndDate) { // logger.InfoLow(() => TagValue.New().Message("RANGO DE FECHAS INVALIDO")); return(new GetSalesSummaryResponseBody() { ResponseCode = 90, ResponseMessage = "RANGO DE FECHAS INVALIDO", TransactionID = 0, FinalAmount = 0m, InitialAmount = 0m, Summaries = new SummaryItems(), SummaryDate = DateTime.Now }); } logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[GetSalesSummaryReport]").Tag("[RCV-DATA] GetSalesSummaryReport ").Value(request)); GetSalesSummaryResponseBody response = null; ManagementInterface managementWS = new ManagementInterface(); LogisticsInterface logisticsWS = new LogisticsInterface(); string message; #region comentario //int voucherQtyDownload, retailerId; //string retailerName, retailerAddress, retailerLegalId, ticketHeader, currentTime; //if (!managementWS.GetRetailerInfo(int.Parse(sessionID), out retailerId, out retailerName, out retailerAddress, out retailerLegalId, out voucherQtyDownload, out ticketHeader, out currentTime, out message)) //{ // return new GetSalesSummaryResponseBody() // { // ResponseCode = 97, // ResponseMessage = message, // Summaries = null, // SummaryDate = request.Date, // TransactionID = new Random().Next(100000, 999999) // }; //} //int userId; //long timeOut; //string userName, userLastName, userAddress; //if (!managementWS.GetUserInfo(int.Parse(sessionID), out userId, out userName, out userLastName, out userAddress, out timeOut, out message)) //{ // return new GetSalesSummaryResponseBody() // { // ResponseCode = 98, // ResponseMessage = message, // Summaries = null, // SummaryDate = request.Date, // TransactionID = new Random().Next(100000, 999999) // }; //} #endregion int amount, count; if (!kinacuWS.SaleCountBySeller(int.Parse(sessionID), out amount, out count, out message)) { return(new GetSalesSummaryResponseBody() { ResponseCode = 99, ResponseMessage = message, Summaries = null, SummaryDate = request.InitialDate, TransactionID = new Random().Next(100000, 999999) }); } //long balance = kinacuWS.GetAccountBalance(int.Parse(sessionID), out message); SummaryItems summary = new SummaryItems(); decimal initialAmount, finalAmount; if (request.SummaryType == null || request.SummaryType.Equals(SummaryType.NotSpecified) || request.SummaryType.Equals(SummaryType.ByUser)) { summary = Utils.SalesSummary(request.AuthenticationData.Username, request.InitialDate, request.EndDate); response = new GetSalesSummaryResponseBody() { ResponseCode = 0, ResponseMessage = "OK", Summaries = summary, // SummaryDate = DateTime.eM, TransactionID = new Random().Next(100000, 999999) }; } else { summary = Utils.SalesSummaryByAgent(request.Agent, request.InitialDate, request.EndDate, out initialAmount, out finalAmount); response = new GetSalesSummaryResponseBody() { ResponseCode = 0, ResponseMessage = "OK", Summaries = summary, // SummaryDate = request.InitialDate, TransactionID = new Random().Next(100000, 999999), InitialAmount = initialAmount, FinalAmount = finalAmount }; } //response.Summaries = new SummaryItems(); //if (request.WalletType == WalletType.Stock) // response.Summaries.Add(new SummaryItem() { TotalAmount = amount / 100m, TransactionCount = count, TransactionType = "Recargas y pines" }); //else // response.Summaries.Add(new SummaryItem() { TotalAmount = 0, TransactionCount = 0, TransactionType = "Recargas y pines" }); // logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX).Tag("[GetSalesSummaryReport]").Value(response)); logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[GetSalesSummaryReportResult]").Tag(" GetSalesSummaries ").Value(response.Summaries.Count)); return(response); } }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { TransferRequestBody request = requestObject as TransferRequestBody; TransferResponseBody response = null; int sourceUserId = 0, recipientAgentId = 0; string accessReceiver = ""; bool requestHasPDV = !String.IsNullOrEmpty(request.RecipientPdv); if (sessionID.Equals("0")) { response = new TransferResponseBody() { ResponseCode = requestHasPDV ? 3 : 90, ResponseMessage = requestHasPDV ? "ID Inactivo" : "error session", TransactionID = 0, StockBalance = 0m }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } return(response); } try { sourceUserId = new IBank.Utils().GetUserId(request.AuthenticationData.Username); } catch (Exception) { } int recipientId = 0; bool recipientIsNumeric = int.TryParse(request.Recipient, out recipientId); if (!String.IsNullOrEmpty(request.RecipientPdv)) { try { recipientAgentId = new IBank.Utils().GetAgentIdByPdv(request.RecipientPdv); accessReceiver = request.Recipient; } catch (Exception e) { if (requestHasPDV) { throw e; } else { return new TransferResponseBody() { ResponseCode = 3, ResponseMessage = "ID Inactivo", TransactionID = 0, StockBalance = 0m, ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") } }; } } else if (String.IsNullOrEmpty(request.RecipientAccessId)) { try { recipientAgentId = new IBank.Utils().GetAgentId(request.Recipient); accessReceiver = request.Recipient; } catch (Exception) { } } else { try { //TODO PROBLEMA NAMESAPCE Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().GetAgentId(request.RecipientAccessId); recipientAgentId = new IBank.Utils().GetAgentId(request.RecipientAccessId); accessReceiver = request.RecipientAccessId; } catch (Exception) { if (requestHasPDV) { return new TransferResponseBody() { ResponseCode = 3, ResponseMessage = "ID Inactivo", TransactionID = 0, StockBalance = 0m, ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") } } ; /*request.Recipient = request.RecipientAccessId;*/ } } if (recipientAgentId != 0) { request.Recipient = recipientAgentId.ToString(); } bool isChild = false; bool isNegativeAmount = false; bool acceptReverse = false; int sourceAgentId = new IBank.Utils().GetAgentId(request.AuthenticationData.Username); if (sourceAgentId == recipientAgentId) { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 90, ResponseMessage = requestHasPDV ? "ID Inactivo" : "Distribución de Saldo Fallida, agencia destino igual a agencia origen", //ResponseCode = 90, //ResponseMessage = "Distribución de Saldo Fallida, agencia destino igual a agencia origen", TransactionID = 0 }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } return(response); } if (request.Amount < 0) { isNegativeAmount = true; acceptReverse = new IBank.Utils().CheckReverse(request.Recipient); } var getChildListResponse = new ServiceExecutionDelegator <GetChildListResponseBody, GetChildListRequestBody>().ResolveRequest( new GetChildListRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password }, DeviceType = request.DeviceType, Agent = request.AuthenticationData.Username, Platform = "1" }, ApiTargetPlatform.Kinacu, ApiServiceName.GetChildList); if (getChildListResponse.ChildList != null && getChildListResponse.ChildList.Count(ch => ch.Agent == request.Recipient) > 0) { isChild = true; } if (isChild && !isNegativeAmount && !request.DBTransferIfChild) { // Acá resultó ser hijo y debe afectarse la cuenta corriente, así que procedo con la distribución a hijo vía WS LogisticsInterface logisticsWS = new LogisticsInterface(); string message = ""; logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] createProductDistributionParameters {UserId=" + sessionID + ",RetailerIdTo=" + decimal.Parse(request.Recipient) + ",IdProduct=0,Amount=" + int.Parse((request.Amount * 100).ToString("#")) + "}"); var result = logisticsWS.CreateProductDistribution(int.Parse(sessionID), decimal.Parse(request.Recipient), 0, int.Parse((request.Amount * 100).ToString("#")), out message); var transactionId = new IBank.Utils().GetDistributionId(DateTime.Now, Convert.ToDecimal(sourceAgentId), decimal.Parse(request.Recipient), request.Amount); logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TransferProvider] [RECV-DATA] createProductDistributionResult {response=" + result + ",message=" + message + "}"); if (result) { response = new TransferResponseBody() { Fee = 0, ResponseCode = 0, ResponseMessage = requestHasPDV ? "activado" : String.Format("Distribución de Saldo Exitosa\nFECHA: {0}\nVENDEDOR: {1}\nID PDV: {2}\nMONTO: {3}", DateTime.Now.ToString("dd/MM/yyyy"), request.AuthenticationData.Username, getChildListResponse.ChildList.Single(ch => ch.Agent == request.Recipient).Name, request.Amount.ToString("N2")), //message, TransactionID = transactionId }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : Utils.BuildResponseCode(result, message), ResponseMessage = requestHasPDV ? "ID Inactivo" : (String.IsNullOrEmpty(message) ? "La distribución es fallida, por favor valide que ingreso el ID correcto del PDV Hijo o que tiene suficiente saldo." : message), //ResponseCode = Utils.BuildResponseCode(result,message), //ResponseMessage = String.IsNullOrEmpty(message) ? "La distribución es fallida, por favor valide que ingreso el ID correcto del PDV Hijo o que tiene suficiente saldo." : message, //message, TransactionID = transactionId }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } } else if ((isChild && !isNegativeAmount && request.DBTransferIfChild) || (!isChild && !isNegativeAmount) || (isChild && isNegativeAmount && acceptReverse)) { // Acá resultó NO ser hijo(o hijo pero no se quiere afectar cta corriente), así que procedo con la distribución vía SP string autorization = "", messageOut = "", responseCode = "99"; DateTime myNow = Utils.GetLocalTimeZone(); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bParameters {agent_reciver=" + request.Recipient + ",cuenta=" + ConfigurationManager.AppSettings["TransferAccount"] + ",usr_id=" + sourceUserId + ",amount=" + double.Parse(request.Amount.ToString()) + ",reference_number=" + request.ExternalTransactionReference); // + ",date=" + myNow + "}"); //Se valida que el maximo a transferir si es hijo no exceda el límite de crédito (Condición Proesa) if (isChild && !isNegativeAmount && request.DBTransferIfChild) { //Ariel 2021-Ma-09 Comentado ponemos cero decimal maxCredit = 0; //Utils.GetAgentMaxCreditAvailable(request.Recipient); if (request.Amount > maxCredit) { logger.ErrorHigh(base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bParameters El monto Excede el máximo de crédito disponible Amount:" + request.Amount + " Limite Credito: " + maxCredit); return(new TransferResponseBody() { ResponseCode = 99, ResponseMessage = "EL MONTO EXCEDE EL LIMITE DE CREDITO CONFIGURADO", TransactionID = 0, StockBalance = 0m }); } } //decimal newAmount = 0m; var distributionResponse = new IBank.Utils().transferb2b(request.Recipient, accessReceiver, ConfigurationManager.AppSettings["TransferAccount"], sourceUserId, double.Parse(request.Amount.ToString()), request.ExternalTransactionReference, myNow, (isChild && isNegativeAmount && acceptReverse), ref autorization, ref messageOut, ref responseCode); //, ref newAmount); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [RECV-DATA] createProductDistributionResult {response=" + distributionResponse + ",autorization=" + autorization + ",message=" + messageOut + ",response_code=" + responseCode + "}"); if (int.Parse(responseCode ?? "99") == 0) { response = new TransferResponseBody() { Fee = 0, ResponseCode = 0, ResponseMessage = requestHasPDV ? "activado" : messageOut, TransactionID = int.Parse(autorization) }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : int.Parse(responseCode ?? "99"), ResponseMessage = requestHasPDV ? "ID Inactivo" : messageOut, TransactionID = String.IsNullOrEmpty(autorization) ? 99 : int.Parse(autorization) }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } } else if (!isChild && isNegativeAmount) { // TODO NEW CONDITION TO MO - Done int[] branchsAllowed = Array.ConvertAll <string, int>(ConfigurationManager.AppSettings["ReversesBranchesAllowed"].Split(','), int.Parse); if (branchsAllowed.Contains(sourceAgentId)) { // TODO Check the debt_amount var debtAmount = Utils.GetTotalDebt(request.Recipient); logger.InfoLow("[MO] " + base.LOG_PREFIX + "[MOApiProvider] [RECV-DATA] totalDebtAmount {response=" + debtAmount + "}"); if (Math.Abs(request.Amount) <= debtAmount) { // Mismo código que arriba string autorization = "", messageOut = "", responseCode = "99"; DateTime myNow = Utils.GetLocalTimeZone(); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bParameters {agent_reciver=" + request.Recipient + ",cuenta=" + ConfigurationManager.AppSettings["TransferAccount"] + ",usr_id=" + sourceUserId + ",amount=" + double.Parse(request.Amount.ToString()) + ",reference_number=" + request.ExternalTransactionReference + ",date=" + myNow + "}"); //decimal newAmount = 0m; var distributionResponse = new IBank.Utils().transferb2b(request.Recipient, accessReceiver, ConfigurationManager.AppSettings["TransferAccount"], sourceUserId, double.Parse(request.Amount.ToString()), request.ExternalTransactionReference, myNow, (isChild && isNegativeAmount && acceptReverse), ref autorization, ref messageOut, ref responseCode); //, ref newAmount, partialCharge: true); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [RECV-DATA] createProductDistributionResult {response=" + distributionResponse + ",autorization=" + autorization + ",message=" + messageOut + ",response_code=" + responseCode + "}"); if (int.Parse(responseCode ?? "99") == 0) { response = new TransferResponseBody() { Fee = 0, ResponseCode = 0, ResponseMessage = requestHasPDV ? "activado" : messageOut, TransactionID = int.Parse(autorization) }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : int.Parse(responseCode ?? "99"), ResponseMessage = requestHasPDV ? "ID Inactivo" : messageOut, TransactionID = String.IsNullOrEmpty(autorization) ? 99 : int.Parse(autorization) }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } //if (!newAmount.Equals(request.Amount)) // response.ChargedAmount = newAmount; } // End } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 99, ResponseMessage = requestHasPDV ? "ID Inactivo" : "El monto a debitar es superior a la deuda actual", TransactionID = 99 }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 99, ResponseMessage = requestHasPDV ? "ID Inactivo" : "Debito de stock no permitido", TransactionID = 99 }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } // Validate if the branch is MO (allowed from .config) // if true // query debt amount // if amount <= debt amount // transfer code (up) // else // return error amount too high // else // return error } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 99, ResponseMessage = requestHasPDV ? "ID Inactivo" : (isChild && isNegativeAmount && !acceptReverse ? "La agencia no acepta quitas automáticas" : "Error no identificado"), TransactionID = 99 }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } try { GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password }, DeviceType = request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); if (response != null) { response.StockBalance = balanceResponse.StockBalance.Value; } } catch (Exception) { } // Envío de SMS VE si lo tiene habilitado try { if (response.ResponseCode.Equals(0)) { var sendTransferSMS = ConfigurationManager.AppSettings["SendTransferSMS"]; if (!String.IsNullOrEmpty(sendTransferSMS) ? bool.Parse(sendTransferSMS) : false) { var mobilePhone = new IBank.Utils().GetAgentMobilePhone(int.Parse(request.Recipient)); var stockFinal = new IBank.Utils().GetAgentFinalStock(int.Parse(request.Recipient)); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] phone " + mobilePhone); if (mobilePhone.Length.Equals(int.Parse(ConfigurationManager.AppSettings["TelemoPhoneLength"]))) { logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] smsToCustomer begin"); Util.SMSTelemoDispatcher.SmsToCustomer(ConfigurationManager.AppSettings["TelemoClientId"], ConfigurationManager.AppSettings["TelemoCustomerId"], mobilePhone, String.Format(ConfigurationManager.AppSettings["TelemoMessageTemplate"], request.Amount.ToString("C"), stockFinal, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()).ToString("HH:mm:ss"))); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] smsToCustomer end"); } } } } catch (Exception ex) { logger.ErrorHigh("[SMS] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] " + ex.Message + ", " + ex.StackTrace); } return(response); } }