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); }
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); }
/// <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); }
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); }
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(); } }
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); }