Esempio n. 1
0
        public DocumentoResponse Post(ResumenDiario resumen)
        {
            var response = new DocumentoResponse();

            try
            {
                var summary = _documentoXml.Generar(resumen);
                response.TramaXmlSinFirma = _serializador.GenerarXml(summary, true);
                response.Exito            = true;
            }
            catch (Exception ex)
            {
                response.Exito        = false;
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
            }

            return(response);
        }
Esempio n. 2
0
        public DocumentoResponse Post([FromBody] ResumenDiario resumen)
        {
            var response = new DocumentoResponse();

            try
            {
                var summary      = Generador.GenerarSummaryDocuments(resumen);
                var serializador = new Serializador();
                response.TramaXmlSinFirma = serializador.GenerarXml(summary);
                response.Exito            = true;
            }
            catch (Exception ex)
            {
                response.Exito        = false;
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
            }

            return(response);
        }
Esempio n. 3
0
        /// <summary>
        /// ResumenDiario.
        /// </summary>
        /// <param name="fechaDeCalculo">Fecha en la que se desean presentar los datos<see cref="DateTime"/>.</param>
        /// <returns>The <see cref="ResumenDiario"/>.</returns>
        public ResumenDiario ResumenDiario(DateTime fechaDeCalculo)
        {
            if (fechaDeCalculo > unidadCultivoDatosHidricos.FechaFinalDeEstudio())
            {
                fechaDeCalculo = unidadCultivoDatosHidricos.FechaFinalDeEstudio();
            }
            if (fechaDeCalculo > DateTime.Today)
            {
                fechaDeCalculo = DateTime.Today;
            }
            if (fechaDeCalculo < unidadCultivoDatosHidricos.FechaSiembra())
            {
                fechaDeCalculo = unidadCultivoDatosHidricos.FechaSiembra();
            }
            ResumenDiario ret = new ResumenDiario();
            LineaBalance  lb  = LineaBalance(fechaDeCalculo);

            ret.IdUnidadCultivo     = unidadCultivoDatosHidricos.IdUnidadCultivo;
            ret.FechaDeCalculo      = fechaDeCalculo;
            ret.RiegoTotal          = SumaRiegosMm(fechaDeCalculo);           // !!! SIAR ELIMINAR
            ret.RiegoEfectivoTotal  = SumaRiegoEfectivo(fechaDeCalculo);      // !!! SIAR ELIMINAR  y AÑADIR A LA SALIDA DatosHidricos
            ret.LluviaTotal         = SumaLluvias(fechaDeCalculo);            // !!! SIAR ELIMINAR
            ret.LluviaEfectivaTotal = SumaLluviasEfectivas(fechaDeCalculo);   // !!! SIAR ELIMINAR  y AÑADIR A LA SALIDA DatosHidricos
            ret.AguaPerdida         = AguaPerdida(fechaDeCalculo);            // !!! SIAR ELIMINAR
            ret.ConsumoAguaCultivo  = SumaConsumoAguaCultivo(fechaDeCalculo); // !!! SIAR ELIMINAR
            ret.DiasEstres          = NDIasEstres(fechaDeCalculo);            // !!! SIAR ELIMINAR
            ret.DeficitRiego        = double.NaN;                             // Aún no definido // !!! SIAR ELIMINAR y AÑADIR A LA SALIDA DatosHidricos
            ret.CosteDeficitRiego   = double.NaN;                             // Aúno no definido. // !!! SIAR ELIMINAR y AÑADIR A LA SALIDA DatosHidricos
            ret.CosteAguaRiego      = CosteAgua(fechaDeCalculo);              // !!! SIAR ELIMINAR
            ret.CosteAguaDrenaje    = CosteDrenaje(fechaDeCalculo);           // !!! SIAR ELIMINAR y AÑADIR A LA SALIDA DatosHidricos

            ret.CapacidadCampo = lb.CapacidadCampo;

            ret.LimiteAgotamiento  = lb.LimiteAgotamiento;
            ret.PuntoMarchitez     = lb.PuntoMarchitez;
            ret.ContenidoAguaSuelo = lb.ContenidoAguaSuelo;

            ret.CapacidadCampoPorcentaje = 1;
            try {
                ret.LimiteAgotamientoPorcentaje = (ret.LimiteAgotamiento - ret.PuntoMarchitez) / (ret.CapacidadCampo - ret.PuntoMarchitez);
            } catch {
                ret.LimiteAgotamientoPorcentaje = double.NaN;
            }

            ret.PuntoMarchitezPorcentaje = 0;
            try {
                ret.ContenidoAguaSueloPorcentaje = (ret.ContenidoAguaSuelo - ret.PuntoMarchitez) / (ret.CapacidadCampo - ret.PuntoMarchitez);
            } catch {
                ret.ContenidoAguaSueloPorcentaje = double.NaN;
            }

            ret.DrenajeProfundidad = lb.DrenajeProfundidad;
            ret.AvisoDrenaje       = CalculosHidricos.AvisoDrenaje(lb.DrenajeProfundidad);

            ret.AguaHastaCapacidadCampo  = ret.CapacidadCampo - ret.ContenidoAguaSuelo; // esto no lo debería usar Daniel
            ret.RecomendacionRiegoNeto   = lb.RecomendacionRiegoNeto;
            ret.RecomendacionRiegoBruto  = lb.RecomendacionRiegoBruto;                  // añadido SIAR
            ret.RecomendacionRiegoTiempo = lb.RecomendacionRiegoTiempo;

            ret.IndiceEstres      = lb.IndiceEstres;
            ret.MensajeEstres     = lb.MensajeEstres;
            ret.DescripcionEstres = lb.DescripcionEstres;
            ret.ColorEstres       = lb.ColorEstres;

            ret.CapacidadCampoRefPM        = lb.CapacidadCampoRefPM;
            ret.PuntoMarchitezRefPM        = lb.PuntoMarchitezRefPM;
            ret.ContenidoAguaSueloRefPM    = lb.ContenidoAguaSueloRefPM;
            ret.LimiteAgotamientoRefPM     = lb.LimiteAgotamientoRefPM;
            ret.LimiteAgotamientoFijoRefPM = lb.LimiteAgotamientoFijoRefPM;

            ret.AlturaFinal   = unidadCultivoDatosHidricos.CultivoAlturaFinal ?? 0;
            ret.AlturaInicial = unidadCultivoDatosHidricos.CultivoAlturaInicial ?? 0;
            ret.Altura        = lb.AlturaCultivo;

            ret.Cobertura = lb.Cobertura;

            ret.ProfRaizInicial = unidadCultivoDatosHidricos.CultivoProfRaizInicial;
            ret.ProfRaizMaxima  = unidadCultivoDatosHidricos.CultivoProfRaizMax;
            ret.LongitudRaiz    = lb.LongitudRaiz;

            ret.NumeroEtapaDesarrollo = lb.NumeroEtapaDesarrollo;
            ret.NombreEtapaDesarrollo = lb.NombreEtapaDesarrollo;
            return(ret);
        }
Esempio n. 4
0
        public string PostResumen(List <Data_Documentos> data_Documentos)
        {
            string mensajeRespuesta = string.Empty;

            try
            {
                GenerarResumenDiario generarResumenDiario = new GenerarResumenDiario();
                ResumenDiario        resumenDiario        = generarResumenDiario.Data(data_Documentos);
                DocumentoResponse    response             = generarResumenDiario.Post(resumenDiario);

                if (!response.Exito)
                {
                    Data_Log data_Log = new Data_Log()
                    {
                        DetalleError   = response.MensajeError,
                        Comentario     = $"El XML con identificador: {resumenDiario.IdDocumento} no se pudo generar",
                        IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }
                else
                {
                    string rutaArchivo = Path.Combine(data_Documentos[0].Ruta, $"{resumenDiario.IdDocumento}.xml");

                    Firmar          firmar          = new Firmar();
                    FirmadoRequest  firmadoRequest  = firmar.Data(data_Usuario.IdAccesosSunat, response.TramaXmlSinFirma);
                    FirmadoResponse firmadoResponse = firmar.Post(firmadoRequest, true); //  Ya se obtuvo el documento firmado

                    if (firmadoResponse.Exito)                                           //  Comprobamos que se haya firmado de forma correcta
                    {
                        EnviarSunat            enviarSunat            = new EnviarSunat();
                        EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documentos[0], GetURL("03"));
                        string nombreZip = $"{resumenDiario.Emisor.NroDocumento}-{resumenDiario.IdDocumento}";
                        EnviarResumenResponse enviarResumenResponse = enviarSunat.Post_Figurativo(enviarDocumentoRequest, nombreZip);

                        if (enviarResumenResponse.Exito)    // Comprobar envío a sunat
                        {
                            ConsultaConstanciaRequest consultaConstanciaRequest = new ConsultaConstanciaRequest()
                            {
                                Ruc         = enviarDocumentoRequest.Ruc,
                                UsuarioSol  = enviarDocumentoRequest.UsuarioSol,
                                ClaveSol    = enviarDocumentoRequest.ClaveSol,
                                EndPointUrl = " https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService"
                            };
                            Consultar consultar = new Consultar();
                            EnviarDocumentoResponse enviarDocumentoResponse = consultar.Post_Constancia(consultaConstanciaRequest);
                            if (enviarDocumentoResponse.Exito)
                            {
                                mensajeRespuesta = $"El resumen diario ha realizado con éxito, detalle: {enviarDocumentoResponse.MensajeRespuesta}";
                            }
                            else
                            {
                                mensajeRespuesta = "El resumen diario ha realizado con éxito, pero hemos tenido inconvenietes al obtener" +
                                                   " el CDR del documento: " + resumenDiario.IdDocumento + ", probablemente se este empleado el usuario MODDATOS," +
                                                   "para obtener el CDR debes descargarlo de forma manual en la opción 'Consulta de CDR'";
                                data_Log = new Data_Log()
                                {
                                    DetalleError   = mensajeRespuesta,
                                    Comentario     = $"Ha ocurrido un error al generar el CDR del resumen diario: {resumenDiario.IdDocumento}, probablemente se este empleado MODDATOS",
                                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                                };
                                data_Log.Create_Log();
                            }

                            Data_DocumentoFigurativo data_DocumentoFigurativo = new Data_DocumentoFigurativo()
                            {
                                XMLFirmado          = firmadoResponse.TramaXmlFirmado,
                                Tipo                = "Resumen diario",
                                ComentarioDocumento = mensajeRespuesta,
                                Identificador       = resumenDiario.IdDocumento,
                                NumeroTicket        = enviarResumenResponse.NroTicket,
                                CdrSunat            = enviarDocumentoResponse.TramaZipCdr ?? string.Empty
                            };

                            if (!data_DocumentoFigurativo.Create_DocumentoFigurativo())
                            {
                                data_Log = new Data_Log()
                                {
                                    DetalleError   = "Error inesperado en la base de datos",
                                    Comentario     = "Ha ocurrido un error al guardar el registro del resumen diario",
                                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                                };
                                data_Log.Create_Log();
                            }
                            else
                            {
                                Data_DocumentoFigurativo dataUnion_DocumentoFigurativo;
                                Data_Documentos          updateDocumento;
                                foreach (var data_Documento in data_Documentos)
                                {
                                    dataUnion_DocumentoFigurativo = new Data_DocumentoFigurativo()
                                    {
                                        IdDocumentoFigurativo = data_DocumentoFigurativo.SCOPE_IDENTITY_VALUE,
                                        IdDocumento           = data_Documento.IdDocumento
                                    };
                                    if (!dataUnion_DocumentoFigurativo.Create_Figurativo_Documentos())
                                    {
                                        data_Log = new Data_Log()
                                        {
                                            DetalleError = $"Detalle de tablas: Documentos {data_Documento.IdDocumento},{data_Documento.SerieCorrelativo} con la " +
                                                           $"tabla Figurativo_Documentos {data_DocumentoFigurativo.SCOPE_IDENTITY_VALUE}, {data_DocumentoFigurativo.Identificador} ",
                                            Comentario     = "Ha ocurrido un error al guardar el registro del resumen diario, en la tabla de unión",
                                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                                        };
                                        data_Log.Create_Log();
                                    }

                                    updateDocumento = new Data_Documentos()
                                    {
                                        IdDocumento         = data_Documento.IdDocumento,
                                        EnviadoSunat        = true,
                                        EstadoSunat         = "Aceptado",
                                        ComentarioDocumento = $"El documento figura dentro del resumen diario con el código de identificación: {data_DocumentoFigurativo.Identificador}",
                                        ComunicacionBaja    = false,
                                    };
                                    if (!updateDocumento.Update_Documento())
                                    {
                                        data_Log = new Data_Log()
                                        {
                                            DetalleError   = $"No se ha podido actualizar el documento{data_Documento.IdDocumento}, {data_Documento.SerieCorrelativo} para indicar que resumen diario",
                                            Comentario     = "Error en la base de datos",
                                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                                        };
                                        data_Log.Create_Log();
                                    }
                                }
                            }
                        }
                        else
                        {
                            mensajeRespuesta = enviarResumenResponse.MensajeError;
                            data_Log         = new Data_Log()
                            {
                                DetalleError   = enviarResumenResponse.MensajeError,
                                Comentario     = "Error al crear resumen diario",
                                IdUser_Empresa = data_Usuario.IdUser_Empresa
                            };
                            data_Log.Create_Log();
                        }
                    }
                    else
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al procesar el envío del documento",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
                mensajeRespuesta = $"Detalle del error: {msg}";
            }
            return(mensajeRespuesta);
        }
Esempio n. 5
0
        private static void CrearResumenDiario()
        {
            try
            {
                Console.WriteLine("Ejemplo de Resumen Diario");
                var documentoResumenDiario = new ResumenDiario
                {
                    IdDocumento     = string.Format("RC-{0:yyyyMMdd}-001", DateTime.Today),
                    FechaEmision    = DateTime.Today.ToString(FormatoFecha),
                    FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha),
                    Emisor          = CrearEmisor(),
                    Resumenes       = new List <GrupoResumen>()
                };

                documentoResumenDiario.Resumenes.Add(new GrupoResumen
                {
                    Id = 1,
                    CorrelativoInicio = 33386,
                    CorrelativoFin    = 33390,
                    Moneda            = "PEN",
                    TotalVenta        = 190.9m,
                    TotalIgv          = 29.12m,
                    Gravadas          = 161.78m,
                    Exoneradas        = 0,
                    Exportacion       = 0,
                    TipoDocumento     = "03",
                    Serie             = "BB50"
                });
                documentoResumenDiario.Resumenes.Add(new GrupoResumen
                {
                    Id = 2,
                    CorrelativoInicio = 40000,
                    CorrelativoFin    = 40500,
                    Moneda            = "PEN",
                    TotalVenta        = 9580m,
                    TotalIgv          = 1411.36m,
                    Gravadas          = 8168.64m,
                    Exoneradas        = 0,
                    Exportacion       = 0,
                    TipoDocumento     = "03",
                    Serie             = "BB30"
                });


                Console.WriteLine("Generando XML....");
                var client         = new RestClient(BaseUrl);
                var requestInvoice = new RestRequest("GenerarResumenDiario", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestInvoice.AddBody(documentoResumenDiario);
                var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice);
                if (!documentoResponse.Data.Exito)
                {
                    throw new ApplicationException(documentoResponse.Data.MensajeError);
                }
                Console.WriteLine("Firmando XML...");
                // Firmado del Documento.
                var firmado = new FirmadoRequest
                {
                    TramaXmlSinFirma    = documentoResponse.Data.TramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes("Certificado.pfx")),
                    PasswordCertificado = string.Empty,
                    UnSoloNodoExtension = true
                };

                var requestFirma = new RestRequest("Firmar", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestFirma.AddBody(firmado);

                var responseFirma = client.Execute <FirmadoResponse>(requestFirma);

                if (!responseFirma.Data.Exito)
                {
                    throw new ApplicationException(responseFirma.Data.MensajeError);
                }

                Console.WriteLine("Enviando a SUNAT....");

                var sendBill = new EnviarDocumentoRequest
                {
                    Ruc             = documentoResumenDiario.Emisor.NroDocumento,
                    UsuarioSol      = "MODDATOS",
                    ClaveSol        = "MODDATOS",
                    EndPointUrl     = UrlSunat,
                    IdDocumento     = documentoResumenDiario.IdDocumento,
                    TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado
                };

                var restRequest = new RestRequest("EnviarResumen", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };

                restRequest.AddBody(sendBill);

                var restResponse = client.Execute <EnviarResumenResponse>(restRequest);

                if (!restResponse.Data.Exito)
                {
                    throw new ApplicationException(restResponse.Data.MensajeError);
                }

                Console.WriteLine("Nro de Ticket: {0}", restResponse.Data.NroTicket);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
Esempio n. 6
0
        public ResumenDiario Data(List <Data_Documentos> data_Documentos)
        {
            DateTime        dateTime = DateTime.Now;
            ResumenDiario   resumenDiario;
            ReadGeneralData readGeneralData = new ReadGeneralData();

            try
            {
                Data_CabeceraDocumento cabeceraDocumento = new Data_CabeceraDocumento(data_Documentos[0].IdCabeceraDocumento);
                cabeceraDocumento.Read_CabeceraDocumento();

                Data_Contribuyente data_Emisor = new Data_Contribuyente(data_Documentos[0].IdEmisor);
                data_Emisor.Read_Contribuyente();

                int    numeracion = 0;
                string mes        = dateTime.Month < 10 ? $"0{dateTime.Month}" : dateTime.Month.ToString();
                string dia        = dateTime.Day < 10 ? $"0{dateTime.Day}"   : dateTime.Day.ToString();
                try
                {
                    numeracion = readGeneralData.GetScalarValueINT("[dbo].[Query_Scalar_GetValue_CantidadDocsDia]", "@IdDatosFox", data_Documentos[0].IdDatosFox);
                }
                catch (Exception)
                {
                    numeracion++;
                }

                resumenDiario = new ResumenDiario()      //  Documento principal
                {
                    IdDocumento     = $"RC-{dateTime.Year}{mes}{dia}-{numeracion}",
                    FechaEmision    = dateTime.ToString(),
                    FechaReferencia = data_Documentos[0].FechaEmision,
                    Emisor          = data_Emisor,
                    Resumenes       = new List <GrupoResumenNuevo>()
                };

                int contador = 1;
                foreach (var data_Documento in data_Documentos)
                {
                    Data_CabeceraDocumento data_CabeceraDocumento = new Data_CabeceraDocumento(data_Documento.IdCabeceraDocumento);
                    data_CabeceraDocumento.Read_CabeceraDocumento();

                    Data_Contribuyente data_Receptor = new Data_Contribuyente(data_CabeceraDocumento.IdReceptor);
                    data_Receptor.Read_Contribuyente();

                    var resumen = new GrupoResumenNuevo()
                    {
                        Id              = contador,
                        TipoDocumento   = data_Documento.TipoDocumento,
                        Serie           = data_Documento.SerieCorrelativo,
                        Receptor        = data_Receptor,
                        TotalVenta      = data_CabeceraDocumento.ImporteTotalVenta,
                        Moneda          = data_CabeceraDocumento.Moneda,
                        Gravadas        = data_CabeceraDocumento.Gravadas,
                        Exoneradas      = data_CabeceraDocumento.Exoneradas,
                        Inafectas       = data_CabeceraDocumento.Inafectas,
                        Exportaciones   = data_CabeceraDocumento.Exportaciones,
                        Gratuitas       = data_CabeceraDocumento.Gratuitas,
                        TotalDescuentos = data_CabeceraDocumento.TotalDescuento,
                    };

                    Data_DocumentoRelacionado   data_DocumentoRelacionado = new Data_DocumentoRelacionado(data_Documento.IdCabeceraDocumento);
                    List <DocumentoRelacionado> documentoRelacionados     = data_DocumentoRelacionado.Read_DocumentoRelacionado();
                    if (documentoRelacionados.Count > 0)
                    {
                        resumen.DocumentoRelacionado = documentoRelacionados[0].NroDocumento ?? string.Empty;      // Sólo habrá un doc relacionado para cada boleta
                    }
                    Data_Discrepancia   data_Discrepancia = new Data_Discrepancia(data_Documento.IdCabeceraDocumento);
                    List <Discrepancia> discrepancias     = data_Discrepancia.Read_DiscrepanciaDocumento();
                    if (discrepancias.Count > 0)
                    {
                        resumen.CodigoEstadoItem = Convert.ToInt32(discrepancias[0].Tipo ?? string.Empty);      // // en la documentación dice que es el valor del tipo de discrepancia catalogo 9
                    }
                    else
                    {
                        resumen.CodigoEstadoItem = 1;       // Poca información respecto a lo que va aquí
                    }
                    #region TotalImpuestos
                    Data_TotalImpuesto   data_TotalImpuesto = new Data_TotalImpuesto(data_Documento.IdCabeceraDocumento);
                    List <TotalImpuesto> totalImpuestos     = data_TotalImpuesto.Read_TotalImpuestos(1);     //  El parámetro -> 1 <- es indicativo de que es por cada línea

                    foreach (var st_totalImpuesto in totalImpuestos)
                    {
                        Data_SubTotalImpuesto    data_SubTotalImpuesto = new Data_SubTotalImpuesto(st_totalImpuesto.IdTotalImpuestos);
                        List <SubTotalImpuestos> subTotalImpuestos     = data_SubTotalImpuesto.Read_SubTotalImpuesto();
                        st_totalImpuesto.SubTotalesImpuestos = subTotalImpuestos;
                    }
                    resumen.TotalImpuestos = totalImpuestos;
                    #endregion TotalImpuestos

                    resumenDiario.Resumenes.Add(resumen);
                    contador++;
                }
            }
            catch (Exception ex)
            {
                resumenDiario = new ResumenDiario();
            }

            return(resumenDiario);
        }