Example #1
0
        /// <summary>
        /// Metodo para actualizar el CashOut al registrar el fin de día
        /// </summary>
        /// <param name="token">Token</param>
        /// <param name="compendioCashOut">Objeto que contiene el compendio de CashOut</param>
        /// <returns></returns>
        public ResponseBussiness <RelacionCaja> PersistirCashOut(TokenDto token, CompendioCashOut compendioCashOut)
        {
            return(tryCatch.SafeExecutor(() =>
            {
                RelacionCaja relacionCaja = new RelacionCaja();
                using (TransactionScope scope = new TransactionScope())
                {
                    // Persistir el Cash Out
                    int idCompendioCashOut = inicioFinDiaRepository.AgregarCompendioCashOut(compendioCashOut.CodigoTienda);
                    foreach (var compendio in compendioCashOut.CashOutCajas)
                    {
                        int idCashOut = inicioFinDiaRepository.AgregarCashOut(idCompendioCashOut, compendio.CodigoCaja);
                        foreach (var lecturaZ in compendio.LecturasZ)
                        {
                            foreach (var detalleLecturaZ in lecturaZ.DetallesLecturaFormaPago)
                            {
                                if (detalleLecturaZ.InformacionAsociadaFormasPago.CodigoFormaPago == "US")
                                {
                                    //Se crea administracion tipo cambio para poder obtener el tipo de cambio
                                    AdministracionTipoCambio tipoCambio = new AdministracionTipoCambio();

                                    //Se crea la peticion tipo cambio para crear el objeto con el que se obtendra el cambio de moneda
                                    TipoCambioRequest tipoCambioRequest = new TipoCambioRequest();

                                    //Se crea el response que nos retorna la conversion de la moneda extranjera.
                                    TipoCambioResponse tipoCambioResponse = new TipoCambioResponse();
                                    decimal importeConversionDolar = 0.0M;
                                    tipoCambioRequest.CodigoTipoDivisa = detalleLecturaZ.InformacionAsociadaFormasPago.CodigoFormaPago;
                                    tipoCambioRequest.ImporteMonedaNacional = detalleLecturaZ.ImporteFisico;
                                    tipoCambioResponse = tipoCambio.GetTipoCambio(tipoCambioRequest);

                                    //Convertimos la cantidad de dolares a pesos.
                                    importeConversionDolar = ConvertirDolaresPesos(tipoCambioResponse.TasaConversionVigente, detalleLecturaZ.ImporteFisico);

                                    //En el importe teorico añadiremos el importe de moneda nacional
                                    inicioFinDiaRepository.AgregarLecturaZCashOut(idCashOut, importeConversionDolar, detalleLecturaZ.ImporteTeorico, detalleLecturaZ.ImporteFisico,
                                                                                  detalleLecturaZ.TotalRetirosParciales, detalleLecturaZ.FondoFijoActual, detalleLecturaZ.InformacionAsociadaFormasPago.IdentificadorFormaPago,
                                                                                  detalleLecturaZ.InformacionAsociadaFormasPago.CodigoFormaPago, detalleLecturaZ.InformacionAsociadaFormasPago.DescripcionFormaPago);
                                }
                                else
                                {
                                    inicioFinDiaRepository.AgregarLecturaZCashOut(idCashOut, detalleLecturaZ.ImporteFisico, detalleLecturaZ.ImporteTeorico, detalleLecturaZ.ImporteFisico,
                                                                                  detalleLecturaZ.TotalRetirosParciales, detalleLecturaZ.FondoFijoActual, detalleLecturaZ.InformacionAsociadaFormasPago.IdentificadorFormaPago,
                                                                                  detalleLecturaZ.InformacionAsociadaFormasPago.CodigoFormaPago, detalleLecturaZ.InformacionAsociadaFormasPago.DescripcionFormaPago);
                                }
                            }
                        }
                    }
                    relacionCaja = inicioFinDiaRepository.ObtenerRelacionCaja(token);
                    // Terminar la transacción
                    scope.Complete();
                }
                return relacionCaja;
            }));
        }
Example #2
0
        public TipoCambioResponse GetTipoCambio(TipoCambioRequest tipoCambioRequest)
        {
            TipoCambioResponse tipoCambioResponse = new TipoCambioResponse();
            CambioDivisaMilano cambio             = new CambioDivisaMilano();
            InfoService        inforService       = externosRepository.ObtenerInfoServicioExterno(14);

            cambio = GetTipoCambioLocal(tipoCambioRequest);
            string  codigoRespuesta = "000";
            decimal valorCambio     = 0;

            if (tipoCambioRequest.CodigoTipoDivisa == "US")
            {
                //Inicializamos el proxy que nos ayudara a hacer la llamada al metodo de Sale
                ProxyTipoCambio.Service1SoapClient proxy = new ProxyTipoCambio.Service1SoapClient();
                proxy.Endpoint.Address = new System.ServiceModel.EndpointAddress(inforService.UrlService);
                string xml = "<ExchangeRateRequest><credentials><username>{0}</username>"
                             + "<password>{1}</password><clientCode>{2}</clientCode></credentials>" +
                             "<exchangeInfo><currencyCode>{3}</currencyCode></exchangeInfo></ExchangeRateRequest> ";
                xml = string.Format(xml, this.credenciales.UserName, this.credenciales.Password, "", cambio.CodigoExterno);
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml);
                XmlNode result = proxy.GetRate(doc);
                codigoRespuesta = result.ChildNodes[0].ChildNodes[0].InnerText;
                if (codigoRespuesta == "000")
                {
                    if (!cambio.UsarMaximoValor)
                    {
                        valorCambio = decimal.Round(Convert.ToDecimal(result.ChildNodes[1].ChildNodes[5].ChildNodes[0].InnerText), 2);
                    }
                    else
                    {
                        valorCambio = decimal.Round(Convert.ToDecimal(result.ChildNodes[1].ChildNodes[5].ChildNodes[1].InnerText), 2);
                    }
                }
                else
                {
                    throw new Exception(result.InnerText);
                }
            }
            else
            {
                valorCambio = cambio.ValorCambio;
            }
            if (valorCambio > 0)
            {
                tipoCambioResponse.Mensaje = "Ok";
                tipoCambioResponse.TasaConversionVigente = valorCambio;
                tipoCambioResponse.ImporteMonedaNacional = tipoCambioRequest.ImporteMonedaNacional;
                // Ajuste para redondear a modo de cubrir el monto mínimo
                decimal multiplicador = Convert.ToDecimal(Math.Pow(10, Convert.ToDouble(2)));
                tipoCambioResponse.ImporteMonedaExtranjera = Math.Ceiling((tipoCambioRequest.ImporteMonedaNacional / valorCambio) * multiplicador) / multiplicador;
                // Ajuste para redondear a modo de cubrir el monto mínimo
            }
            return(tipoCambioResponse);
        }