/*INICIO - Pequeña parte de Programacion orientada a Eventos*/ //Cristhian|01/03/2018|FEI2-586 /*Metodo creado para dar de baja los comprobantes electronicos que son enviados desde * el sistema DBF comercial, en este caso solo facturas.*/ /*NUEVO INICIO*/ /// <summary> /// Método para dar de baja al comprobante electronico /// </summary> /// <param name="Id_Documento"></param> /// <param name="tipoContenido"></param> /// <returns>mensaje</returns> public string cs_pxProcesarComunicacionBaja(string Id_Documento, string tipoContenido) { string mensaje = string.Empty; try { //Buscar grupos de fechas seleccionadas y por cada grupo debe crear un archivo de comunicación de baja. #region "AGRUPAR POR COMUNICACIÓN DE BAJA" List <string> grupo = new List <string>(); //Crear grupos de fecha por IssueDate - FECHA DE EMISION List <string> docs_no_agregados = new List <string>(); //Lista de doccumentos no agregados //Si los comprobantes son facturas, notas de creddito o debito, el tipo de contenido sera 0. if (tipoContenido == "0") { clsEntityDocument document = new clsEntityDocument(localDB).cs_fxObtenerUnoPorId(Id_Documento); if (document.Cs_pr_ComunicacionBaja.Trim().Length <= 0) { //Verificar los 7 dias anteriores al dia de hoy para permitir agregar a resumen diario. string fechaEmision = document.Cs_tag_IssueDate; if (fechaEmision == DateTime.Now.ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-4).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-5).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-6).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd")) { int count = 0; foreach (var item_grupo in grupo) { if (fechaEmision == item_grupo) { count++; } } if (count <= 0) //Si no existe el elemento en la lista, que se agregue. { grupo.Add(fechaEmision); } } else { docs_no_agregados.Add(document.Cs_tag_ID); } } } /*En caso sean de tipo contenido 1, es para los documentos de retención*/ else if (tipoContenido == "1") { //Cuando se agregan tipo de documentos retencion clsEntityRetention document = new clsEntityRetention(localDB).cs_fxObtenerUnoPorId(Id_Documento); if (document.Cs_pr_Reversion.Trim().Length <= 0) { //Asignar valor a fecha de emision. string fechaEmision = document.Cs_tag_IssueDate; int count = 0; foreach (var item_grupo in grupo) { if (fechaEmision == item_grupo) { count++; } } if (count <= 0) //Si no existe el elemento en la lista, que se agregue. { grupo.Add(fechaEmision); } } } #endregion //Crear grupos de fecha por IssueDate - FechaEmision List <string> doc_agregados = new List <string>(); clsEntityVoidedDocuments comunicacion_baja; //Si existen documentos a dar de baja por grupos. foreach (var fecha_comunicacion in grupo) { //Buscar comunicacion de baja existente. string documento_baja_existente = new clsEntityVoidedDocuments(localDB).cs_pxObtenerDocumentoComuninicacionBajaExisente(fecha_comunicacion, tipoContenido); if (documento_baja_existente != "") { //Si existe comunicacion de baja Agregar los comprobantes al que ya se encuentra creado. bool agregado = new clsEntityVoidedDocuments(localDB).cs_pxComunicacionBajaActualizar(Id_Documento, documento_baja_existente, tipoContenido); if (agregado == true) { //Si se han agregado los comprobantes actualizar el nombre de la comunicacion de baja en caso se este agregando a otro que se haya generado anteriormente. comunicacion_baja = new clsEntityVoidedDocuments(localDB).cs_fxObtenerUnoPorId(documento_baja_existente); comunicacion_baja.Cs_tag_IssueDate = DateTime.Now.ToString("yyyy-MM-dd"); string correlativo = comunicacion_baja.Cs_tag_ID.Split('-')[2]; if (tipoContenido == "0") { //Facturas y Notas comunicacion_baja.Cs_tag_ID = "RA-" + comunicacion_baja.Cs_tag_IssueDate.Replace("-", "") + "-" + correlativo; } else if (tipoContenido == "1") { //Retencion comunicacion_baja.Cs_tag_ID = "RR-" + comunicacion_baja.Cs_tag_IssueDate.Replace("-", "") + "-" + correlativo; } comunicacion_baja.cs_pxActualizar(false, false); doc_agregados.Add(comunicacion_baja.Cs_tag_ID); } } else { //Crear documento de comunicación de baja ya que no existe string documento_nuevo_id = Guid.NewGuid().ToString(); clsEntityVoidedDocuments documento_nuevo = new clsEntityVoidedDocuments(localDB); documento_nuevo.Cs_pr_VoidedDocuments_Id = documento_nuevo_id; documento_nuevo.Cs_tag_ReferenceDate = fecha_comunicacion;//DateTime.Now.ToString("yyyy-MM-dd"); documento_nuevo.Cs_tag_IssueDate = DateTime.Now.ToString("yyyy-MM-dd"); if (tipoContenido == "0") { documento_nuevo.Cs_tag_ID = "RA-" + documento_nuevo.Cs_tag_IssueDate.Replace("-", "") + "-" + new clsEntityVoidedDocuments(localbd).cs_fxObtenerCorrelativo("0"); } else if (tipoContenido == "1") { documento_nuevo.Cs_tag_ID = "RR-" + documento_nuevo.Cs_tag_IssueDate.Replace("-", "") + "-" + new clsEntityVoidedDocuments(localbd).cs_fxObtenerCorrelativo("1"); } documento_nuevo.Cs_tag_AccountingSupplierParty_CustomerAssignedAccountID = declarante.Cs_pr_Ruc; documento_nuevo.Cs_tag_AccountingSupplierParty_AdditionalAccountID = "6"; documento_nuevo.Cs_tag_AccountingSupplierParty_Party_PartyLegalEntity_RegistrationName = declarante.Cs_pr_RazonSocial; documento_nuevo.Cs_pr_Ticket = ""; documento_nuevo.Cs_pr_EstadoSCC = "2"; documento_nuevo.Cs_pr_EstadoSUNAT = "2"; documento_nuevo.Cs_pr_ComentarioSUNAT = ""; documento_nuevo.Cs_pr_XML = ""; documento_nuevo.Cs_pr_CDR = ""; documento_nuevo.Cs_pr_DocumentoRelacionado = ""; documento_nuevo.Cs_pr_TipoContenido = tipoContenido; string idRetorno = documento_nuevo.cs_pxInsertar(false, false); clsEntityVoidedDocuments_VoidedDocumentsLine linea; if (tipoContenido == "0") { //facturas boletas y notas //Si la fecha de referencia del item es igual a la fecha de referencia de su grupo, agregar clsEntityDocument documento = new clsEntityDocument(localDB).cs_fxObtenerUnoPorId(Id_Documento); if (documento.Cs_tag_IssueDate == fecha_comunicacion) { linea = new clsEntityVoidedDocuments_VoidedDocumentsLine(localDB); linea.Cs_pr_VoidedDocuments_VoidedDocumentsLine_Id = Guid.NewGuid().ToString(); linea.Cs_pr_VoidedDocuments_Id = idRetorno; linea.Cs_tag_LineID = ""; linea.Cs_tag_DocumentTypeCode = documento.Cs_tag_InvoiceTypeCode; linea.Cs_tag_DocumentSerialID = documento.Cs_tag_ID.Split('-')[0].ToString(); linea.Cs_tag_DocumentNumberID = documento.Cs_tag_ID.Split('-')[1].ToString(); linea.Cs_tag_VoidReasonDescription = ""; linea.Cs_pr_IDDocumentoRelacionado = Id_Documento; linea.cs_pxInsertar(false, true); documento.Cs_pr_ComunicacionBaja = idRetorno; //Relación de comunicación de baja. documento.cs_pxActualizar(false, false); } } else if (tipoContenido == "1") { //retencion //Si la fecha de referencia del item es igual a la fecha de referencia de su grupo, agregar clsEntityRetention documento = new clsEntityRetention(localDB).cs_fxObtenerUnoPorId(Id_Documento); if (documento.Cs_tag_IssueDate == fecha_comunicacion) { linea = new clsEntityVoidedDocuments_VoidedDocumentsLine(localDB); linea.Cs_pr_VoidedDocuments_VoidedDocumentsLine_Id = Guid.NewGuid().ToString(); linea.Cs_pr_VoidedDocuments_Id = idRetorno; linea.Cs_tag_LineID = ""; linea.Cs_tag_DocumentTypeCode = "20"; linea.Cs_tag_DocumentSerialID = documento.Cs_tag_Id.Split('-')[0].ToString(); linea.Cs_tag_DocumentNumberID = documento.Cs_tag_Id.Split('-')[1].ToString(); linea.Cs_tag_VoidReasonDescription = ""; linea.Cs_pr_IDDocumentoRelacionado = Id_Documento; linea.cs_pxInsertar(false, true); documento.Cs_pr_Reversion = idRetorno; //Relación de comunicación de baja. documento.cs_pxActualizar(false, false); } } doc_agregados.Add(documento_nuevo.Cs_tag_ID); } //1. Buscar un resumen diario con la fecha de referencia que sea la misma del documento a dar de baja. //2. Si ya existe, actualizar. //3. Si no existe, agregar. /*Buscar algún documento que tenga estado "sin estado" * SI ENCUENTRA * Actualizar los items no repetidos. * NO * Agregar documento de comunicación de baja * Agregar los items. */ if (docs_no_agregados.Count > 0) { foreach (string doc in docs_no_agregados) { mensaje += doc + "\n"; } } } } catch (Exception ex) { clsBaseLog.cs_pxRegistarAdd("Comunicación de Baja Factura DBF: " + ex.ToString()); } return(mensaje); }
/// <summary> /// METODO PARA PROCESAR DOCUMENTOS A DAR DE BAJA FEI2-222 29-05-2017 /// </summary> /// <param name="DocumentosADarDeBaja"></param> /// <param name="tipoContenido"></param> /// <returns></returns> public string cs_pxProcesarComunicacionBaja(List <string> DocumentosADarDeBaja, string tipoContenido) { string mensaje = string.Empty; try { //Buscar grupos de fechas seleccionadas y por cada grupo debe crear un archivo de comunicación de baja. #region "AGRUPAR POR COMUNICACIÓN DE BAJA" List <string> grupo = new List <string>(); //Crear grupos de fecha por IssueDate - FECHA DE EMISION List <string> docs_no_agregados = new List <string>(); //Lista de doccumentos no agregados //Recorrer los documentos a dar de baja para agregar asu respectiva comunicacion de baja. foreach (var documento_id in DocumentosADarDeBaja) { //Si los comprobantes son facturas notas y/o boletas. if (tipoContenido == "0") { clsEntityDocument document = new clsEntityDocument(localbd).cs_fxObtenerUnoPorId(documento_id); if (document.Cs_pr_ComunicacionBaja.Trim().Length <= 0) { //Verificar los 7 dias anteriores al dia de hoy para permitir agregar a resumen diario. string fechaEmision = document.Cs_tag_IssueDate; if (fechaEmision == DateTime.Now.ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-4).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-5).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-6).ToString("yyyy-MM-dd") || fechaEmision == DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd")) { int count = 0; foreach (var item_grupo in grupo) { if (fechaEmision == item_grupo) { count++; } } if (count <= 0)//Si no existe el elemento en la lista, que se agregue. { grupo.Add(fechaEmision); } } else { docs_no_agregados.Add(document.Cs_tag_ID); } } } else if (tipoContenido == "1") { //Cuando se agregan tipo de documentos retencion clsEntityRetention document = new clsEntityRetention(localbd).cs_fxObtenerUnoPorId(documento_id); if (document.Cs_pr_Reversion.Trim().Length <= 0) { //Asignar valor a fecha de emision. string fechaEmision = document.Cs_tag_IssueDate; int count = 0; foreach (var item_grupo in grupo) { if (fechaEmision == item_grupo) { count++; } } if (count <= 0)//Si no existe el elemento en la lista, que se agregue. { grupo.Add(fechaEmision); } } } } #endregion //Crear grupos de fecha por IssueDate - FechaEmision List <string> doc_agregados = new List <string>(); clsEntityVoidedDocuments comunicacion_baja; if (DocumentosADarDeBaja.Count > 0) { //Si existen documentos a dar de baja por grupos. foreach (var fecha_comunicacion in grupo) { //Buscar comunicacion de baja existente. string documento_baja_existente = new clsEntityVoidedDocuments(localbd).cs_pxObtenerDocumentoComuninicacionBajaExisente(fecha_comunicacion, tipoContenido); if (documento_baja_existente != "") { //Si existe comunicacion de baja Agregar los comprobantes al que ya se encuentra creado. bool agregado = new clsEntityVoidedDocuments(localbd).cs_pxComunicacionBajaActualizar(DocumentosADarDeBaja, documento_baja_existente, tipoContenido); if (agregado == true) { //Si se han agregado los comprobantes actualizar el nombre de la comunicacion de baja en caso se este agregando a otro que se haya generado anteriormente. comunicacion_baja = new clsEntityVoidedDocuments(localbd).cs_fxObtenerUnoPorId(documento_baja_existente); comunicacion_baja.Cs_tag_IssueDate = DateTime.Now.ToString("yyyy-MM-dd"); string correlativo = comunicacion_baja.Cs_tag_ID.Split('-')[2]; if (tipoContenido == "0") {//Facturas Boletas y Notas comunicacion_baja.Cs_tag_ID = "RA-" + comunicacion_baja.Cs_tag_IssueDate.Replace("-", "") + "-" + correlativo; } else if (tipoContenido == "1") {//Retencion comunicacion_baja.Cs_tag_ID = "RR-" + comunicacion_baja.Cs_tag_IssueDate.Replace("-", "") + "-" + correlativo; } comunicacion_baja.cs_pxActualizar(false, false); doc_agregados.Add(comunicacion_baja.Cs_tag_ID); } } else { //Crear documento de comunicación de baja ya que no existe string documento_nuevo_id = Guid.NewGuid().ToString(); clsEntityVoidedDocuments documento_nuevo = new clsEntityVoidedDocuments(localbd); documento_nuevo.Cs_pr_VoidedDocuments_Id = documento_nuevo_id; documento_nuevo.Cs_tag_ReferenceDate = fecha_comunicacion;//DateTime.Now.ToString("yyyy-MM-dd"); documento_nuevo.Cs_tag_IssueDate = DateTime.Now.ToString("yyyy-MM-dd"); if (tipoContenido == "0") { documento_nuevo.Cs_tag_ID = "RA-" + documento_nuevo.Cs_tag_IssueDate.Replace("-", "") + "-" + new clsEntityVoidedDocuments(localbd).cs_fxObtenerCorrelativo("0"); } else if (tipoContenido == "1") { documento_nuevo.Cs_tag_ID = "RR-" + documento_nuevo.Cs_tag_IssueDate.Replace("-", "") + "-" + new clsEntityVoidedDocuments(localbd).cs_fxObtenerCorrelativo("1"); } documento_nuevo.Cs_tag_AccountingSupplierParty_CustomerAssignedAccountID = declarante.Cs_pr_Ruc; documento_nuevo.Cs_tag_AccountingSupplierParty_AdditionalAccountID = "6"; documento_nuevo.Cs_tag_AccountingSupplierParty_Party_PartyLegalEntity_RegistrationName = declarante.Cs_pr_RazonSocial; documento_nuevo.Cs_pr_Ticket = ""; documento_nuevo.Cs_pr_EstadoSCC = "2"; documento_nuevo.Cs_pr_EstadoSUNAT = "2"; documento_nuevo.Cs_pr_ComentarioSUNAT = ""; documento_nuevo.Cs_pr_XML = ""; documento_nuevo.Cs_pr_CDR = ""; documento_nuevo.Cs_pr_DocumentoRelacionado = ""; documento_nuevo.Cs_pr_TipoContenido = tipoContenido; string idRetorno = documento_nuevo.cs_pxInsertar(false, false); clsEntityVoidedDocuments_VoidedDocumentsLine linea; //Amaro Quispe Jordy | 2017-07-05 | FEI2-220 //Se comento el codigo que agregaba los documentos enviados anteriormente.Por pedido de Tania. //INI-MODIFICA-01 //Buscar el ultimo documento de comunicación de baja enviado con la fecha de referencia = fecha del grupo //Si existe, adjuntar los items existentes a este nuevo documento /*string id_comunicacion_de_baja_existente_para_adjuntar_registros_a_sustitutorio = new clsEntityVoidedDocuments(localbd).cs_pxObtenerDocumentoComuninicacionBajaExisente(fecha_comunicacion, true,tipoContenido); * if (id_comunicacion_de_baja_existente_para_adjuntar_registros_a_sustitutorio != null && id_comunicacion_de_baja_existente_para_adjuntar_registros_a_sustitutorio.Trim().Length > 0) * { * List<clsEntityVoidedDocuments_VoidedDocumentsLine> DocumentosDadosDeBajaConAnterioridad = new clsEntityVoidedDocuments_VoidedDocumentsLine(localbd).cs_fxObtenerTodoPorCabeceraId(id_comunicacion_de_baja_existente_para_adjuntar_registros_a_sustitutorio); * foreach (var itemx in DocumentosDadosDeBajaConAnterioridad) * { * if (tipoContenido == "0") * { * //facturas boletas y notas * clsEntityDocument documento = new clsEntityDocument(localbd).cs_fxObtenerUnoPorId(itemx.Cs_pr_IDDocumentoRelacionado); * //Agregar estos items y actualizar el id de comunicación de baja en el documento principal. * linea = new clsEntityVoidedDocuments_VoidedDocumentsLine(localbd); * linea.Cs_pr_VoidedDocuments_VoidedDocumentsLine_Id = Guid.NewGuid().ToString(); * //linea.Cs_pr_VoidedDocuments_Id = itemx.Cs_pr_VoidedDocuments_Id; * //Jordy Amaro 09-12-16 FE-912 * //CAMBIO DE ASOCIACION IDS * //Ini-Modifica * linea.Cs_pr_VoidedDocuments_Id = idRetorno; * //Fin-Modifica * linea.Cs_tag_LineID = itemx.Cs_tag_LineID; * linea.Cs_tag_DocumentTypeCode = itemx.Cs_tag_DocumentTypeCode; * linea.Cs_tag_DocumentSerialID = itemx.Cs_tag_DocumentSerialID; * linea.Cs_tag_DocumentNumberID = itemx.Cs_tag_DocumentNumberID; * linea.Cs_tag_VoidReasonDescription = itemx.Cs_tag_VoidReasonDescription; * linea.Cs_pr_IDDocumentoRelacionado = itemx.Cs_pr_IDDocumentoRelacionado; * linea.cs_pxInsertar(false, true); * documento.Cs_pr_ComunicacionBaja = idRetorno;//Relación de comunicación de baja. * documento.cs_pxActualizar(false, false); * * } * else if (tipoContenido == "1") * { * //retencion * clsEntityRetention documento = new clsEntityRetention(localbd).cs_fxObtenerUnoPorId(itemx.Cs_pr_IDDocumentoRelacionado); * //Agregar estos items y actualizar el id de comunicación de baja en el documento principal. * linea = new clsEntityVoidedDocuments_VoidedDocumentsLine(localbd); * linea.Cs_pr_VoidedDocuments_VoidedDocumentsLine_Id = Guid.NewGuid().ToString(); * //linea.Cs_pr_VoidedDocuments_Id = itemx.Cs_pr_VoidedDocuments_Id; * //Jordy Amaro 09-12-16 FE-912 * //CAMBIO DE ASOCIACION IDS * //Ini-Modifica * linea.Cs_pr_VoidedDocuments_Id = idRetorno; * //Fin-Modifica * linea.Cs_tag_LineID = itemx.Cs_tag_LineID; * linea.Cs_tag_DocumentTypeCode = itemx.Cs_tag_DocumentTypeCode; * linea.Cs_tag_DocumentSerialID = itemx.Cs_tag_DocumentSerialID; * linea.Cs_tag_DocumentNumberID = itemx.Cs_tag_DocumentNumberID; * linea.Cs_tag_VoidReasonDescription = itemx.Cs_tag_VoidReasonDescription; * linea.Cs_pr_IDDocumentoRelacionado = itemx.Cs_pr_IDDocumentoRelacionado; * linea.cs_pxInsertar(false, true); * documento.Cs_pr_Reversion = idRetorno;//Relación de comunicación de baja reversion. * documento.cs_pxActualizar(false, false); * * } * * } * }*/ //FIN-MODIFICA-01 //Recorrer los documentos a dar de Baja y agregar las lineas. foreach (var Item in DocumentosADarDeBaja) { if (tipoContenido == "0") {//facturas boletas y notas //Si la fecha de referencia del item es igual a la fecha de referencia de su grupo, agregar clsEntityDocument documento = new clsEntityDocument(localbd).cs_fxObtenerUnoPorId(Item); if (documento.Cs_tag_IssueDate == fecha_comunicacion) { linea = new clsEntityVoidedDocuments_VoidedDocumentsLine(localbd); linea.Cs_pr_VoidedDocuments_VoidedDocumentsLine_Id = Guid.NewGuid().ToString(); linea.Cs_pr_VoidedDocuments_Id = idRetorno; linea.Cs_tag_LineID = ""; linea.Cs_tag_DocumentTypeCode = documento.Cs_tag_InvoiceTypeCode; linea.Cs_tag_DocumentSerialID = documento.Cs_tag_ID.Split('-')[0].ToString(); linea.Cs_tag_DocumentNumberID = documento.Cs_tag_ID.Split('-')[1].ToString(); linea.Cs_tag_VoidReasonDescription = ""; linea.Cs_pr_IDDocumentoRelacionado = Item; linea.cs_pxInsertar(false, true); documento.Cs_pr_ComunicacionBaja = idRetorno;//Relación de comunicación de baja. documento.cs_pxActualizar(false, false); } } else if (tipoContenido == "1") {//retencion //Si la fecha de referencia del item es igual a la fecha de referencia de su grupo, agregar clsEntityRetention documento = new clsEntityRetention(localbd).cs_fxObtenerUnoPorId(Item); if (documento.Cs_tag_IssueDate == fecha_comunicacion) { linea = new clsEntityVoidedDocuments_VoidedDocumentsLine(localbd); linea.Cs_pr_VoidedDocuments_VoidedDocumentsLine_Id = Guid.NewGuid().ToString(); linea.Cs_pr_VoidedDocuments_Id = idRetorno; linea.Cs_tag_LineID = ""; linea.Cs_tag_DocumentTypeCode = "20"; linea.Cs_tag_DocumentSerialID = documento.Cs_tag_Id.Split('-')[0].ToString(); linea.Cs_tag_DocumentNumberID = documento.Cs_tag_Id.Split('-')[1].ToString(); linea.Cs_tag_VoidReasonDescription = ""; linea.Cs_pr_IDDocumentoRelacionado = Item; linea.cs_pxInsertar(false, true); documento.Cs_pr_Reversion = idRetorno;//Relación de comunicación de baja. documento.cs_pxActualizar(false, false); } } } doc_agregados.Add(documento_nuevo.Cs_tag_ID); } } //1. Buscar un resumen diario con la fecha de referencia que sea la misma del documento a dar de baja. //2. Si ya existe, actualizar. //3. Si no existe, agregar. /*Buscar algún documento que tenga estado "sin estado" * SI ENCUENTRA * Actualizar los items no repetidos. * NO * Agregar documento de comunicación de baja * Agregar los items. */ if (docs_no_agregados.Count > 0) { foreach (string doc in docs_no_agregados) { mensaje += doc + "\n"; } } } } catch (Exception ex) { clsBaseLog.cs_pxRegistarAdd("procesarcomunicacion baja" + ex.ToString()); } return(mensaje); }