public async Task <ComprobanteDeudaSoftland> RecuperarComprobanteDeuda(string identificadorDeuda)
        {
            string sSql = "SELECT " +
                          " VTRMVH_CODEMP, VTRMVH_MODFOR, VTRMVH_CODFOR, VTRMVH_NROFOR, VTRMVC_FCHVNC, VTRMVC_IMPNAC, VTRMVH_NROCTA, " +
                          " ISNULL((SELECT SUM(VTRMVC_IMPNAC) FROM VTRMVC " +
                          " WHERE " +
                          " VTRMVC_EMPAPL = VTRMVH_CODEMP AND " +
                          " VTRMVC_MODAPL = VTRMVH_MODFOR AND " +
                          " VTRMVC_CODAPL = VTRMVH_CODFOR AND " +
                          " VTRMVC_NROAPL = VTRMVH_NROFOR ),0) SALDO " +
                          " FROM VTRMVH " +
                          " INNER JOIN VTRMVC ON " +
                          " VTRMVC_CODEMP = VTRMVH_CODEMP AND " +
                          " VTRMVC_MODFOR = VTRMVH_MODFOR AND " +
                          " VTRMVC_CODFOR = VTRMVH_CODFOR AND " +
                          " VTRMVC_NROFOR = VTRMVH_NROFOR AND " +
                          " VTRMVC_CODFOR = VTRMVC_CODAPL " +
                          " WHERE " +
                          $" USR_VTRMVH_IDC = '{identificadorDeuda}' ";

            ComprobanteDeudaSoftland comprobante = new ComprobanteDeudaSoftland();

            using (SqlConnection sql = new SqlConnection(Connectionstring))
            {
                using (SqlCommand cmd = new SqlCommand(sSql, sql))
                {
                    cmd.CommandType = System.Data.CommandType.Text;

                    await sql.OpenAsync();

                    using (var reader = await cmd.ExecuteReaderAsync())
                    {
                        while (await reader.ReadAsync())
                        {
                            comprobante.Codemp = (string)reader["VTRMVH_CODEMP"];
                            comprobante.Modfor = (string)reader["VTRMVH_MODFOR"];
                            comprobante.Codfor = (string)reader["VTRMVH_CODFOR"];
                            comprobante.Nrofor = (int)reader["VTRMVH_NROFOR"];
                            comprobante.Fchvnc = (DateTime)reader["VTRMVC_FCHVNC"];
                            comprobante.Import = (decimal)reader["VTRMVC_IMPNAC"];
                            comprobante.Nrocta = (string)reader["VTRMVH_NROCTA"];
                            comprobante.Saldo  = (decimal)reader["SALDO"];
                        }
                    }
                }

                return(comprobante);
            }
        }
        public async Task <RespPagarDeudas> Post(string codBoca, string codTerminal, ComprobanteDeudaSoftland comprobanteDeuda,
                                                 string codEnte, string idTransaccion, string importe, int status)
        {
            RespPagarDeudas response = new RespPagarDeudas();

            SarVtrrch HeaderCobranza = new SarVtrrch
            {
                SarVtrrchIdenti  = idTransaccion,
                SarVtrrchStatus  = "W",
                SarVtrrchCodcom  = await RecuperarEquivalencia("WEBSER", "CODCOM", codEnte),
                SarVtrrchNrocta  = comprobanteDeuda.Nrocta,
                SarVtrrchCodemp  = "WILTEL2",
                SarVtrrchFchmov  = DateTime.Now.Date,
                SarVtFecalt      = DateTime.Now,
                SarVtFecmod      = DateTime.Now,
                SarVtDebaja      = "N",
                SarVtOalias      = "SAR_VTRRCH",
                SarVtrrchErrmsg  = "",
                SarVtUltopr      = "A",
                SarVtUserid      = "WEBAPI",
                UsrVtrrchWsestad = status,
                UsrVtrrchCodboc  = codBoca,
                UsrVtrrchCodter  = codTerminal,
                UsrVtrrchCodent  = Int16.Parse(codEnte)
            };


            SarVtrrcc01 AplicacionesCobranza = new SarVtrrcc01
            {
                SarVtrrcc01Identi = idTransaccion,
                SarVtrrcc01Nroitm = 1,
                SarVtrrcc01Modapl = comprobanteDeuda.Modfor,
                SarVtrrcc01Codapl = comprobanteDeuda.Codfor,
                SarVtrrcc01Nroapl = comprobanteDeuda.Nrofor,
                SarVtrrcc01Cuotas = 1,
                SarVtrrcc01Impnac = null,
                SarVtrrcc01Impext = null,
                SarVtrrcc01Cannac = Convert.ToDecimal(importe),
                SarVtrrcc01Canext = null,
                SarVtFecalt       = DateTime.Now,
                SarVtFecmod       = DateTime.Now,
                SarVtUserid       = "WEBAPI",
                SarVtUltopr       = "A",
                SarVtDebaja       = "N"
            };

            SarVtrrcc04 MediosdeCobro = new SarVtrrcc04
            {
                SarVtrrcc04Identi = idTransaccion,
                SarVtrrcc04Nroitm = 1,
                SarVtrrcc04Modcpt = null,
                SarVtrrcc04Tipcpt = await RecuperarEquivalencia("WEBSER", "TIPCPT", codEnte),
                SarVtrrcc04Codcpt = await RecuperarEquivalencia("WEBSER", "CODCPT", codEnte),
                SarVtrrcc04Import = Convert.ToDecimal(importe),
                SarVtFecalt       = DateTime.Now,
                SarVtFecmod       = DateTime.Now,
                SarVtUserid       = "WEBAPI",
                SarVtUltopr       = "A",
                SarVtDebaja       = "N"
            };

            try
            {
                Context.SarVtrrch.Add(HeaderCobranza);

                await Context.SaveChangesAsync();

                Context.SarVtrrcc01.Add(AplicacionesCobranza);

                await Context.SaveChangesAsync();

                Context.SarVtrrcc04.Add(MediosdeCobro);

                await Context.SaveChangesAsync();

                Logger.Information("Se insertaron registros en tablas SAR_VTRRCH e hijas");
            }
            catch (Exception error)
            {
                Logger.Fatal($"Error al insertar registros en tablas SAR_VTRRCH e hijas:{error}");
                response.Estado       = 999;
                response.NroOperacion = "";
            };

            if (status == 0)
            {
                response = await ProcesoRecibo(HeaderCobranza);
            }
            return(response);
        }
Beispiel #3
0
        public async Task <RespPagarDeudas> Post(string CodBoca, string CodTerminal,
                                                 string CodDeuda, string CodEnte,
                                                 string IdTransaccion, string Importe)
        {
            RespPagarDeudas response = new RespPagarDeudas
            {
                Estado       = 0,
                NroOperacion = ""
            };

            bool existe = await Repository.ExisteTransaccion(IdTransaccion);

            if (existe == true)
            {
                response.Estado       = 999; //Error interno... la transaccion ya existe
                response.NroOperacion = "";
                Logger.Warning($"El id transaccion {IdTransaccion} ya fue recibido.");
                return(response);
            }


            ComprobanteDeudaSoftland comprobanteDeuda = await Repository.RecuperarComprobanteDeuda(CodDeuda);

            if (comprobanteDeuda.Codfor == null)
            {
                response.Estado       = 4; // Codigo de Deuda inexistente
                response.NroOperacion = "";
                Logger.Warning($"Codigo de Deuda inexistente, Codfor: {comprobanteDeuda.Codfor}, Nrofor: {comprobanteDeuda.Nrofor}");
                return(response);
            }

            //A pedido de Diego Ballario, se elimina este control (Mail 29/05/2020)
            //if (comprobanteDeuda.Fchvnc.Date < DateTime.Now.Date)
            //{
            //    response.Estado = 3; //Deuda vencida
            //    response.NroOperacion = "";
            //    Logger.Warning($"Deuda vencida, el día {comprobanteDeuda.Fchvnc.Date} - Codfor: {comprobanteDeuda.Codfor}, Nrofor: {comprobanteDeuda.Nrofor}");
            //    return response;
            //}

            if (comprobanteDeuda.Saldo == 0)
            {
                response.Estado       = 7; // La deuda ya fue cancelada
                response.NroOperacion = "";
                Logger.Warning($"La deuda ya fue cancelada - Codfor: {comprobanteDeuda.Codfor}, Nrofor: {comprobanteDeuda.Nrofor}");
                return(response);
            }

            if (comprobanteDeuda.Saldo < Convert.ToDecimal(Importe))
            {
                response.Estado       = 10; //El importe no puede ser superior al monto adeudado del comprobante
                response.NroOperacion = "";
                Logger.Warning($"El importe no puede ser superior al monto adeudado del comprobante - " +
                               $"Codfor: {comprobanteDeuda.Codfor}, Nrofor: {comprobanteDeuda.Nrofor}" +
                               $"Monto adeudado:{comprobanteDeuda.Saldo}, Importe pagado: {Importe}");
                return(response);
            }

            if (response.Estado != 999)
            {
                response = await Repository.Post(CodBoca, CodTerminal,
                                                 comprobanteDeuda, CodEnte,
                                                 IdTransaccion, Importe, response.Estado);
            }


            return(response);
        }