Ejemplo n.º 1
0
        public ActionResult PagoTbk()
        {
            Configuration configuration = new Configuration();

            configuration.Environment  = certificate["environment"];
            configuration.CommerceCode = certificate["commerce_code"];
            configuration.PublicCert   = certificate["public_cert"];
            configuration.WebpayCert   = certificate["webpay_cert"];
            configuration.Password     = certificate["password"];

            ViewModels.TbkViewModel         vm     = new ViewModels.TbkViewModel();
            Webpay.Transbank.Library.Webpay webpay = new Webpay.Transbank.Library.Webpay(configuration);

            String httpHost       = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_HOST"].ToString();
            String selfURL        = System.Web.HttpContext.Current.Request.ServerVariables["URL"].ToString();
            string action         = !String.IsNullOrEmpty(System.Web.HttpContext.Current.Request.QueryString["action"]) ? System.Web.HttpContext.Current.Request.QueryString["action"] : "init";
            string sample_baseurl = "http://" + httpHost + selfURL;

            Dictionary <string, string> description = new Dictionary <string, string>();

            description.Add("VD", "Venta Deb&iacute;to");
            description.Add("VN", "Venta Normal");
            description.Add("VC", "Venta en cuotas");
            description.Add("SI", "cuotas sin inter&eacute;s");
            description.Add("S2", "2 cuotas sin inter&eacute;s");
            description.Add("NC", "N cuotas sin inter&eacute;s");

            Dictionary <string, string> codes = new Dictionary <string, string>();

            codes.Add("0", "Transacci&oacute;n aprobada");
            codes.Add("-1", "Rechazo de transacci&oacute;n");
            codes.Add("-2", "Transacci&oacute;n debe reintentarse");
            codes.Add("-3", "Error en transacci&oacute;n");
            codes.Add("-4", "Rechazo de transacci&oacute;n");
            codes.Add("-5", "Rechazo por error de tasa");
            codes.Add("-6", "Excede cupo m&aacute;ximo mensual");
            codes.Add("-7", "Excede l&iacute;mite diario por transacci&oacute;n");
            codes.Add("-8", "Rubro no autorizado");

            string  buyOrder;
            string  tx_step            = "";
            string  authorizationCodeR = "";
            string  idVenta            = "";
            decimal amount             = 0;
            string  horaProceso        = "";
            string  minProceso         = "";
            string  secProceso         = "";
            string  clientName         = "";

            try
            {
                try { clientName = (Request.Cookies["clientName"].Value != null) ? Request.Cookies["clientName"].Value : ""; }
                catch { clientName = ""; }

                switch (action)
                {
                default:

                    tx_step = "Init";
                    Random random = new Random();
                    horaProceso = Request.Cookies["horaProceso"].Value;
                    minProceso  = Request.Cookies["minProceso"].Value;
                    secProceso  = Request.Cookies["secProceso"].Value;
                    idVenta     = Request.Cookies["IdVenta"].Value;
                    amount      = Convert.ToDecimal(Request.Cookies["amount"].Value);
                    buyOrder    = idVenta;  //random.Next(0, 1000).ToString() + idVenta;
                    string sessionId = random.Next(0, 1000).ToString();
                    string urlReturn = sample_baseurl + "?action=result";
                    string urlFinal  = sample_baseurl + "?action=end";

                    request.Add("amount", amount.ToString());
                    request.Add("buyOrder", buyOrder.ToString());
                    request.Add("sessionId", sessionId.ToString());
                    request.Add("urlReturn", urlReturn.ToString());
                    request.Add("urlFinal", urlFinal.ToString());

                    DateTime aDate = DateTime.Now;
                    try
                    {
                        aDate = new DateTime(aDate.Year, aDate.Month, aDate.Day, Convert.ToInt32(horaProceso), Convert.ToInt32(minProceso), Convert.ToInt32(secProceso));
                    }
                    catch { }

                    DAL.MaestroVentas m1   = new DAL.MaestroVentas();
                    DTO.LogTbkDTO     log1 = new DTO.LogTbkDTO
                    {
                        IdVenta     = Convert.ToInt32(idVenta),
                        Fecha       = aDate,
                        Monto       = Convert.ToDouble(Request.Cookies["amount"].Value),
                        Token       = string.Empty,
                        CodigoTbk   = string.Empty,
                        Estado      = "Pendiente",
                        OrdenCompra = buyOrder
                    };
                    m1.SaveLogtBK(log1);

                    wsInitTransactionOutput result = webpay.getNormalTransaction().initTransaction(amount, buyOrder, sessionId, urlReturn, urlFinal);

                    if (result.token != null && result.token != "")
                    {
                        message = "Sesion iniciada con exito en Webpay";
                    }
                    else
                    {
                        message = "WebPay no disponible";
                        tx_step = "Error";
                    }

                    vm.token             = result.token;
                    vm.url               = result.url;
                    vm.step              = tx_step;
                    vm.message           = message;
                    vm.authorizationCode = "";
                    vm.amount            = 0;
                    vm.buyOrder          = "";
                    vm.client            = clientName;

                    break;

                case "result":

                    tx_step = "Get Result";
                    string   idVentaResp = Request.Cookies["IdVenta"].Value;
                    string[] keysPost    = Request.Form.AllKeys;
                    string   token       = Request.Form["token_ws"];
                    request.Add("token", token.ToString());

                    transactionResultOutput result2 = webpay.getNormalTransaction().getTransactionResult(token);

                    if (result2.detailOutput[0].responseCode == 0)
                    {
                        authorizationCodeR = result2.detailOutput[0].authorizationCode;
                        message            = "Pago ACEPTADO por webpay (se deben guardar datos para mostrar voucher)";

                        System.Web.HttpContext.Current.Response.Write("<script>localStorage.setItem('authorizationCode', " + result2.detailOutput[0].authorizationCode + ")</script>");
                        System.Web.HttpContext.Current.Response.Write("<script>localStorage.setItem('commercecode', " + result2.detailOutput[0].commerceCode + ")</script>");
                        System.Web.HttpContext.Current.Response.Write("<script>localStorage.setItem('amount', " + result2.detailOutput[0].amount + ")</script>");
                        System.Web.HttpContext.Current.Response.Write("<script>localStorage.setItem('buyOrder', " + result2.detailOutput[0].buyOrder + ")</script>");
                        System.Web.HttpContext.Current.Response.Write("<script>localStorage.setItem('clientName', " + clientName + ")</script>");

                        vm.token             = token;
                        vm.url               = result2.urlRedirection;
                        vm.step              = tx_step;
                        vm.message           = message;
                        vm.authorizationCode = authorizationCodeR;
                        vm.amount            = (double)result2.detailOutput[0].amount;
                        vm.buyOrder          = result2.detailOutput[0].buyOrder;
                        vm.client            = clientName;

                        DAL.MaestroVentas m = new DAL.MaestroVentas();
                        m.ActualizaEstadoVenta("2", Convert.ToInt32(idVentaResp));

                        DTO.LogTbkDTO log = new DTO.LogTbkDTO {
                            IdVenta     = Convert.ToInt32(idVentaResp),
                            Fecha       = result2.transactionDate,
                            Monto       = vm.amount,
                            Token       = vm.token,
                            CodigoTbk   = vm.authorizationCode,
                            Estado      = "Finalizado",
                            OrdenCompra = vm.buyOrder
                        };
                        m.UpdateStateLogtBK(log);

                        Helpers.CreaNotaVenta cnt = new Helpers.CreaNotaVenta();
                        double r = cnt.CreaNotaVentaSofltand(Convert.ToInt32(idVentaResp));
                    }
                    else
                    {
                        message = "Pago RECHAZADO por WebPay, Codigo: " + result2.detailOutput[0].responseCode;

                        vm.token             = token;
                        vm.url               = result2.urlRedirection;
                        vm.step              = "Error";
                        vm.message           = message;
                        vm.authorizationCode = result2.detailOutput[0].authorizationCode;
                        vm.amount            = (double)result2.detailOutput[0].amount;
                        vm.buyOrder          = result2.detailOutput[0].buyOrder;
                        vm.client            = clientName;

                        DAL.MaestroVentas m   = new DAL.MaestroVentas();
                        DTO.LogTbkDTO     log = new DTO.LogTbkDTO
                        {
                            IdVenta     = Convert.ToInt32(idVentaResp),
                            Fecha       = result2.transactionDate,
                            Monto       = vm.amount,
                            Token       = vm.token,
                            CodigoTbk   = vm.authorizationCode,
                            Estado      = "Rechazado",
                            OrdenCompra = vm.buyOrder
                        };
                        m.UpdateStateLogtBK(log);
                    }

                    Response.Cookies["amount"].Expires      = DateTime.Now.AddDays(-1);
                    Response.Cookies["IdVenta"].Expires     = DateTime.Now.AddDays(-1);
                    Response.Cookies["horaProceso"].Expires = DateTime.Now.AddDays(-1);
                    Response.Cookies["minProceso"].Expires  = DateTime.Now.AddDays(-1);
                    Response.Cookies["secProceso"].Expires  = DateTime.Now.AddDays(-1);
                    Response.Cookies["clientName"].Expires  = DateTime.Now.AddDays(-1);

                    break;

                case "end":

                    tx_step = "End";
                    request.Add("", "");
                    message = "Transacción Finalizada";
                    string next_page = sample_baseurl + "?action=nullify";

                    System.Web.HttpContext.Current.Response.Write("<form action=" + next_page + " method='post'><input type='hidden' name='commercecode' id='commercecode' value=''><input type='hidden' name='authorizationCode' id='authorizationCode' value=''><input type='hidden' name='amount' id='amount' value=''><input type='hidden' name='buyOrder' id='buyOrder' value=''><input type='hidden' name='client' id='client' value=''><input type='hidden' name='product' id='product' value=''><input type='hidden' value='Anular Transacci&oacute;n &raquo;'></form>");
                    System.Web.HttpContext.Current.Response.Write("<script>var commercecode = localStorage.getItem('commercecode');document.getElementById('commercecode').value = commercecode;</script>");
                    System.Web.HttpContext.Current.Response.Write("<script>var authorizationCode = localStorage.getItem('authorizationCode');document.getElementById('authorizationCode').value = authorizationCode;</script>");
                    System.Web.HttpContext.Current.Response.Write("<script>var amount = localStorage.getItem('amount');document.getElementById('amount').value = amount;</script>");
                    System.Web.HttpContext.Current.Response.Write("<script>var buyOrder = localStorage.getItem('buyOrder');document.getElementById('buyOrder').value = buyOrder;</script>");
                    System.Web.HttpContext.Current.Response.Write("<script>var clientName = localStorage.getItem('clientName');document.getElementById('clientName').value = clientName;</script>");

                    vm.token             = "";
                    vm.url               = "";
                    vm.step              = tx_step;
                    vm.message           = message;
                    vm.authorizationCode = authorizationCodeR;
                    vm.amount            = (double)amount;
                    vm.buyOrder          = "";
                    vm.client            = clientName;

                    break;

                case "nullify":

                    tx_step = "nullify";
                    string[] keysNullify       = Request.Form.AllKeys;
                    string   commercecode      = Request.Form["commercecode"];
                    string   authorizationCode = Request.Form["authorizationCode"];
                    decimal  authorizedAmount  = Int64.Parse(Request.Form["amount"]);
                    buyOrder = Request.Form["buyOrder"];
                    decimal nullifyAmount = 3;

                    request.Add("authorizationCode", authorizationCode.ToString());
                    request.Add("authorizedAmount", authorizedAmount.ToString());
                    request.Add("buyOrder", buyOrder.ToString());
                    request.Add("nullifyAmount", nullifyAmount.ToString());
                    request.Add("commercecode", commercecode.ToString());

                    nullificationOutput resultNullify = webpay.getNullifyTransaction().nullify(authorizationCode, authorizedAmount, buyOrder, nullifyAmount, commercecode);
                    message = "Transacción Finalizada";

                    vm.token             = "";
                    vm.url               = "";
                    vm.step              = tx_step;
                    vm.message           = message;
                    vm.authorizationCode = "";
                    vm.amount            = 0;
                    vm.buyOrder          = "";
                    vm.client            = "";

                    break;
                }
            }
            catch (Exception ex)
            {
                vm.token             = "";
                vm.url               = "";
                vm.step              = "Error";
                vm.message           = "Ocurrio un error en la transacción (Validar correcta configuración de parametros). " + ex.Message;
                vm.authorizationCode = "";
                vm.amount            = 0;
                vm.buyOrder          = "";
                vm.client            = "";
            }

            return(PartialView(vm));
        }
Ejemplo n.º 2
0
        public double CreaNotaVentaSofltand(int IdVenta)
        {
            double nventa = 0;

            try
            {
                //obtiene valor iva
                int iva = 19;
                MaestroParametros mpa   = new MaestroParametros();
                ParametrosDTO     param = mpa.GetParametro("Iva");
                if (param.Valor != null)
                {
                    iva = Convert.ToInt32(param.Valor);
                }

                //Nota de Venta
                MaestroVentas          m  = new DAL.MaestroVentas();
                VentaDTO               vc = m.GetVentaById(IdVenta);
                List <VentaDetalleDTO> vd = m.GetDetallesVenta(IdVenta);

                MaestroClientes mc      = new MaestroClientes();
                ClienteDTO      cliente = mc.GetClienteByRut(vc.RutCliente);

                MaestroCondicionVentaTipoPago    cvtp      = new MaestroCondicionVentaTipoPago();
                List <CondicionVentaTipoPagoDTO> pago      = cvtp.GetAllByCondVta(vc.CodCondVta);
                CondicionVentaTipoPagoDTO        pagoFinal = pago.Where(x => x.IdTipoPago == vc.IdTipoPago).FirstOrDefault();
                string tipoPagoDescripcion = "";
                try { tipoPagoDescripcion = pagoFinal.Descripcion; } catch { }

                string[] CodAuxs = vc.RutCliente.Replace(".", "").Split('-');
                string   CodAux  = CodAuxs[0].ToString().Trim();

                decimal descuento = 0;
                decimal subtotal  = 0;
                decimal monto     = 0;
                int     index     = 1;

                ProductosDTO               prod = new ProductosDTO();
                MaestroProductos           mp   = new MaestroProductos();
                NotaVentaDetalleDTO        n    = new NotaVentaDetalleDTO();
                List <NotaVentaDetalleDTO> nvd  = new List <NotaVentaDetalleDTO>();

                foreach (VentaDetalleDTO item in vd)
                {
                    monto     = monto + item.Total;
                    descuento = descuento + item.Descuento;
                    subtotal  = subtotal + item.SubTotal;

                    prod = mp.GetProductoByCodigo(item.CodProducto);

                    //remuevo el iva del precio
                    decimal vIva = (item.Precio / Convert.ToDecimal(1.19));
                    item.Precio = vIva;

                    n = new NotaVentaDetalleDTO
                    {
                        NVNumero                = "",
                        nvLinea                 = index,
                        nvCorrela               = 0,
                        nvFecCompr              = DateTime.Now,
                        CodProd                 = item.CodProducto,
                        nvCant                  = item.Cantidad,
                        nvPrecio                = item.Precio,                 //sin iva
                        nvEquiv                 = 1,
                        nvSubTotal              = item.Precio * item.Cantidad, //sin iva
                        nvTotLinea              = item.Precio * item.Cantidad, //sin iva
                        nvCantDesp              = 0,
                        nvCantProd              = 0,
                        nvCantFact              = 0,
                        nvCantDevuelto          = 0,
                        nvCantNC                = 0,
                        nvCantBoleta            = 0,
                        nvCantOC                = 0,
                        DetProd                 = prod.DesProd,
                        CheckeoMovporAlarmaVtas = "N",
                        CodPromocion            = "",
                        CodUMed                 = prod.CodUmed,
                        CantUVta                = prod.Cantidad
                    };

                    nvd.Add(n);
                    index = index + 1;
                }

                //Genera nota de venta
                NotaVentaDTO nvta = new NotaVentaDTO();
                nvta.Detalles = nvd;
                nvta.Cabecera = new NotaVentaCabeceraDTO
                {
                    RutCliente           = vc.RutCliente,
                    NVNumero             = "",
                    nvFem                = DateTime.Now,
                    nvEstado             = "A",
                    nvEstFact            = 0,
                    nvEstDesp            = 0,
                    nvEstRese            = 0,
                    nvEstConc            = 0,
                    CotNum               = 0,
                    NumOC                = 0,
                    nvFeEnt              = DateTime.Now,
                    CodAux               = CodAux,
                    VenCod               = vc.CodVendedor,
                    CodMon               = "01",
                    CodLista             = cliente.CodLista,
                    nvObser              = tipoPagoDescripcion,
                    nvCanalNV            = "",
                    CveCod               = "EFE",
                    NomCon               = cliente.Contacto,
                    CodiCC               = "",
                    CodBode              = "",
                    nvSubTotal           = subtotal, //sin iva
                    nvMonto              = monto,    //con iva
                    nvFeAprob            = DateTime.Now,
                    NumGuiaRes           = 0,
                    nvPorcFlete          = 0,
                    nvValflete           = 0,
                    nvPorcEmb            = 0,
                    nvValEmb             = 0,
                    nvEquiv              = 1,
                    nvNetoExento         = 0,
                    nvNetoAfecto         = subtotal,
                    nvTotalDesc          = descuento,
                    ConcAuto             = "N",
                    CheckeoPorAlarmaVtas = "N",
                    EnMantencion         = 0,
                    Usuario              = "",
                    UsuarioGeneraDocto   = "softland",
                    FechaHoraCreacion    = DateTime.Now,
                    Sistema              = "NW",
                    ConcManual           = "N",
                    RutSolicitante       = "",
                    proceso              = "Nota de Venta",
                    TotalBoleta          = 0,
                    NumReq               = 0,
                    CodLugarDesp         = ""
                };

                MaestroMetodosSoftland ms = new MaestroMetodosSoftland();
                double NumNtaVenta        = ms.SaveNotaVentaSoftland(nvta);
                nventa = NumNtaVenta;

                m.ActualizaNotaVenta_Venta(NumNtaVenta, IdVenta);

                try
                {
                    //Despacho
                    MaestroTipoDespacho mtd  = new MaestroTipoDespacho();
                    VentaDespachoDTO    vDes = m.GetDespachoVenta(IdVenta);
                    TipoDespachoDTO     td   = mtd.GetById(vDes.IdTipoDespacho);

                    DespachoSotlandDTO despacho = new DespachoSotlandDTO
                    {
                        CodAxD     = nvta.Cabecera.CodAux,
                        NomDch     = NumNtaVenta.ToString(),
                        DirDch     = vDes.Direccion,
                        ComDch     = vDes.ComCod,
                        CiuDch     = vDes.CiuCom,
                        PaiDch     = "CL",
                        Fon1Dch    = vDes.Telefono,
                        AteDch     = td.Nombre,
                        RegionDch  = vDes.IdRegion,
                        Usuario    = "Web",
                        Proceso    = "IW_FACLIN",
                        FechaUlMod = DateTime.Now
                    };
                    ResponseInfo responseDespacho = ms.SaveDespachoSoftland(despacho);
                }
                catch { }
            }
            catch (Exception ex) { return(0); }
            return(nventa);
        }