示例#1
0
文件: Lote.cs 项目: pjeconde/eFact
 public static void DeserializarLr(out FeaEntidades.InterFacturas.lote_response Lr, string Cadena)
 {
     //Deserializar ( pasar de string XML a eFact_RN.IBK.lote_response )
     System.Text.Encoding codificador;
     codificador = System.Text.Encoding.GetEncoding("iso-8859-1");
     byte[] a = new byte[Cadena.Length];
     a = codificador.GetBytes(Cadena);
     MemoryStream ms = new MemoryStream(a);
     ms.Seek(0, System.IO.SeekOrigin.Begin);
     FeaEntidades.InterFacturas.lote_response lr = new FeaEntidades.InterFacturas.lote_response();
     System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(lr.GetType());
     lr = (FeaEntidades.InterFacturas.lote_response)x.Deserialize(ms);
     ms.Close();
     ms = null;
     Lr = lr;
 }
示例#2
0
        private void ActualizarDB2(List<eFact_Entidades.Lote> lotes)
        {
            foreach (eFact_Entidades.Lote lote in lotes)
            {
                string fecha = DateTime.Now.ToString("yyyyMMdd");
                string hora = DateTime.Now.ToString("HHmmss");
                OleDbCommand myCommand;
                OleDbConnection cn;
                string myInsertQueryOK;
                string myInsertQueryER;

                eFact_Entidades.Novedades novedad = new eFact_Entidades.Novedades();
                novedad.CuitVendedor = lote.CuitVendedor;
                novedad.IdLote = lote.IdLote;
                novedad.NumeroEnvio = lote.NumeroEnvio;
                novedad.PuntoVenta = lote.PuntoVenta;
                novedad.IdLog = lote.WF.Log[lote.WF.Log.Count - 1].IdLog;
                novedad.IdOp = lote.IdOp;
                novedad.NumeroLote = lote.NumeroLote;
                novedad.IdEstado = lote.IdEstado;
                novedad.Comentario = lote.WF.Log[lote.WF.Log.Count - 1].Comentario;
                novedad.FechaAlta = DateTime.Now;
                novedad.CantidadRegistros = lote.Comprobantes.Count;
                eFact_RN.Lote.GuardarNovedades(novedad, Aplicacion.Sesion);

                string errorSoloXMail = "";
                if (lote.WF.IdEstado == "AceptadoAFIP" || lote.WF.IdEstado == "AceptadoAFIPO" || lote.WF.IdEstado == "AceptadoAFIPP")
                {
                    cn = new OleDbConnection(Aplicacion.Sesion.CnnStrAplicExterna);
                    cn.Open();
                    //Aceptados por AFIP
                    foreach (eFact_Entidades.Comprobante c in lote.Comprobantes)
                    {
                        //Grabar CAEs
                        if (c.EstadoIFoAFIP == "A")
                        {
                            // Tabla: "BECCL" - Comprobante OK
                            myInsertQueryOK = "insert into BECCL (BCCID, BCCCOM, BCCIDL, BCCTCO, BCCCLA, ";
                            myInsertQueryOK += "BCCTCA, BCCSUC, BCCNED, BCCCAE, BCCFVC, BCCFOC, BCCFPR, BCCHPR) ";
                            myInsertQueryOK += "values ('BC', 0, " + lote.NumeroLote + ", '', '', ";
                            myInsertQueryOK += "'" + c.IdTipoComprobante + "', '" + lote.PuntoVenta + "', '" + c.NumeroComprobante + "', '" + c.NumeroCAE + "', '" + c.FechaVtoCAE.ToString("yyyyMMdd") + "', '" + c.FechaCAE.ToString("yyyyMMdd") + "', '" + fecha + "', '" + hora + "') ";
                            myCommand = new OleDbCommand(myInsertQueryOK);
                            myCommand.Connection = cn;
                            myCommand.ExecuteNonQuery();
                            // --------------------------------
                        }
                        else
                        {
                            // Tabla: "BECCL" - Comprobante ER
                            myInsertQueryER = "insert into BEEIL (BEIID, BEICOM, BEIIDL, BEITCO, BEICLA, BEITCA, BEISUC, BEINED, BEICOE, ";
                            //Descripcion del 1 a 30 / del 31 a 60 / 61 a 90 / 91 a 120 / 121 a 150
                            myInsertQueryER += "BEIDE1, BEIDE2, BEIDE3, BEIDE4, BEIDE5, ";
                            myInsertQueryER += "BEIFPR, BEIHPR) ";
                            myInsertQueryER += "values ('BI', '0', '" + lote.NumeroLote + "', '', '', ";
                            string codigoError = "99";
                            if (c.EstadoIFoAFIP != null && c.EstadoIFoAFIP != "")
                            {
                                codigoError = c.EstadoIFoAFIP;
                            }
                            myInsertQueryER += "'" + c.IdTipoComprobante + "', '" + lote.PuntoVenta + "', '" + c.NumeroComprobante + "', '" + codigoError + "'";
                            myInsertQueryER += Comentarios(c.ComentarioIFoAFIP); 
                            myInsertQueryER += ", '" + fecha + "', '" + hora + "') ";
                            myCommand = new OleDbCommand(myInsertQueryER);
                            myCommand.Connection = cn;
                            myCommand.ExecuteNonQuery();
                            // --------------------------------
                        }
                    }
                    // Tabla: "BELLL" - Log
                    //LOG indicando OK
                    myInsertQueryER = "insert into BELLL (BLLID, BLLIDL, BLLCOD, BLLFPR, BLLHPR) ";
                    myInsertQueryER += "values ('BL', '" + lote.NumeroLote + "', 'OK', '" + fecha + "', '" + hora + "') ";
                    myCommand = new OleDbCommand(myInsertQueryER);
                    myCommand.Connection = cn;
                    myCommand.ExecuteNonQuery();
                    //LOG indicando ERROR
                    if (lote.WF.IdEstado == "AceptadoAFIPP")
                    {
                        myInsertQueryER = "insert into BELLL (BLLID, BLLIDL, BLLCOD, BLLFPR, BLLHPR) ";
                        myInsertQueryER += "values ('BL', '" + lote.NumeroLote + "', 'ER', '" + fecha + "', '" + hora + "') ";
                        myCommand = new OleDbCommand(myInsertQueryER);
                        myCommand.Connection = cn;
                        myCommand.ExecuteNonQuery();
                    }
                    // --------------------------------
                    cn.Close();
                }
                else
                {
                    cn = new OleDbConnection(Aplicacion.Sesion.CnnStrAplicExterna);
                    cn.Open();
                    // Rechazados por IF o AFIP
                    if (lote.WF.Log[lote.WF.Log.Count - 1].Comentario.Contains("Punto de Venta: [") && lote.WF.Log[lote.WF.Log.Count - 1].Comentario.Contains(" Comprobante: ["))
                    {
                        // Grabar errores a nivel de comprobante
                        foreach (eFact_Entidades.Comprobante c in lote.Comprobantes)
                        {
                            if (c.ComentarioIFoAFIP != null && c.ComentarioIFoAFIP != "" && c.ComentarioIFoAFIP.Substring(0, 2) == "<?")
                            {
                                try
                                {
                                    // Deserializar ( pasar de string XML a FeaEntidades.InterFacturas.lote_comprobantes )
                                    System.Text.Encoding codificador;
                                    codificador = System.Text.Encoding.GetEncoding("iso-8859-1");
                                    byte[] a = new byte[c.ComentarioIFoAFIP.Length];
                                    a = codificador.GetBytes(c.ComentarioIFoAFIP);
                                    MemoryStream ms = new MemoryStream(a);
                                    ms.Seek(0, System.IO.SeekOrigin.Begin);
                                    FeaEntidades.InterFacturas.comprobante_response cr = new FeaEntidades.InterFacturas.comprobante_response();
                                    System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(cr.GetType());
                                    cr = (FeaEntidades.InterFacturas.comprobante_response)x.Deserialize(ms);
                                    foreach (FeaEntidades.InterFacturas.error ce in cr.errores_comprobante)
                                    {
                                        // Tabla: "BECCL" - Comprobante ER
                                        myInsertQueryER = "insert into BEEIL (BEIID, BEICOM, BEIIDL, BEITCO, BEICLA, BEITCA, BEISUC, BEINED, BEICOE, ";
                                        //Descripcion del 1 a 30 / del 31 a 60 / 61 a 90 / 91 a 120 / 121 a 150
                                        myInsertQueryER += "BEIDE1, BEIDE2, BEIDE3, BEIDE4, BEIDE5, ";
                                        myInsertQueryER += "BEIFPR, BEIHPR) ";
                                        myInsertQueryER += "values ('BI', '0', '" + lote.NumeroLote + "', '', '', ";
                                        myInsertQueryER += "'" + c.IdTipoComprobante + "', '" + lote.PuntoVenta + "', '" + c.NumeroComprobante + "', '" + ce.codigo_error + "'";
                                        myInsertQueryER += Comentarios(ce.descripcion_error);
                                        myInsertQueryER += ", '" + fecha + "', '" + hora + "') ";
                                        myCommand = new OleDbCommand(myInsertQueryER);
                                        myCommand.Connection = cn;
                                        myCommand.ExecuteNonQuery();
                                        // --------------------------------
                                    }
                                }
                                catch
                                {
                                    // Tabla: "BECCL" - Comprobante ER
                                    myInsertQueryER = "insert into BEEIL (BEIID, BEICOM, BEIIDL, BEITCO, BEICLA, BEITCA, BEISUC, BEINED, BEICOE, ";
                                    //Descripcion del 1 a 30 / del 31 a 60 / 61 a 90 / 91 a 120 / 121 a 150
                                    myInsertQueryER += "BEIDE1, BEIDE2, BEIDE3, BEIDE4, BEIDE5, ";
                                    myInsertQueryER += "BEIFPR, BEIHPR) ";
                                    myInsertQueryER += "values ('BI', '0', '" + lote.NumeroLote + "', '', '', ";
                                    myInsertQueryER += "'" + c.IdTipoComprobante + "', '" + lote.PuntoVenta + "', '" + c.NumeroComprobante + "', '99'";
                                    myInsertQueryER += Comentarios(c.ComentarioIFoAFIP);
                                    myInsertQueryER += ", '" + fecha + "', '" + hora + "') ";
                                    myCommand = new OleDbCommand(myInsertQueryER);
                                    myCommand.Connection = cn;
                                    myCommand.ExecuteNonQuery();
                                    // --------------------------------
                                }
                            }
                            else
                            {
                                // Tabla: "BECCL" - Comprobante ER
                                myInsertQueryER = "insert into BEEIL (BEIID, BEICOM, BEIIDL, BEITCO, BEICLA, BEITCA, BEISUC, BEINED, BEICOE, ";
                                //Descripcion del 1 a 30 / del 31 a 60 / 61 a 90 / 91 a 120 / 121 a 150
                                myInsertQueryER += "BEIDE1, BEIDE2, BEIDE3, BEIDE4, BEIDE5, ";
                                myInsertQueryER += "BEIFPR, BEIHPR) ";
                                myInsertQueryER += "values ('BI', '0', '" + lote.NumeroLote + "', '', '', ";
                                myInsertQueryER += "'" + c.IdTipoComprobante + "', '" + lote.PuntoVenta + "', '" + c.NumeroComprobante + "', '99'";
                                myInsertQueryER += Comentarios(c.ComentarioIFoAFIP);
                                myInsertQueryER += ", '" + fecha + "', '" + hora + "') ";
                                myCommand = new OleDbCommand(myInsertQueryER);
                                myCommand.Connection = cn;
                                myCommand.ExecuteNonQuery();
                                // --------------------------------
                            }
                        }
                    }
                    else
                    {
                        // Grabar errores a nivel de lote
                        cn = new OleDbConnection(Aplicacion.Sesion.CnnStrAplicExterna);
                        cn.Open();
                        try
                        {
                            // Deserializar ( pasar de string XML a FeaEntidades.InterFacturas.lote_comprobantes )
                            System.Text.Encoding codificador;
                            codificador = System.Text.Encoding.GetEncoding("iso-8859-1");
                            byte[] a = new byte[lote.LoteXmlIF.Length];
                            a = codificador.GetBytes(lote.LoteXmlIF);
                            MemoryStream ms = new MemoryStream(a);
                            ms.Seek(0, System.IO.SeekOrigin.Begin);
                            FeaEntidades.InterFacturas.lote_response lr = new FeaEntidades.InterFacturas.lote_response();
                            System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(lr.GetType());
                            lr = (FeaEntidades.InterFacturas.lote_response)x.Deserialize(ms);
                            foreach (FeaEntidades.InterFacturas.error le in lr.errores_lote)
                            {
                                //if (le.codigo_error == 500 || le.codigo_error == 600)
                                //{
                                //    errorSoloXMail = lote.LoteXmlIF;
                                //    break;
                                //}

                                // Tabla: "BECCL" - Comprobante ER
                                myInsertQueryER = "insert into BEEIL (BEIID, BEICOM, BEIIDL, BEITCO, BEICLA, BEITCA, BEISUC, BEINED, BEICOE, ";
                                // Descripcion del 1 a 30 / del 31 a 60 / 61 a 90 / 91 a 120 / 121 a 150
                                myInsertQueryER += "BEIDE1, BEIDE2, BEIDE3, BEIDE4, BEIDE5, ";
                                myInsertQueryER += "BEIFPR, BEIHPR) ";
                                myInsertQueryER += "values ('BI', '0', '" + lote.NumeroLote + "', '', '', ";
                                myInsertQueryER += "'0', '" + lote.PuntoVenta + "', '0', '" + le.codigo_error + "'";
                                myInsertQueryER += Comentarios(le.descripcion_error);
                                myInsertQueryER += ", '" + fecha + "', '" + hora + "') ";
                                myCommand = new OleDbCommand(myInsertQueryER);
                                myCommand.Connection = cn;
                                myCommand.ExecuteNonQuery();
                            }
                        }
                        catch
                        {
                            // Tabla: "BECCL" - Comprobante ER
                            myInsertQueryER = "insert into BEEIL (BEIID, BEICOM, BEIIDL, BEITCO, BEICLA, BEITCA, BEISUC, BEINED, BEICOE, ";
                            // Descripcion del 1 a 30 / del 31 a 60 / 61 a 90 / 91 a 120 / 121 a 150
                            myInsertQueryER += "BEIDE1, BEIDE2, BEIDE3, BEIDE4, BEIDE5, ";
                            myInsertQueryER += "BEIFPR, BEIHPR) ";
                            myInsertQueryER += "values ('BI', '0', '" + lote.NumeroLote + "', '', '', ";
                            myInsertQueryER += "'0', '" + lote.PuntoVenta + "', '0', '99'";
                            myInsertQueryER += Comentarios(lote.WF.Log[lote.WF.Log.Count - 1].Comentario);
                            myInsertQueryER += ", '" + fecha + "', '" + hora + "') ";
                            myCommand = new OleDbCommand(myInsertQueryER);
                            myCommand.Connection = cn;
                            myCommand.ExecuteNonQuery();
                        }
                        // --------------------------------
                    }
                    if (errorSoloXMail != "")
                    {
                        Exception exSoloXMail = new Exception(errorSoloXMail);
                        Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManager.Publish(exSoloXMail);
                    }
                    else
                    {
                        // Tabla: "BELLL" - Log
                        myInsertQueryER = "insert into BELLL (BLLID, BLLIDL, BLLCOD, BLLFPR, BLLHPR) ";
                        myInsertQueryER += "values ('BL', '" + lote.NumeroLote + "', 'ER', '" + fecha + "', '" + hora + "') ";
                        myCommand = new OleDbCommand(myInsertQueryER);
                        myCommand.Connection = cn;
                        myCommand.ExecuteNonQuery();
                        // --------------------------------
                        cn.Close();
                    }
                }
            }
        }