示例#1
0
        public RespuestaComunConArchivo2 EnviarXMLFE(string RutaWS, string usuario, string clave, string RucEmisor,
                                                     string TipoDocumento, string IdentificadorArchivo, bool EsResumen, string CarpetaXML, string CarpetaCdr)
        {
            ServicioEnviarComprobanteFE.FEServiceClient           ServicioFE     = new ServicioEnviarComprobanteFE.FEServiceClient();
            ServicioEnviarComprobanteFE.RespuestaComunConArchivo2 RespuestaSunat = ServicioFE.EnviarXML(RutaWS, usuario, clave, RucEmisor,
                                                                                                        TipoDocumento, IdentificadorArchivo, EsResumen, CarpetaXML, CarpetaCdr);

            RespuestaComunConArchivo2 objrespuesta = new RespuestaComunConArchivo2();

            objrespuesta.NombreArchivo    = RespuestaSunat.NombreArchivo;
            objrespuesta.Exito            = RespuestaSunat.Exito;
            objrespuesta.MensajeError     = RespuestaSunat.MensajeError;
            objrespuesta.Pila             = RespuestaSunat.Pila;
            objrespuesta.CodigoRespuesta  = RespuestaSunat.CodigoRespuesta;
            objrespuesta.MensajeRespuesta = RespuestaSunat.MensajeRespuesta;
            objrespuesta.TramaZipCdr      = RespuestaSunat.TramaZipCdr;
            objrespuesta.NroTicket        = RespuestaSunat.NroTicket;
            return(objrespuesta);
        }
示例#2
0
        public string GenerarSunat(Int32 TipoComprobanteID, string NumComprobante, string EmpresaID, string Tipo, string TipoNotaCredito, string DescripcionAnulacion)
        {
            /*
             * TipoDocumento = 07  nota de credito
             * NumComprobante2 para notacredito
             */
            try
            {
                DataSet   ds  = GetComprobanteFE(TipoComprobanteID, NumComprobante, EmpresaID, null, Tipo);
                DataTable dtc = ds.Tables[0];
                DataTable dtd = ds.Tables[1];

                if (dtc.Rows[0]["EmiteFE"].ToString() == "S" & (Tipo == "01" | Tipo == "03" | Tipo == "07"))
                {
                    string RUTA_WS_SUNAT = ConfigurationManager.AppSettings["RUTA_WS_SUNAT"];


                    ServicioEnviarComprobanteFE.FEServiceClient    ServicioFE       = new ServicioEnviarComprobanteFE.FEServiceClient();
                    ServicioEnviarComprobanteFE.Contribuyente      emisor           = new ServicioEnviarComprobanteFE.Contribuyente();
                    ServicioEnviarComprobanteFE.Contribuyente      receptor         = new ServicioEnviarComprobanteFE.Contribuyente();
                    ServicioEnviarComprobanteFE.DetalleDocumento[] detalle          = new ServicioEnviarComprobanteFE.DetalleDocumento[dtd.Rows.Count];
                    ServicioEnviarComprobanteFE.DatoAdicional[]    datosadicionales = new ServicioEnviarComprobanteFE.DatoAdicional[0];
                    //ServicioEnviarComprobanteFE.DocumentoRelacionado[] relacionados = new ServicioEnviarComprobanteFE.DocumentoRelacionado[0];

                    receptor.TipoDocumento = dtc.Rows[0]["TipoDocumentoIdentidadCliente"].ToString();
                    receptor.NroDocumento  = dtc.Rows[0]["NumeroDocumentoIdentidadCliente"].ToString();
                    receptor.NombreLegal   = dtc.Rows[0]["RazonSocialCliente"].ToString();


                    emisor.TipoDocumento = dtc.Rows[0]["TipoDocumentoEmisor"].ToString();
                    emisor.NroDocumento  = dtc.Rows[0]["RUC"].ToString();
                    emisor.NombreLegal   = dtc.Rows[0]["RazonSocial"].ToString();

                    TextFunctions ObjTextFunctions = new TextFunctions();
                    string        TotalPagarLetras = ObjTextFunctions.enletras(dtc.Rows[0]["ImporteTotal"].ToString());

                    //ServicioEnviarComprobanteFE.DocumentoRelacionado sss = new ServicioEnviarComprobanteFE.DocumentoRelacionado();
                    //sss.NroDocumento = "";
                    //sss.TipoDocumento = "";

                    //ServicioEnviarComprobanteFE.DatoAdicional dar = new ServicioEnviarComprobanteFE.DatoAdicional();
                    //dar.Codigo = "";
                    //dar.Contenido = "";



                    int id = 0;
                    foreach (DataRow DR in dtd.Rows)
                    {
                        //ServicioEnviarComprobanteFE.DetalleDocumento dd = new ServicioEnviarComprobanteFE.DetalleDocumento();
                        ServicioEnviarComprobanteFE.DetalleDocumento dd = new ServicioEnviarComprobanteFE.DetalleDocumento();

                        dd.Cantidad          = Convert.ToDecimal(DR["Cantidad"]);
                        dd.CodigoItem        = DR["CodigoProducto"].ToString();
                        dd.Descripcion       = DR["DescripcionProducto"].ToString();
                        dd.Descuento         = Convert.ToDecimal(DR["DescuentoItem"]);
                        dd.Id                = id + 1;
                        dd.Impuesto          = Convert.ToDecimal(DR["MontoIgvItem"]);
                        dd.ImpuestoSelectivo = Convert.ToDecimal(DR["MontoISCItem"]);
                        dd.OtroImpuesto      = 0;
                        dd.PrecioReferencial = Convert.ToDecimal(DR["ValorVentaItem"]);
                        dd.PrecioUnitario    = Convert.ToDecimal(DR["PrecioVentaItem"]);
                        dd.Suma              = Convert.ToDecimal(DR["Suma"]);
                        dd.TipoImpuesto      = DR["AfectacionIGVItem"].ToString();
                        dd.TipoPrecio        = "01";
                        dd.TotalVenta        = Convert.ToDecimal(DR["TotalVenta"]);
                        dd.UnidadMedida      = DR["CodigoUM"].ToString();
                        detalle[id]          = dd;

                        id = id + 1;
                    }

                    //ServicioEnviarComprobanteFE.DocumentoElectronico _documento = new ServicioEnviarComprobanteFE.DocumentoElectronico()
                    ServicioEnviarComprobanteFE.DocumentoElectronico _documento = new ServicioEnviarComprobanteFE.DocumentoElectronico()
                    {
                        FechaEmision       = DateTime.Today.ToShortDateString(),
                        IdDocumento        = dtc.Rows[0]["NumComprobante2"].ToString(),
                        TotalIgv           = Convert.ToDecimal(dtc.Rows[0]["SumatoriaIGV"]),
                        TotalIsc           = Convert.ToDecimal(dtc.Rows[0]["SumatoriaISC"]),
                        TotalOtrosTributos = Convert.ToDecimal(dtc.Rows[0]["SumatoriaOtrosTributos"]),
                        Gravadas           = Convert.ToDecimal(dtc.Rows[0]["OperacionesGravadas"]),
                        Exoneradas         = Convert.ToDecimal(dtc.Rows[0]["ValorVentaOperacionesExoneradas"]),
                        Inafectas          = Convert.ToDecimal(dtc.Rows[0]["OperacionesInafectas"]),
                        Gratuitas          = Convert.ToDecimal(dtc.Rows[0]["Gratuitas"]),
                        TotalVenta         = Convert.ToDecimal(dtc.Rows[0]["ImporteTotal"]),
                        DescuentoGlobal    = Convert.ToDecimal(dtc.Rows[0]["DescuentosGlobales"]),
                        Moneda             = dtc.Rows[0]["TipoMoneda"].ToString(),
                        CalculoIgv         = Convert.ToDecimal(dtc.Rows[0]["DescuentosGlobales"]),
                        CalculoDetraccion  = Convert.ToDecimal(dtc.Rows[0]["DescuentosGlobales"]),
                        CalculoIsc         = Convert.ToDecimal(dtc.Rows[0]["DescuentosGlobales"]),
                        MonedaAnticipo     = "",
                        TipoDocumento      = dtc.Rows[0]["TipoDocumento"].ToString(),
                        TipoOperacion      = dtc.Rows[0]["TipoOperacion"].ToString(),
                        TipoDocAnticipo    = "",
                        MontoAnticipo      = 0,
                        MontoDetraccion    = 0,
                        MontoEnLetras      = TotalPagarLetras,
                        MontoPercepcion    = 0,
                        Emisor             = emisor,
                        Receptor           = receptor,
                        Items = detalle,
                        //Relacionados = relacionados,
                        DatoAdicionales = datosadicionales,
                        RutaXML         = dtc.Rows[0]["RutaXMLFE"].ToString()
                    };

                    int NotaID = 0;
                    if (Tipo == "07")
                    {
                        ServicioEnviarComprobanteFE.Discrepancia[] discrepancias = new ServicioEnviarComprobanteFE.Discrepancia[1];
                        ServicioEnviarComprobanteFE.Discrepancia   Discre        = new ServicioEnviarComprobanteFE.Discrepancia();
                        Discre.NroReferencia = dtc.Rows[0]["NumComprobante2"].ToString();
                        Discre.Descripcion   = DescripcionAnulacion;
                        Discre.Tipo          = TipoNotaCredito;
                        discrepancias[0]     = Discre;

                        //obtener nota credito

                        DataTable dtnota = InsertarNotaCreditoFE("07", EmpresaID, dtc.Rows[0]["NumComprobante2"].ToString().Substring(0, 4),
                                                                 Convert.ToInt32(dtc.Rows[0]["NumComprobante2"].ToString().Substring(5, 8)), TipoComprobanteID,
                                                                 Convert.ToDecimal(dtc.Rows[0]["ImporteTotal"]), DescripcionAnulacion, 0, Convert.ToInt32(dtc.Rows[0]["ClienteID"].ToString()), 51, "");

                        _documento.IdDocumento   = dtnota.Rows[0]["NumeroComprobante"].ToString();
                        _documento.TipoDocumento = Tipo;
                        _documento.Discrepancias = discrepancias;

                        NotaID = Convert.ToInt32(dtnota.Rows[0]["NotaID"]);

                        ServicioEnviarComprobanteFE.DocumentoRelacionado[] Relacionados = new ServicioEnviarComprobanteFE.DocumentoRelacionado[1];
                        ServicioEnviarComprobanteFE.DocumentoRelacionado   relacion     = new ServicioEnviarComprobanteFE.DocumentoRelacionado();
                        relacion.NroDocumento   = dtc.Rows[0]["NumComprobante2"].ToString();
                        relacion.TipoDocumento  = dtc.Rows[0]["TipoDocumento"].ToString();
                        Relacionados[0]         = relacion;
                        _documento.Relacionados = Relacionados;
                    }
                    else
                    {
                        ServicioEnviarComprobanteFE.DocumentoRelacionado[] Relacionados = new ServicioEnviarComprobanteFE.DocumentoRelacionado[0];
                        _documento.Relacionados = Relacionados;
                    }


                    ServicioEnviarComprobanteFE.DocumentoResponse respu = ServicioFE.GenerarXMLFactura(_documento);

                    if (respu.Exito == true)
                    {
                        //solo se envia factura, nota credito a sunat, boleta solo se guarda
                        if (Tipo == "01" | Tipo == "07")
                        {
                            ServicioEnviarComprobanteFE.RespuestaComunConArchivo2 RespuestaSunat = ServicioFE.EnviarSunat(Tipo,
                                                                                                                          dtc.Rows[0]["RutaXMLFE"].ToString(), dtc.Rows[0]["RutaCDRFE"].ToString(), dtc.Rows[0]["RutaCertificado"].ToString(), dtc.Rows[0]["ClaveCertificado"].ToString(), dtc.Rows[0]["RUC"].ToString(),
                                                                                                                          dtc.Rows[0]["UsuarioSOL"].ToString(), dtc.Rows[0]["ClaveSol"].ToString(), _documento.IdDocumento,
                                                                                                                          RUTA_WS_SUNAT, false);

                            if (Tipo == "07")
                            {
                                ActualizarNotaCredito(NotaID, Convert.ToInt64(RespuestaSunat.NroTicket), RespuestaSunat.MensajeError, (RespuestaSunat.Exito == true) ? "S" : "N", Convert.ToInt32(dtc.Rows[0]["ComprobanteId"]));
                            }

                            DataTable dtres;
                            if (Tipo == "01")
                            {
                                dtres = ActualizarComprobanteSunat(Convert.ToInt32(dtc.Rows[0]["ComprobanteId"]), (RespuestaSunat.Exito == true) ? "S" : "N", RespuestaSunat.MensajeRespuesta);
                            }

                            if (RespuestaSunat.Exito == false)
                            {
                                throw new Exception(RespuestaSunat.MensajeError);
                            }
                            else
                            {
                                if (Tipo == "01")
                                {
                                    //GENERAR EMISIÓN FISICA
                                    if (dtc.Rows[0]["GenerarFisico"].ToString() == "S")
                                    {
                                        //string mensajeresp = ServicioFE.GenerarPdf(ds, dtc.Rows[0]["RutaXMLFE"].ToString(), dtc.Rows[0]["NumComprobante2"].ToString(), RespuestaSunat.MensajeRespuesta);
                                        //if (mensajeresp != "OK")
                                        //{
                                        //    return respu.MensajeError;
                                        //}
                                    }
                                }
                            }
                            return("OK");
                        }
                    }
                    else
                    {
                        return(respu.MensajeError);
                    }
                }
                return("OK");
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }