private void btnVerificarCarpeta_Click(object sender, EventArgs e) { try { bus_ruta.GuardarDB(new cp_RutaPorEmpresaPorUsuario_Info { IdEmpresa = param.IdEmpresa, IdUsuario = param.IdUsuario, RutaXML = txtRutaXml.Text }); blst = new BindingList <cxc_XML_Documento_Info>(); string folder = txtRutaXml.Text; string filter = "*.XML*"; string[] files = Directory.GetFiles(folder, filter); foreach (var item in files) { string readText = File.ReadAllText(item); XmlDocument xmlComprobanteOrigen = new XmlDocument(); xmlComprobanteOrigen.Load(new StringReader(readText)); string mensajeErrorOut = string.Empty; string sXml_a_descerializar = Quitar_a_xml_CDATA_y_Signature(xmlComprobanteOrigen.GetElementsByTagName("comprobante")[0].InnerXml, ref mensajeErrorOut); var rootElement = XElement.Parse(sXml_a_descerializar); var infoFactura = rootElement.Element("infoCompRetencion"); var infoTributaria = rootElement.Element("infoTributaria"); var IdentificacionComprador = infoFactura.Element("identificacionSujetoRetenido").Value; if (IdentificacionComprador == param.InfoEmpresa.em_ruc) { #region Cabecera var Documento = new cxc_XML_Documento_Info(); Documento.IdEmpresa = param.IdEmpresa; Documento.XML = sXml_a_descerializar; Documento.Tipo = infoTributaria.Element("codDoc").Value == "07" ? "RETENCION" : ""; Documento.emi_Ruc = infoTributaria.Element("ruc").Value; Documento.emi_RazonSocial = infoTributaria.Element("razonSocial").Value; Documento.emi_NombreComercial = infoTributaria.Element("nombreComercial") == null?infoTributaria.Element("razonSocial").Value : infoTributaria.Element("nombreComercial").Value; Documento.ClaveAcceso = infoTributaria.Element("claveAcceso").Value; Documento.emi_ContribuyenteEspecial = infoFactura.Element("contribuyenteEspecial") == null ? "NO" : infoFactura.Element("contribuyenteEspecial").Value; Documento.CodDocumento = infoTributaria.Element("codDoc").Value; Documento.Establecimiento = infoTributaria.Element("estab").Value; Documento.PuntoEmision = infoTributaria.Element("ptoEmi").Value; Documento.NumeroDocumento = infoTributaria.Element("secuencial").Value; Documento.emi_DireccionMatriz = infoTributaria.Element("dirMatriz").Value; Documento.FechaEmision = DateTime.ParseExact(infoFactura.Element("fechaEmision").Value, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentCulture); Documento.rec_RazonSocial = infoFactura.Element("razonSocialSujetoRetenido").Value; Documento.rec_Identificacion = infoFactura.Element("identificacionSujetoRetenido").Value; Documento.Comprobante = Documento.CodDocumento + "-" + Documento.Establecimiento + "-" + Documento.PuntoEmision + "-" + Documento.NumeroDocumento; Documento.IdUsuarioCreacion = param.IdUsuario; #endregion #region Cliente var Cliente = ListaCliente.Where(q => q.Persona_Info.pe_cedulaRuc == Documento.emi_Ruc).FirstOrDefault(); if (Cliente == null) { Cliente = busCliente.GetCliente(param.IdEmpresa, Documento.emi_Ruc); if (Cliente == null) { Documento.AplicaRetencion = 2; Documento.Motivo = "El cliente no existe en el sistema"; } else { ListaCliente.Add(Cliente); Documento.IdCliente = Cliente.IdCliente; } } else { Documento.IdCliente = Cliente.IdCliente; } #endregion #region Detalle var infoImpuestos = rootElement.Element("impuestos"); if (infoImpuestos != null) { var list = infoImpuestos.Elements("impuesto") .Select(element => element) .ToList(); Documento.ListaDet = new List <cxc_XML_DocumentoDet_Info>(); foreach (var Impuesto in list) { var det = new cxc_XML_DocumentoDet_Info { TipoRetencion = Impuesto.Element("codigo").Value == "1" ? "FTE" : "IVA", CodigoRetencion = Impuesto.Element("codigoRetencion").Value.ToString(), BaseImponible = Convert.ToDecimal(Impuesto.Element("baseImponible").Value.ToString()), PorcentajeRetencion = Convert.ToDecimal(Impuesto.Element("porcentajeRetener").Value.ToString()), ValorRetenido = Convert.ToDecimal(Impuesto.Element("valorRetenido").Value.ToString()), CodDocSustento = Impuesto.Element("codDocSustento").Value.ToString(), NumDocSustento = Impuesto.Element("numDocSustento").Value.ToString(), FechaEmisionDocSustento = DateTime.ParseExact(Impuesto.Element("fechaEmisionDocSustento").Value, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentCulture), }; if (det.TipoRetencion == "FTE") { Documento.TotalRetencionFTE += Convert.ToDouble(det.ValorRetenido); double Porcentaje = Convert.ToDouble(det.PorcentajeRetencion); var TipoCobro = ListaTipoCobro.Where(q => q.ESRetenFTE == "S" && q.PorcentajeRet == Porcentaje).FirstOrDefault(); if (TipoCobro == null) { MessageBox.Show("El porcentaje de retención de fuente " + Porcentaje.ToString() + " no se encuentra registrado", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } det.IdCobro_tipo = TipoCobro.IdCobro_tipo; } else { Documento.TotalRetencionIVA += Convert.ToDouble(det.ValorRetenido); double Porcentaje = Convert.ToDouble(det.PorcentajeRetencion); var TipoCobro = ListaTipoCobro.Where(q => q.ESRetenIVA == "S" && q.PorcentajeRet == Porcentaje).FirstOrDefault(); if (TipoCobro == null) { MessageBox.Show("El porcentaje de retención de IVA " + Porcentaje.ToString() + " no se encuentra registrado", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } det.IdCobro_tipo = TipoCobro.IdCobro_tipo; } det.dc_TipoDocumento = det.CodDocSustento == "01" ? "FACT" : "NTDB"; Documento.DocumentoSustento = det.NumDocSustento; Documento.ListaDet.Add(det); } #region Validar saldo factura if (Documento.AplicaRetencion == 0 && Documento.ListaDet.Count > 0) { var Det1 = Documento.ListaDet.First(); var Cab = busDet.GetInfoParaCruzar(param.IdEmpresa, Det1.dc_TipoDocumento, Det1.NumDocSustento, Convert.ToDouble(Documento.ListaDet.Sum(q => q.ValorRetenido)), Documento.IdCliente); if (Cab.IdSucursal > 0) { Documento.IdSucursal = Cab.IdSucursal; Documento.IdBodega_Cbte = Cab.IdBodega_Cbte; Documento.IdCbte_vta_nota = Cab.IdCbte_vta_nota; } Documento.AplicaRetencion = Cab.AplicaRetencion; Documento.Motivo = Cab.Motivo; } #endregion #endregion } else { MessageBox.Show("El archivo: " + item + "\nNo cumple las especificaciones técnicas", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } blst.Add(Documento); gcDetalle.DataSource = null; gcDetalle.DataSource = blst; } } } catch (Exception ex) { gcDetalle.DataSource = blst; lblContador.Text = blst.Count.ToString(); MessageBox.Show(ex.Message, param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private decimal ArmarCobro(int IdEmpresa, int IdSucursal, decimal IdCliente, DateTime Fecha, string NumRetencion, string IdUsuario, cxc_XML_DocumentoDet_Info InfoDet) { try { EntitiesFacturacion dbFac = new EntitiesFacturacion(); EntitiesCuentas_x_Cobrar dbCxc = new EntitiesCuentas_x_Cobrar(); #region Cabecera cxc_cobro cobro = new cxc_cobro { IdEmpresa = IdEmpresa, IdSucursal = IdSucursal, IdCobro = odata.GetId(IdEmpresa, IdSucursal), IdCobro_tipo = InfoDet.IdCobro_tipo, IdCliente = IdCliente, cr_TotalCobro = Convert.ToDouble(InfoDet.ValorRetenido), cr_fecha = Fecha.Date, cr_fechaCobro = Fecha.Date, cr_fechaDocu = Fecha.Date, cr_observacion = "Canc/:FACT" + InfoDet.NumDocSustento, cr_cuenta = "", cr_NumDocumento = NumRetencion, cr_Tarjeta = "", cr_propietarioCta = "", cr_estado = "A", cr_es_anticipo = "N", IdUsuario = IdUsuario, Fecha_Transac = DateTime.Now, nom_pc = "", ip = "", IdCaja = 1 }; dbCxc.cxc_cobro.Add(cobro); #endregion #region Detalle dbCxc.cxc_cobro_det.Add(new cxc_cobro_det { IdEmpresa = cobro.IdEmpresa, IdSucursal = cobro.IdSucursal, IdCobro = cobro.IdCobro, secuencial = 1, IdBodega_Cbte = InfoDet.IdBodega_Cbte, IdCbte_vta_nota = InfoDet.IdCbte_vta_nota ?? 0, dc_TipoDocumento = InfoDet.dc_TipoDocumento, dc_ValorPago = Convert.ToDouble(InfoDet.ValorRetenido), IdUsuario = IdUsuario, Fecha_Transac = DateTime.Now, estado = "A" }); #endregion #region Cobros por estado dbCxc.cxc_cobro_x_EstadoCobro.Add(new cxc_cobro_x_EstadoCobro { IdEmpresa = cobro.IdEmpresa, IdSucursal = cobro.IdSucursal, IdCobro = cobro.IdCobro, IdEstadoCobro = "COBR", Secuencia = 1, IdCobro_tipo = cobro.IdCobro_tipo, observacion = cobro.cr_observacion, Fecha = cobro.cr_fecha, IdBanco = 0, IdCbte_vta_nota = 0, IdUsuario = cobro.IdUsuario, nom_pc = cobro.nom_pc, ip = cobro.ip }); #endregion dbCxc.SaveChanges(); return(cobro.IdCobro); } catch (Exception) { throw; } }