/// <summary> /// Metodo para descartar algun documento de comunicacion de baja. /// </summary> /// <param name="Id"></param> /// <param name="tipoContiene"></param> public void cs_pxDescartarDocumento(string Id, string tipoContiene) { //Solo se puede descartar aquellos documentos que no hayan tenido alguna respuesta de SUNAT clsEntityVoidedDocuments comunicacionbaja = new clsEntityVoidedDocuments(localbd).cs_fxObtenerUnoPorId(Id); if (comunicacionbaja.Cs_pr_EstadoSUNAT == "2") { List <clsEntityVoidedDocuments_VoidedDocumentsLine> comunicacionbaja_items = new clsEntityVoidedDocuments_VoidedDocumentsLine(localbd).cs_fxObtenerTodoPorCabeceraId(comunicacionbaja.Cs_pr_VoidedDocuments_Id); if (tipoContiene == "0") { clsEntityDocument documento_principal; foreach (var item in comunicacionbaja_items) { documento_principal = new clsEntityDocument(localbd).cs_fxObtenerUnoPorId(item.Cs_pr_IDDocumentoRelacionado); documento_principal.Cs_pr_ComunicacionBaja = ""; documento_principal.cs_pxActualizar(false, false); } } else if (tipoContiene == "1") { clsEntityRetention documento_principal; foreach (var item in comunicacionbaja_items) { documento_principal = new clsEntityRetention(localbd).cs_fxObtenerUnoPorId(item.Cs_pr_IDDocumentoRelacionado); documento_principal.Cs_pr_Reversion = ""; documento_principal.cs_pxActualizar(false, false); } } comunicacionbaja.cs_pxComunicacionBajaEliminar(Id); } }
public void cs_fxDescartarDocumento(string Id_documentoprincipal, string Id_documentorelacionado, string tipoContiene) { try { List <string> registro = new clsEntityVoidedDocuments_VoidedDocumentsLine(localDB).cs_fxObtenerUnoPorDocumentoPrincipalYDocumentoRelacionado(Id_documentoprincipal, Id_documentorelacionado); if (tipoContiene == "0") { clsEntityDocument documentoprincipal = new clsEntityDocument(localDB).cs_fxObtenerUnoPorId(Id_documentoprincipal); documentoprincipal.Cs_pr_ComunicacionBaja = ""; documentoprincipal.cs_pxActualizar(false, false); } else if (tipoContiene == "1") { clsEntityRetention documentoprincipal = new clsEntityRetention(localDB).cs_fxObtenerUnoPorId(Id_documentoprincipal); documentoprincipal.Cs_pr_Reversion = ""; documentoprincipal.cs_pxActualizar(false, false); } clsEntityVoidedDocuments_VoidedDocumentsLine linea = new clsEntityVoidedDocuments_VoidedDocumentsLine(localDB).cs_fxObtenerUnoPorId(registro[0]); linea.cs_pxElimnar(false); } catch (Exception ex) { clsBaseMensaje.cs_pxMsg("Error comunicacion de baja", "Se ha producido un error al descartar los documentos."); clsBaseLog.cs_pxRegistarAdd("clsEntityVoidedDocuments_VoidedDocumentsLine cs_fxDescartarDocumento " + ex.ToString()); } }
public void cs_pxEliminarDocumento(string Id) { try { //actualizar relacion y estado en tabla document. List <List <string> > registros = new clsEntityDocument(localDB).cs_pxObtenerPorResumenDiario(Id); clsEntityDocument doc; foreach (var item in registros) { doc = new clsEntityDocument(localDB).cs_fxObtenerUnoPorId(item[0].ToString().Trim()); //doc.Cs_pr_EstadoSCC = "2"; //doc.Cs_pr_EstadoSUNAT = "2"; doc.Cs_pr_Resumendiario = ""; doc.cs_pxActualizar(false, false); } //eliminar de summary documents y los relacionados: clsEntitySummaryDocuments Summary = new clsEntitySummaryDocuments(localDB).cs_fxObtenerUnoPorId(Id); clsEntitySummaryDocuments_Notes Summary_Notes = new clsEntitySummaryDocuments_Notes(localDB);//eliminado clsEntitySummaryDocuments_SummaryDocumentsLine Summary_Line = new clsEntitySummaryDocuments_SummaryDocumentsLine(localDB); clsEntitySummaryDocuments_SummaryDocumentsLine_AllowanceCharge Summary_Line_Allowance_Charge = new clsEntitySummaryDocuments_SummaryDocumentsLine_AllowanceCharge(localDB); clsEntitySummaryDocuments_SummaryDocumentsLine_BillingPayment Summary_Line_Billing_Payment = new clsEntitySummaryDocuments_SummaryDocumentsLine_BillingPayment(localDB); clsEntitySummaryDocuments_SummaryDocumentsLine_TaxTotal Summay_Line_Tax_Total = new clsEntitySummaryDocuments_SummaryDocumentsLine_TaxTotal(localDB); foreach (var item in Summary_Notes.cs_fxObtenerTodoPorSummaryId(Id)) { item.cs_pxElimnar(false); } foreach (var item in Summary_Line.cs_fxObtenerTodoPorCabeceraId(Id)) { foreach (var item1 in Summary_Line_Billing_Payment.cs_fxObtenerTodoPorCabeceraId(item.Cs_pr_SummaryDocuments_SummaryDocumentsLine_Id)) { item1.cs_pxElimnar(false); } foreach (var item2 in Summary_Line_Allowance_Charge.cs_fxObtenerTodoPorCabeceraId(item.Cs_pr_SummaryDocuments_SummaryDocumentsLine_Id)) { item2.cs_pxElimnar(false); } foreach (var item3 in Summay_Line_Tax_Total.cs_fxObtenerTodoPorCabeceraId(item.Cs_pr_SummaryDocuments_SummaryDocumentsLine_Id)) { item3.cs_pxElimnar(false); } item.cs_pxElimnar(false); } Summary.cs_pxElimnar(false); } catch (Exception ex) { clsBaseLog.cs_pxRegistarAdd("clsEntitySummaryDocuments cs_pxEliminarDocumento " + ex.ToString()); } }
/// <summary> /// Metodo para liberar resumenes diarios. /// </summary> /// <param name="Id"></param> /// <returns></returns> public bool cs_pxLiberarSustitutorioDocumento(string Id) { bool retorno = false; try { //buscar resumenes con el id y poner en liberados; cambiar estado de sunat y scc -> agregar el ultimo valor de resumen a campo 42 para tener quienes eran del anterior resumen. List <List <string> > docs_anteriores = new clsEntityDocument(localDB).cs_pxObtenerPorResumenDiario(Id); clsEntityDocument doc; foreach (var item in docs_anteriores) { //Cristhian|28/12/2017|FEI2-325 /*Se modifica esta parte del codigo ya que cuando libera los ducmentos asosciados a un resumen * diario, los comprobantes que tenian el estado de baja cambian a pendiuente correcto*/ /*INICIO MODIFICACIóN*/ /*Entonces si el comprobante no esta de baja en este caso un codigo diferente de 3*/ if (item[28] != "3") { /*se aplican los siguinetes cambios a sus valores, esto afecta a la tabla cs_Document*/ doc = new clsEntityDocument(localDB).cs_fxObtenerUnoPorId(item[0].ToString().Trim()); doc.Cs_pr_EstadoSCC = "2"; doc.Cs_pr_EstadoSUNAT = "2"; doc.Cs_ResumenUltimo_Enviado = doc.Cs_pr_Resumendiario; doc.Cs_pr_Resumendiario = ""; doc.cs_pxActualizar(false, false); retorno = true; } /*Si el comprobante esta de baja en este caso es el codigo 3*/ else if (item[28] == "3") { /*No se modifica los estados del docuento y se dajan tal cual estan registrados en la * base de datos*/ doc = new clsEntityDocument(localDB).cs_fxObtenerUnoPorId(item[0].ToString().Trim()); doc.Cs_ResumenUltimo_Enviado = doc.Cs_pr_Resumendiario; doc.Cs_pr_Resumendiario = ""; doc.Cs_pr_EstadoSCC = "3"; doc.Cs_pr_EstadoSUNAT = "0"; doc.cs_pxActualizar(false, false); retorno = true; } /*FIN MODIFICACIóN*/ } } catch (Exception ex) { clsBaseLog.cs_pxRegistarAdd("clsEntitySummaryDocuments cs_pxLiberarSustitutorioDocumento" + ex.ToString()); } return(retorno); }
private void btnDescargaCDR_Click(object sender, RoutedEventArgs e) { btncdr.IsEnabled = false; clsBaseConfiguracion conf = new clsBaseConfiguracion(); //Obtener el usuario seleccionado. ReporteDocumento item = (ReporteDocumento)dgComprobantes.SelectedItem; //Si existe el item seleccionado. if (item != null) { /* if (item.EstadoSunatCodigo == "0" || item.EstadoSunatCodigo == "1" || item.EstadoSunatCodigo == "3") * {*/ clsEntityDeclarant declarante = new clsEntityDeclarant().cs_pxObtenerUnoPorId(localDB.Cs_pr_Declarant_Id); string nombreCarpeta = declarante.Cs_pr_Ruc + "-" + item.Tipo + "-" + item.SerieNumero + ".zip-dc"; string[] dirs = Directory.GetDirectories(conf.cs_prRutadocumentosrecepcion, "*" + nombreCarpeta); if (dirs.Length > 0) { string rutaOpen = string.Empty; foreach (string dir in dirs) { rutaOpen = dir; } //existe el cdr Process.Start("explorer.exe", rutaOpen); } else { try { //descargar el cdr string[] partes = item.SerieNumero.Split('-'); string serie = partes[0]; int numero = Convert.ToInt32(partes[1]); byte[] comprobante_electronico_bytes = null; SecurityBindingElement binding = SecurityBindingElement.CreateUserNameOverTransportBindingElement(); binding.IncludeTimestamp = false; ServicioCDR.billServiceClient bsc = new ServicioCDR.billServiceClient(new CustomBinding(binding, new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8), new HttpsTransportBindingElement()), new EndpointAddress("https://www.sunat.gob.pe:443/ol-it-wsconscpegem/billConsultService")); bsc.ClientCredentials.UserName.UserName = declarante.Cs_pr_Ruc + declarante.Cs_pr_Usuariosol; bsc.ClientCredentials.UserName.Password = declarante.Cs_pr_Clavesol; ServicioCDR.statusResponse sr = new ServicioCDR.statusResponse(); bsc.Open(); sr = bsc.getStatusCdr(declarante.Cs_pr_Ruc, item.Tipo, serie, numero); string code = sr.statusCode; if (sr.statusCode == "0004") { comprobante_electronico_bytes = sr.content; } bsc.Close(); if (comprobante_electronico_bytes != null) { XmlDocument documentoXML = new XmlDocument(); string comprobante_electronico = declarante.Cs_pr_Ruc + "-" + item.Tipo + "-" + item.SerieNumero + ".zip"; string FechaHora = DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss"); string CDR = conf.cs_prRutadocumentosrecepcion + "\\" + FechaHora + " " + comprobante_electronico; FileStream fs = new FileStream(CDR, FileMode.Create); fs.Write(comprobante_electronico_bytes, 0, comprobante_electronico_bytes.Length); fs.Close(); //string FechaHora = DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss"); //Verificar el contenido del archivo ZipFile.ExtractToDirectory(conf.cs_prRutadocumentosrecepcion + "\\" + FechaHora + " " + comprobante_electronico, conf.cs_prRutadocumentosrecepcion + "\\" + FechaHora + " " + comprobante_electronico + "-dc"); documentoXML.Load(conf.cs_prRutadocumentosrecepcion + "\\" + FechaHora + " " + comprobante_electronico + "-dc\\" + "R-" + declarante.Cs_pr_Ruc + "-" + item.Tipo + "-" + item.SerieNumero + ".xml"); clsEntityDocument ce = new clsEntityDocument(localDB).cs_fxObtenerUnoPorId(item.Id); ce.Cs_pr_EstadoSCC = "0"; if (documentoXML.OuterXml.Contains("ha sido aceptad")) { ce.Cs_pr_EstadoSUNAT = "0"; ce.Cs_pr_CDR = documentoXML.OuterXml; } else { ce.Cs_pr_EstadoSUNAT = "1"; ce.Cs_pr_CDR = documentoXML.OuterXml; } string cadena_xml = @documentoXML.OuterXml; cadena_xml = cadena_xml.Replace("ext:", ""); cadena_xml = cadena_xml.Replace("cbc:", ""); cadena_xml = cadena_xml.Replace("cac:", ""); cadena_xml = cadena_xml.Replace("ds:", ""); cadena_xml = cadena_xml.Replace("ar:", ""); cadena_xml = cadena_xml.Replace("\\\"", "\""); if (cadena_xml.Trim().Length > 0) { cadena_xml = cadena_xml.Replace("<ApplicationResponse xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:ApplicationResponse-2\" xmlns:cac=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\" xmlns:cbc=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:ext=\"urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2\">", "<ApplicationResponse>"); XmlDocument d = new XmlDocument(); d.LoadXml(cadena_xml); ce.Cs_pr_ComentarioSUNAT = d.SelectSingleNode("/ApplicationResponse/DocumentResponse/Response/Description").InnerText; } ce.cs_pxActualizar(false, false); System.Windows.Forms.MessageBox.Show("El CDR correspondiente se ha descargado correctamente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information); cargarGrilla(); Process.Start("explorer.exe", conf.cs_prRutadocumentosrecepcion + "\\" + FechaHora + " " + comprobante_electronico + "-dc"); } else { System.Windows.Forms.MessageBox.Show("No se ha podido descargar el CDR correspondiente de la Sunat. Intente nuevamente", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } catch (Exception ex) { clsBaseLog.cs_pxRegistarAdd("descrgar cdr" + ex.ToString()); System.Windows.Forms.MessageBox.Show("No se ha podido descargar el CDR correspondiente. Revise el archivo de errores para mayor información.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } /* } * else * { * System.Windows.Forms.MessageBox.Show("Solo se puede descargar el CDR de comprobantes que hayan sido enviados a Sunat", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Warning); * }*/ } else { System.Windows.Forms.MessageBox.Show("Seleccione un comprobante", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Warning); } btncdr.IsEnabled = true; }
//Cristhian|01/03/2018|FEI2-586 /*Metodo para actuazliar el docuemnto de comunicacion de baja*/ /*NUEVO INICIO*/ /// <summary> /// Actualizar el documento de comunicacción de baja a documento existente /// </summary> /// <param name="Id_Documento"></param> /// <param name="Id"></param> /// <returns></returns> public bool cs_pxComunicacionBajaActualizar(string Id_Documento, string Id, string TipoContiene) { /** * 1.Verificar si ya existe. * Si ya existe, no agregar. * No no agregar. */ string documento_id = string.Empty; try { //Buscar elementos existentes en la comunicación de baja actual. clsEntityVoidedDocuments documento = new clsEntityVoidedDocuments(localDB); OdbcDataReader datos = null; string sql = "SELECT * FROM cs_VoidedDocuments_VoidedDocumentsLine WHERE cs_VoidedDocuments_Id=" + Id + " ;";//Estado SCC //clsBaseConexion cn = new clsBaseConexion(); OdbcConnection cs_pxConexion_basedatos = new OdbcConnection(localDB.cs_prConexioncadenabasedatos()); cs_pxConexion_basedatos.Open(); datos = new OdbcCommand(sql, cs_pxConexion_basedatos).ExecuteReader(); //Mantener solo los que no sean duplicados. List <string> actualizar_estos_items = new List <string>(); bool agregar; Int32 items_total = 0; agregar = true; while (datos.Read()) { items_total++; string sada = datos[7].ToString() + "-" + Id_Documento; if (datos[7].ToString() == Id_Documento) { agregar = false; } } if (agregar == true) { actualizar_estos_items.Add(Id_Documento); } if (actualizar_estos_items.Count > 0) { foreach (var item in actualizar_estos_items) { items_total++; clsEntityVoidedDocuments_VoidedDocumentsLine detalle = new clsEntityVoidedDocuments_VoidedDocumentsLine(localDB); if (TipoContiene == "0") { clsEntityDocument documento_cabecera = new clsEntityDocument(localDB).cs_fxObtenerUnoPorId(item); //Jordy Amaro 09-12-16 FE-906 //cambio > por <= para que actualize los documentos a enviarse en comunicacion de baja. //Ini-Modifica if (documento_cabecera.Cs_pr_ComunicacionBaja.Length <= 0) {//Fin-Modifica detalle.Cs_pr_VoidedDocuments_VoidedDocumentsLine_Id = Guid.NewGuid().ToString(); detalle.Cs_pr_VoidedDocuments_Id = Id; detalle.Cs_tag_LineID = items_total.ToString(); detalle.Cs_tag_DocumentTypeCode = documento_cabecera.Cs_tag_InvoiceTypeCode; detalle.Cs_tag_DocumentSerialID = documento_cabecera.Cs_tag_ID.Split('-')[0].ToString(); detalle.Cs_tag_DocumentNumberID = documento_cabecera.Cs_tag_ID.Split('-')[1].ToString(); detalle.Cs_tag_VoidReasonDescription = ""; detalle.Cs_pr_IDDocumentoRelacionado = item; detalle.cs_pxInsertar(false, true); documento_cabecera.Cs_pr_ComunicacionBaja = Id; documento_cabecera.cs_pxActualizar(false, false); } } else if (TipoContiene == "1") { clsEntityRetention documento_cabecera = new clsEntityRetention(localDB).cs_fxObtenerUnoPorId(item); //Jordy Amaro 09-12-16 FE-906 //cambio > por <= para que actualize los documentos a enviarse en comunicacion de baja. //Ini-Modifica if (documento_cabecera.Cs_pr_Reversion.Length <= 0) {//Fin-Modifica detalle.Cs_pr_VoidedDocuments_VoidedDocumentsLine_Id = Guid.NewGuid().ToString(); detalle.Cs_pr_VoidedDocuments_Id = Id; detalle.Cs_tag_LineID = items_total.ToString(); detalle.Cs_tag_DocumentTypeCode = "20"; detalle.Cs_tag_DocumentSerialID = documento_cabecera.Cs_tag_Id.Split('-')[0].ToString(); detalle.Cs_tag_DocumentNumberID = documento_cabecera.Cs_tag_Id.Split('-')[1].ToString(); detalle.Cs_tag_VoidReasonDescription = ""; detalle.Cs_pr_IDDocumentoRelacionado = item; detalle.cs_pxInsertar(false, true); documento_cabecera.Cs_pr_Reversion = Id; documento_cabecera.cs_pxActualizar(false, false); } } } } cs_pxConexion_basedatos.Close(); return(true); } catch (Exception ex) { clsBaseMensaje.cs_pxMsgEr("ERR6", ex.ToString()); //System.Windows.Forms.MessageBox.Show(ex.ToString()); clsBaseLog.cs_pxRegistarAdd("clsEntityVoidedDocuments cs_pxComunicacionBajaActualizar" + ex.ToString()); return(false); } }
/*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); }