Exemple #1
0
        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;
            }
        }