public RevisionLogs(Data_Usuario usuario)
        {
            InitializeComponent();
            data_Usuario = usuario;

            Data_Log data_Log = new Data_Log();

            _data_Log = (IGetDataAsync)data_Log;
        }
        private void btnGenerarResumen_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                List <Data_Documentos> selected_data_Documentos = new List <Data_Documentos>();
                foreach (var data_Documento in data_Documentos)
                {
                    if (data_Documento.Selectable == true)
                    {
                        selected_data_Documentos.Add(data_Documento);
                    }
                }

                if (selected_data_Documentos.Count() > 0)
                {
                    string enviados     = string.Empty;
                    string noEnviados   = string.Empty;
                    string mensajeFinal = string.Empty;


                    ProgressDialogResult result = ProgressWindow.Execute(padre, "Procesando...", () =>
                    {
                        ProcesarEnvio procesarEnvio = new ProcesarEnvio(data_Usuario);
                        mensajeFinal = procesarEnvio.PostResumen(selected_data_Documentos);
                    });

                    LoadGrid();

                    CustomDialogWindow customDialogWindow = new CustomDialogWindow();
                    customDialogWindow.Buttons            = CustomDialogButtons.OK;
                    customDialogWindow.Caption            = "Mensaje";
                    customDialogWindow.DefaultButton      = CustomDialogResults.OK;
                    customDialogWindow.InstructionHeading = "Resultados de la comunicación de baja";
                    customDialogWindow.InstructionIcon    = CustomDialogIcons.Information;
                    customDialogWindow.InstructionText    = mensajeFinal;
                    CustomDialogResults customDialogResults = customDialogWindow.Show();
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Debe seleccionar al menos un documento", "Ninguna selección detectada", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                System.Windows.MessageBox.Show(msg, "Error al enviar el documento a sunat", MessageBoxButton.OK, MessageBoxImage.Error);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al enviar el documento a sunat desde la interfaz",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
        }
Example #3
0
        public void LoadData()
        {
            try
            {
                Mouse.OverrideCursor = Cursors.Wait;
                Data_Documentos data_Documento = new Data_Documentos(IdDocumento);   //  IdDocumento variable global
                data_Documento.Read_Documento();

                Data_CabeceraDocumento cabeceraDocumento = new Data_CabeceraDocumento(data_Documento.IdCabeceraDocumento);
                cabeceraDocumento.Read_CabeceraDocumento();

                Data_Contribuyente Receptor = new Data_Contribuyente(cabeceraDocumento.IdReceptor);
                Receptor.Read_Contribuyente();

                lblTipoDocumento.Content = data_Documento.TDDescripcion;

                if (!string.IsNullOrEmpty(cabeceraDocumento.FechaEmision.ToString()))
                {
                    lblFechaRecepcion.Content = cabeceraDocumento.FechaEmision.ToString();
                }
                else
                {
                    lblFechaRecepcion.Content = "----/--/--";
                }

                if (!string.IsNullOrEmpty(data_Documento.FechaEmisionSUNAT.ToString()))
                {
                    lblFechaEmision.Content = data_Documento.FechaEmisionSUNAT.ToString();
                }
                else
                {
                    lblFechaEmision.Content = "----/--/--";
                }

                lblCliente.Content = Receptor.NombreComercial;
                lblTotal.Content   = cabeceraDocumento.ImporteTotalVenta.ToString() + " " + cabeceraDocumento.DescripcionMoneda;
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ha ocurrido un error al cargar los registros, detalle del error: {ex}",
                                "Error al cargar los datos", MessageBoxButton.OK, MessageBoxImage.Error);
                var      msg      = string.Concat(ex.InnerException?.Message, ex.Message);
                Data_Log data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al enviar el documento a sunat desde la interfaz",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
            finally {
                Mouse.OverrideCursor = null;
            }
        }
Example #4
0
        private void btnMotivoBaja_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                List <Data_Documentos> selected_data_Documentos = new List <Data_Documentos>();
                foreach (var data_Documento in data_Documentos)
                {
                    if (data_Documento.Selectable == true)
                    {
                        selected_data_Documentos.Add(data_Documento);
                    }
                }

                switch (selected_data_Documentos.Count())
                {
                case 0:
                    System.Windows.Forms.MessageBox.Show("Debe seleccionar un documento", "Error de elección", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    break;

                case 1:
                    if (!selected_data_Documentos[0].ComunicacionBaja)
                    {
                        PromtMotivoBaja promtMotivoBaja = new PromtMotivoBaja(data_Usuario, selected_data_Documentos[0].IdDocumento);
                        promtMotivoBaja.ShowDialog();
                        LoadGrid();
                    }
                    else
                    {
                        System.Windows.Forms.MessageBox.Show("Estimado dino-usuario, ya dio de baja a este documento, y ya no puede cambiar el motivo de baja del documento.",
                                                             "Documento ya dado de baja", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                    break;

                default:
                    System.Windows.Forms.MessageBox.Show("Debe seleccionar sólo un documento", "Error de elección", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    break;
                }
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                System.Windows.MessageBox.Show(msg, "Error inesperado al elegir el documento", MessageBoxButton.OK, MessageBoxImage.Error);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error inesperado al elegir el documento",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
        }
Example #5
0
        private void btnValidar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                int    documentosSinXML = 0;
                string mensajeFinal     = string.Empty;

                XmlSchemaSet xmlSchemaSet = new XmlSchemaSet();
                xmlSchemaSet.Add(null, @"D:\Jorge Luis\FEICONT21\pruebaHtml\SERCE\Common\Validation\UBL-Invoice-2.1.xsd");
                XDocument document = XDocument.Load(@"D:\Jorge Luis\tempParaPruebasSunat\20541388061-01-F001-00004\20541388061-01-F001-00004.xml");
                //XDocument document      =   XDocument.Load(@"D:\Jorge Luis\tempParaPruebasSunat\20541388061-01-F001-0000004\20541388061-01-F001-0000004.xml");
                bool validationErrors = false;
                document.Validate(xmlSchemaSet, (s, ev) => { mensajeFinal = ev.Message; validationErrors = true; });

                if (validationErrors)
                {
                    mensajeFinal += mensajeFinal + "errores";
                }
                else
                {
                    mensajeFinal += mensajeFinal + "sin errores";
                }

                CustomDialogWindow customDialogWindow = new CustomDialogWindow();
                customDialogWindow.Buttons            = CustomDialogButtons.OK;
                customDialogWindow.Caption            = "Detalle";
                customDialogWindow.DefaultButton      = CustomDialogResults.OK;
                customDialogWindow.InstructionHeading = "Resultados de la descarga del documento(s)";
                customDialogWindow.InstructionIcon    = CustomDialogIcons.Information;
                customDialogWindow.InstructionText    = mensajeFinal;
                CustomDialogResults customDialogResults = customDialogWindow.Show();
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al enviar el documento a sunat desde la interfaz",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
        }
Example #6
0
        private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            Data_Documentos data_Documento = new Data_Documentos()
            {
                IdDocumento = IdDocumento, MotivoBaja = txtDetalleMotivoBaja.Text.ToString()
            };

            if (!data_Documento.Update_Documento_OneColumn("[dbo].[Update_Documento_MotivoBaja]"))
            {
                Data_Log data_Log = new Data_Log()
                {
                    DetalleError   = "Error al actualizar el motivo de baja del documento",
                    Comentario     = "Error con la base de datos: [dbo].[Update_Documento_MotivoBaja]",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
            else
            {
                Close();
            }
        }
        public async Task <List <Data_Log> > GetLogs()
        {
            var data_Logs = new List <Data_Log>();

            try
            {
                Data_Log data_Log = new Data_Log()
                {
                    Start_FechaRegistro = DateTime.Parse(datePick_inicio.SelectedDate.ToString()),
                    End_FechaRegistro   = DateTime.Parse(datePick_fin.SelectedDate.ToString()),
                    IdUser_Empresa      = data_Usuario.IdUser_Empresa
                };
                GetDataAsync getDataAsync = await _data_Log.Read_List_Log(data_Log);

                data_Logs = getDataAsync.Data_Logs;
            }
            catch (Exception)
            {
                data_Logs = new List <Data_Log>();
            }

            return(data_Logs);
        }
Example #8
0
        private void btnDescargarXML_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                int    documentosSinXML = 0;
                string mensajeFinal     = string.Empty;

                List <Data_Documentos> selected_data_Documentos = new List <Data_Documentos>();
                foreach (var data_Documento in data_Documentos)
                {
                    if (data_Documento.Selectable == true)
                    {
                        selected_data_Documentos.Add(data_Documento);
                    }

                    if (data_Documento.EstadoSunat == "Pendiente")
                    {
                        documentosSinXML++;
                    }
                }

                if (selected_data_Documentos.Count() > 0)
                {
                    if (documentosSinXML > 0)
                    {
                        System.Windows.MessageBox.Show("Ha seleccionado uno o más documentos que aún no se envían a Sunat (Pendiente), por este motivo aún no se ha" +
                                                       " generado su respectivo XML, envíe el(los) documentos y vuelva a intentarlo", "Documento sin XML", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    }
                    else
                    {
                        string pdfsNoEncontrados = string.Empty;
                        string rutaDescarga      = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

                        VistaFolderBrowserDialog dialog = new VistaFolderBrowserDialog();
                        dialog.Description            = "Seleccione el directorio donde desea guardar los archivos.";
                        dialog.UseDescriptionForTitle = true;


                        if (!VistaFolderBrowserDialog.IsVistaFolderDialogSupported)
                        {
                            System.Windows.MessageBox.Show("Estimado usuario estas empleando una versión muy antigua de Windows, algunas funciones están restringidas, " +
                                                           "tu documento será descargado en el directorio MIS DOCUMENTOS.", "Algunas funciones no están soportadas en tu sistema operativo",
                                                           MessageBoxButton.OK, MessageBoxImage.Information);
                        }
                        else
                        {
                            var resultado = dialog.ShowDialog();
                            if (resultado.HasValue && resultado.Value)
                            {
                                rutaDescarga = dialog.SelectedPath;

                                ProgressDialogResult result = ProgressWindow.Execute(padre, "Procesando...", () => {
                                    foreach (var selected_data_Documento in selected_data_Documentos)
                                    {
                                        var nombreArchivo =
                                            $"{data_Contribuyente.NroDocumento}-{selected_data_Documento.TipoDocumento}-{selected_data_Documento.SerieCorrelativo}";

                                        if (!Directory.Exists($"{rutaDescarga}\\{nombreArchivo}"))
                                        {
                                            Directory.CreateDirectory($"{rutaDescarga}\\{nombreArchivo}");
                                        }

                                        #region PDF
                                        try
                                        {
                                            if (!File.Exists($"{selected_data_Documento.Ruta}\\{nombreArchivo}\\{nombreArchivo}.pdf"))
                                            {
                                                pdfsNoEncontrados += $"{selected_data_Documento.SerieCorrelativo}, ";
                                            }
                                            else
                                            {
                                                File.Copy($"{selected_data_Documento.Ruta}\\{nombreArchivo}\\{nombreArchivo}.pdf",
                                                          $"{rutaDescarga}\\{nombreArchivo}\\{nombreArchivo}.pdf", true);
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            var msg  = string.Concat(ex.InnerException?.Message, ex.Message);
                                            data_Log = new Data_Log()
                                            {
                                                DetalleError   = $"Detalle del error: {msg}",
                                                Comentario     = "Error al leer o guardar PDF de representación impresa",
                                                IdUser_Empresa = data_Usuario.IdUser_Empresa
                                            };
                                            data_Log.Create_Log();
                                        }
                                        #endregion PDF

                                        DataTable datosDocumento =
                                            readGeneralData.GetDataTable("[dbo].[Query_Scalar_GetXml_Documento]", "@IdDocumento", selected_data_Documento.IdDocumento);
                                        DataRow row = datosDocumento.Rows[0];

                                        File.WriteAllBytes($"{rutaDescarga}\\{nombreArchivo}\\{nombreArchivo}.xml", Convert.FromBase64String(row["XmlFirmado"].ToString()));

                                        if (!string.IsNullOrEmpty(row["CdrSunat"].ToString()))
                                        {
                                            File.WriteAllBytes($"{rutaDescarga}\\{nombreArchivo}\\R-{nombreArchivo}.zip", Convert.FromBase64String(row["CdrSunat"].ToString()));
                                        }

                                        datosDocumento.Clear();
                                    }
                                });

                                if (!string.IsNullOrEmpty(pdfsNoEncontrados))
                                {
                                    mensajeFinal = $"El(los) documento(s) xml fueron guardados en :{dialog.SelectedPath} pero no hemos podido encontrar la" +
                                                   $" representación impresa de los siguientes documentos: {pdfsNoEncontrados}";
                                }
                                else
                                {
                                    mensajeFinal = $"El(los) documento(s) fueron guardados en :{dialog.SelectedPath}";
                                }

                                CustomDialogWindow customDialogWindow = new CustomDialogWindow();
                                customDialogWindow.Buttons            = CustomDialogButtons.OK;
                                customDialogWindow.Caption            = "Detalle";
                                customDialogWindow.DefaultButton      = CustomDialogResults.OK;
                                customDialogWindow.InstructionHeading = "Resultados de la descarga del documento(s)";
                                customDialogWindow.InstructionIcon    = CustomDialogIcons.Information;
                                customDialogWindow.InstructionText    = mensajeFinal;
                                CustomDialogResults customDialogResults = customDialogWindow.Show();

                                LoadGrid();
                            }
                        }
                    }
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Debe seleccionar al menos un documento");
                }
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                System.Windows.MessageBox.Show(msg, "Error al descargar los archivos del documento", MessageBoxButton.OK, MessageBoxImage.Error);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al descargar los archivos del documento",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
        }
Example #9
0
        /// <summary>
        /// 迁移数据
        /// </summary>
        /// <param name="db"></param>
        /// <returns></returns>
        public static void AddList(DataContext db, DataTable dt, ref Data_Log log)
        {
            try
            {
                if (db.config.DbType == FastApp.DataDbType.SqlServer)
                {
                    if (DataSchema.GetVersion(db) >= 10)
                    {
                        #region tvps
                        using (var conn = new SqlConnection(db.config.ConnStr))
                        {
                            conn.Open();
                            var cmd = conn.CreateCommand();
                            InitTvps(cmd, dt.TableName);
                            cmd.CommandText = GetTvps(db, dt.TableName);
                            var catParam = cmd.Parameters.AddWithValue(string.Format("@{0}", dt.TableName), dt);
                            catParam.SqlDbType = SqlDbType.Structured;
                            catParam.TypeName  = dt.TableName;

                            log.SuccessCount = cmd.ExecuteNonQuery();
                            if (log.SuccessCount > 0)
                            {
                                log.State = 1;
                            }
                            else
                            {
                                log.State = 0;
                            }
                            log.EndDateTime = DateTime.Now;
                            conn.Close();
                        }
                        #endregion
                    }
                    else
                    {
                        #region SqlBulkCopy
                        using (var conn = new SqlConnection(db.config.ConnStr))
                        {
                            conn.Open();
                            using (var bulk = new SqlBulkCopy(db.config.ConnStr, SqlBulkCopyOptions.UseInternalTransaction))
                            {
                                bulk.DestinationTableName = dt.TableName;
                                bulk.BatchSize            = dt.Rows.Count;
                                bulk.WriteToServer(dt);
                                log.SuccessCount = dt.Rows.Count;
                                log.State        = 1;
                                log.EndDateTime  = DateTime.Now;
                            }
                            conn.Close();
                        }
                        #endregion
                    }
                }

                if (db.config.DbType == FastApp.DataDbType.MySql)
                {
                    #region 拼sql
                    using (var conn = new MySqlConnection(db.config.ConnStr))
                    {
                        conn.Open();
                        var cmd = conn.CreateCommand();
                        cmd.CommandText  = GetMySql(dt, db);
                        log.SuccessCount = cmd.ExecuteNonQuery();
                        if (log.SuccessCount > 0)
                        {
                            log.State = 1;
                        }
                        else
                        {
                            log.State = 0;
                        }

                        log.EndDateTime = DateTime.Now;
                        conn.Close();
                    }
                    #endregion
                }

                if (db.config.DbType == FastApp.DataDbType.Oracle)
                {
                    #region odp.net特性
                    using (var conn = new OracleConnection(db.config.ConnStr))
                    {
                        conn.Open();
                        var cmd = conn.CreateCommand();

                        //关闭日志
                        cmd.CommandText = string.Format("alter table {0} nologging", dt.TableName);
                        cmd.ExecuteNonQuery();

                        cmd.ArrayBindCount = dt.Rows.Count;
                        cmd.BindByName     = true;
                        GetOdpParam(dt, ref cmd, db, dt.TableName);

                        log.SuccessCount = cmd.ExecuteNonQuery();
                        if (log.SuccessCount > 0)
                        {
                            log.State = 1;
                        }
                        else
                        {
                            log.State = 0;
                        }

                        log.EndDateTime = DateTime.Now;

                        //开起日志
                        cmd.CommandText = string.Format("alter table {0} logging", dt.TableName);
                        cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                    #endregion
                }
            }
            catch (Exception ex)
            {
                log.EndDateTime  = DateTime.Now;
                log.SuccessCount = 0;
                log.State        = 0;
                log.ErrorMsg     = ex.StackTrace;
            }
        }
Example #10
0
        /// <summary>
        /// 定时任务同步产品数据
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        public void SynData(object source, ElapsedEventArgs e)
        {
            try
            {
                //防止重复执行
                lock (thisLock)
                {
                    using (var db = new DataContext())
                    {
                        BaseLog.SaveLog("开始抽取", "FastEtlService");

                        //不允许停止服务
                        this.CanStop = false;

                        var list = FastRead.Query <Data_Business>(a => a.Id != null).ToList <Data_Business>(db);

                        foreach (var item in list)
                        {
                            if (DataSchema.IsExistsTable(db, item.TableName) && item.UpdateTime == DateTime.Now.Hour && item.LastUpdateTime.Day + item.UpdateDay >= DateTime.Now.Day)
                            {
                                Parallel.Invoke(() =>
                                {
                                    var leaf = FastRead.Query <Data_Business_Details>(a => a.Id == item.Id).ToList <Data_Business_Details>(db);

                                    if (leaf.Count > 0)
                                    {
                                        var isAdd      = true;
                                        var dt         = DataSchema.GetTable(db, item.TableName);
                                        var columnName = dt.Columns[3].ColumnName.ToLower();

                                        if (leaf.Exists(a => a.FieldName.ToLower() == columnName))
                                        {
                                            DataSchema.ExpireData(db, item);

                                            //第一列
                                            var link     = DataSchema.InitColLink(leaf, db);
                                            var tempLeaf = leaf.Find(a => a.FieldName.ToLower() == columnName);
                                            var pageInfo = DataSchema.GetTableCount(link[0], tempLeaf, item);

                                            for (var i = 1; i <= pageInfo.pageCount; i++)
                                            {
                                                var log           = new Data_Log();
                                                log.Id            = Guid.NewGuid().ToStr();
                                                log.TableName     = string.Format("{0}_page_{1}", item.TableName, i);
                                                log.BeginDateTime = DateTime.Now;

                                                pageInfo.pageId = i;
                                                var pageData    = DataSchema.GetFirstColumnData(link[0], tempLeaf, item, pageInfo);

                                                //遍历填充table
                                                for (var row = 0; row < pageData.list.Count; row++)
                                                {
                                                    var dtRow         = dt.NewRow();
                                                    dtRow["Id"]       = Guid.NewGuid().ToString();
                                                    dtRow["AddTime"]  = DateTime.Now;
                                                    dtRow["Key"]      = pageData.list[row].GetValue("key");
                                                    dtRow[columnName] = pageData.list[row].GetValue("data");

                                                    //字典对照
                                                    if (!string.IsNullOrEmpty(tempLeaf.Dic))
                                                    {
                                                        dtRow[columnName] = FastRead.Query <Data_Dic_Details>(a => a.Value.ToLower() == dtRow[columnName].ToStr().ToLower() && a.DicId == tempLeaf.Dic, a => new { a.ContrastValue }).ToDic(db).GetValue("ContrastValue");
                                                    }

                                                    //数据策略
                                                    isAdd = DataSchema.DataPolicy(db, item, dtRow["Key"], columnName, dtRow[columnName]);

                                                    for (var col = 3; col < dt.Columns.Count; col++)
                                                    {
                                                        columnName = dt.Columns[col].ColumnName.ToLower();
                                                        if (leaf.Exists(a => a.FieldName.ToLower() == columnName))
                                                        {
                                                            tempLeaf          = leaf.Find(a => a.FieldName.ToLower() == columnName);
                                                            dtRow[columnName] = DataSchema.GetColumnData(link[col - 3], tempLeaf, dtRow["Key"]);

                                                            //字典对照
                                                            if (!string.IsNullOrEmpty(tempLeaf.Dic))
                                                            {
                                                                dtRow[columnName] = FastRead.Query <Data_Dic_Details>(a => a.Value.ToLower() == dtRow[columnName].ToStr().ToLower() && a.DicId == tempLeaf.Dic, a => new { a.ContrastValue }).ToDic(db).GetValue("ContrastValue");
                                                            }

                                                            //数据策略
                                                            if (item.Policy == "2")
                                                            {
                                                                isAdd = DataSchema.DataPolicy(db, item, dtRow["Key"], columnName, dtRow[columnName]);
                                                            }
                                                        }
                                                    }

                                                    if (isAdd)
                                                    {
                                                        dt.Rows.Add(dtRow);
                                                    }
                                                }

                                                if (dt.Rows.Count > 0)
                                                {
                                                    DataSchema.AddList(db, dt, ref log);
                                                }
                                                db.Add(log);
                                                dt.Clear();
                                            }

                                            DataSchema.CloseLink(link);
                                            item.LastUpdateTime = DateTime.Now;
                                            FastWrite.Update <Data_Business>(item, a => a.Id == item.Id, a => new { a.LastUpdateTime }, db);
                                        }
                                    }
                                });
                            }
                        }

                        //允许停止服务
                        this.CanStop = true;

                        BaseLog.SaveLog("结束抽取", "FastEtlService");
                    }
                }
            }
            catch (Exception ex)
            {
                BaseLog.SaveLog(ex.ToString(), "FastEtlServiceError");
            }
        }
        public string PostResumen(List <Data_Documentos> data_Documentos)
        {
            string mensajeRespuesta = string.Empty;

            try
            {
                GenerarResumenDiario generarResumenDiario = new GenerarResumenDiario();
                ResumenDiario        resumenDiario        = generarResumenDiario.Data(data_Documentos);
                DocumentoResponse    response             = generarResumenDiario.Post(resumenDiario);

                if (!response.Exito)
                {
                    Data_Log data_Log = new Data_Log()
                    {
                        DetalleError   = response.MensajeError,
                        Comentario     = $"El XML con identificador: {resumenDiario.IdDocumento} no se pudo generar",
                        IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }
                else
                {
                    string rutaArchivo = Path.Combine(data_Documentos[0].Ruta, $"{resumenDiario.IdDocumento}.xml");

                    Firmar          firmar          = new Firmar();
                    FirmadoRequest  firmadoRequest  = firmar.Data(data_Usuario.IdAccesosSunat, response.TramaXmlSinFirma);
                    FirmadoResponse firmadoResponse = firmar.Post(firmadoRequest, true); //  Ya se obtuvo el documento firmado

                    if (firmadoResponse.Exito)                                           //  Comprobamos que se haya firmado de forma correcta
                    {
                        EnviarSunat            enviarSunat            = new EnviarSunat();
                        EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documentos[0], GetURL("03"));
                        string nombreZip = $"{resumenDiario.Emisor.NroDocumento}-{resumenDiario.IdDocumento}";
                        EnviarResumenResponse enviarResumenResponse = enviarSunat.Post_Figurativo(enviarDocumentoRequest, nombreZip);

                        if (enviarResumenResponse.Exito)    // Comprobar envío a sunat
                        {
                            ConsultaConstanciaRequest consultaConstanciaRequest = new ConsultaConstanciaRequest()
                            {
                                Ruc         = enviarDocumentoRequest.Ruc,
                                UsuarioSol  = enviarDocumentoRequest.UsuarioSol,
                                ClaveSol    = enviarDocumentoRequest.ClaveSol,
                                EndPointUrl = " https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService"
                            };
                            Consultar consultar = new Consultar();
                            EnviarDocumentoResponse enviarDocumentoResponse = consultar.Post_Constancia(consultaConstanciaRequest);
                            if (enviarDocumentoResponse.Exito)
                            {
                                mensajeRespuesta = $"El resumen diario ha realizado con éxito, detalle: {enviarDocumentoResponse.MensajeRespuesta}";
                            }
                            else
                            {
                                mensajeRespuesta = "El resumen diario ha realizado con éxito, pero hemos tenido inconvenietes al obtener" +
                                                   " el CDR del documento: " + resumenDiario.IdDocumento + ", probablemente se este empleado el usuario MODDATOS," +
                                                   "para obtener el CDR debes descargarlo de forma manual en la opción 'Consulta de CDR'";
                                data_Log = new Data_Log()
                                {
                                    DetalleError   = mensajeRespuesta,
                                    Comentario     = $"Ha ocurrido un error al generar el CDR del resumen diario: {resumenDiario.IdDocumento}, probablemente se este empleado MODDATOS",
                                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                                };
                                data_Log.Create_Log();
                            }

                            Data_DocumentoFigurativo data_DocumentoFigurativo = new Data_DocumentoFigurativo()
                            {
                                XMLFirmado          = firmadoResponse.TramaXmlFirmado,
                                Tipo                = "Resumen diario",
                                ComentarioDocumento = mensajeRespuesta,
                                Identificador       = resumenDiario.IdDocumento,
                                NumeroTicket        = enviarResumenResponse.NroTicket,
                                CdrSunat            = enviarDocumentoResponse.TramaZipCdr ?? string.Empty
                            };

                            if (!data_DocumentoFigurativo.Create_DocumentoFigurativo())
                            {
                                data_Log = new Data_Log()
                                {
                                    DetalleError   = "Error inesperado en la base de datos",
                                    Comentario     = "Ha ocurrido un error al guardar el registro del resumen diario",
                                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                                };
                                data_Log.Create_Log();
                            }
                            else
                            {
                                Data_DocumentoFigurativo dataUnion_DocumentoFigurativo;
                                Data_Documentos          updateDocumento;
                                foreach (var data_Documento in data_Documentos)
                                {
                                    dataUnion_DocumentoFigurativo = new Data_DocumentoFigurativo()
                                    {
                                        IdDocumentoFigurativo = data_DocumentoFigurativo.SCOPE_IDENTITY_VALUE,
                                        IdDocumento           = data_Documento.IdDocumento
                                    };
                                    if (!dataUnion_DocumentoFigurativo.Create_Figurativo_Documentos())
                                    {
                                        data_Log = new Data_Log()
                                        {
                                            DetalleError = $"Detalle de tablas: Documentos {data_Documento.IdDocumento},{data_Documento.SerieCorrelativo} con la " +
                                                           $"tabla Figurativo_Documentos {data_DocumentoFigurativo.SCOPE_IDENTITY_VALUE}, {data_DocumentoFigurativo.Identificador} ",
                                            Comentario     = "Ha ocurrido un error al guardar el registro del resumen diario, en la tabla de unión",
                                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                                        };
                                        data_Log.Create_Log();
                                    }

                                    updateDocumento = new Data_Documentos()
                                    {
                                        IdDocumento         = data_Documento.IdDocumento,
                                        EnviadoSunat        = true,
                                        EstadoSunat         = "Aceptado",
                                        ComentarioDocumento = $"El documento figura dentro del resumen diario con el código de identificación: {data_DocumentoFigurativo.Identificador}",
                                        ComunicacionBaja    = false,
                                    };
                                    if (!updateDocumento.Update_Documento())
                                    {
                                        data_Log = new Data_Log()
                                        {
                                            DetalleError   = $"No se ha podido actualizar el documento{data_Documento.IdDocumento}, {data_Documento.SerieCorrelativo} para indicar que resumen diario",
                                            Comentario     = "Error en la base de datos",
                                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                                        };
                                        data_Log.Create_Log();
                                    }
                                }
                            }
                        }
                        else
                        {
                            mensajeRespuesta = enviarResumenResponse.MensajeError;
                            data_Log         = new Data_Log()
                            {
                                DetalleError   = enviarResumenResponse.MensajeError,
                                Comentario     = "Error al crear resumen diario",
                                IdUser_Empresa = data_Usuario.IdUser_Empresa
                            };
                            data_Log.Create_Log();
                        }
                    }
                    else
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al procesar el envío del documento",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
                mensajeRespuesta = $"Detalle del error: {msg}";
            }
            return(mensajeRespuesta);
        }
        public void Post(Data_Documentos IE_IdDocumento)    // Ejecución
        {
            try
            {
                string          IdDocumento    = IE_IdDocumento.IdDocumento;
                Data_Documentos data_Documento = new Data_Documentos(IdDocumento);      //  IdDocumento variable global
                data_Documento.Read_Documento();

                GenerarFactura     generarFactura     = new GenerarFactura();
                GenerarNotaCredito generarNotaCredito = new GenerarNotaCredito();
                GenerarNotaDebito  generarNotaDebito  = new GenerarNotaDebito();

                DocumentoElectronico documento;
                DocumentoResponse    response;

                switch (data_Documento.TipoDocumento)
                {
                case "01":      //  Factura y boletas
                    documento = generarFactura.Data(data_Documento);
                    response  = generarFactura.Post(documento, true);
                    break;

                case "07":      //  Nota de crédito
                    documento = generarNotaCredito.data(data_Documento);
                    response  = generarNotaCredito.Post(documento, true);
                    break;

                case "08":      //  Nota de Débito
                    documento = generarNotaDebito.data(data_Documento);
                    response  = generarNotaDebito.Post(documento, true);
                    break;

                default:
                    documento = generarFactura.Data(data_Documento);
                    response  = generarFactura.Post(documento, true);
                    break;
                }

                if (!response.Exito)
                {
                    Data_Log data_Log = new Data_Log()
                    {
                        DetalleError   = response.MensajeError,
                        Comentario     = $"El XML con serie correlativo: {documento.SerieCorrelativo} no se pudo generar",
                        IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }

                string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml");

                Firmar firmar = new Firmar();

                FirmadoRequest firmadoRequest = firmar.Data(data_Usuario.IdAccesosSunat, response.TramaXmlSinFirma);
                //FirmadoResponse firmadoResponse =   await firmar.Post(firmadoRequest);      //  Ya se obtuvo el documento firmado
                FirmadoResponse firmadoResponse = firmar.Post(firmadoRequest, true); //  Ya se obtuvo el documento firmado

                if (firmadoResponse.Exito)                                           //  Comprobamos que se haya firmado de forma correcta
                {
                    Data_Documentos actualizacionXML = new Data_Documentos(IdDocumento)
                    {
                        XmlFirmado = firmadoResponse.TramaXmlFirmado
                    };
                    if (!actualizacionXML.Update_Documento_OneColumn("[dbo].[Update_Documento_SignedXML]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al actualizar el xmlFirmado del documento",
                            Comentario     = "Error con la base de datos",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
                else
                {
                    data_Log = new Data_Log()
                    {
                        DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }

                EnviarSunat enviarSunat = new EnviarSunat();

                EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento,
                                                                                 GetURL(data_Documento.TipoDocumento)); // Obtenemos los datos para EnviarDocumentoRequest

                //EnviarDocumentoResponse enviarDocumentoResponse =   await enviarSunat.Post_Documento(enviarDocumentoRequest);
                EnviarDocumentoResponse enviarDocumentoResponse = enviarSunat.Post_Documento(enviarDocumentoRequest, true);

                if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr))    // Comprobar envío a sunat
                {
                    Data_Documentos actualizacionCDR = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, CdrSunat = enviarDocumentoResponse.TramaZipCdr
                    };
                    if (!actualizacionCDR.Update_Documento_OneColumn("[dbo].[Update_Documento_CDR]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al actualizar el CDR del documento",
                            Comentario     = "Error con la base de datos: [dbo].[Update_Documento_CDR]",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionComentario = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeRespuesta
                    };
                    if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando la recepción del CDR del documento",
                            Comentario     = "No se pudo guardar el CDR",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionEstadoSunat = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, EstadoSunat = "Aceptado"
                    };
                    if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el estado del documento",
                            Comentario     = "No se pudo guardar el estado del documento",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
                else
                {
                    data_Log = new Data_Log()
                    {
                        DetalleError = enviarDocumentoResponse.MensajeError, Comentario = "Error al enviar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();

                    Data_Documentos actualizacionComentario = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeError
                    };
                    if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el error al no poder recibir  el CDR del documento",
                            Comentario     = "No se recibió el CDR",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionEstadoSunat = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, EstadoSunat = "Rechazado"
                    };
                    if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el estado del documento",
                            Comentario     = "No se pudo guardar el estado del documento",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al procesar el envío del documento",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
        }
Example #13
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            try
            {
                while (!stoppingToken.IsCancellationRequested)
                {
                    lock (thisLock)
                    {
                        using (var db = new DataContext(AppEtl.Db))
                        {
                            var tableLink = DataSchema.TableLink(db);
                            BaseLog.SaveLog("开始抽取", "FastEtlService");

                            var list = IFast.Query <Data_Business>(a => a.Id != null).ToList <Data_Business>(db);

                            foreach (var item in list)
                            {
                                var isExec = item.UpdateTime == DateTime.Now.Hour;
                                if (item.UpdateTime == 99)
                                {
                                    isExec = true;
                                }

                                if (DataSchema.IsExistsTable(db, item.TableName) && isExec)
                                {
                                    Parallel.Invoke(() =>
                                    {
                                        var leaf = IFast.Query <Data_Business_Details>(a => a.Id == item.Id).ToList <Data_Business_Details>(db) ?? new List <Data_Business_Details>();

                                        if (leaf.Count > 0 && leaf.Exists(a => a.Key.ToStr() != ""))
                                        {
                                            var isAdd = true;
                                            var dt    = DataSchema.GetTable(tableLink, item.TableName);

                                            var columnName = dt.Columns[2].ColumnName.ToLower();

                                            if (leaf.Exists(a => a.FieldName.ToLower() == columnName))
                                            {
                                                DataSchema.ExpireData(db, item);

                                                //第一列
                                                var link     = DataSchema.InitColLink(leaf, db, IFast);
                                                var tempLeaf = leaf.Find(a => a.FieldName.ToLower() == columnName);
                                                var pageInfo = DataSchema.GetTableCount(tempLeaf, item);

                                                for (var i = 1; i <= pageInfo.pageCount; i++)
                                                {
                                                    var log           = new Data_Log();
                                                    log.Id            = Guid.NewGuid().ToStr();
                                                    log.TableName     = string.Format("{0}_page_{1}", item.TableName, i);
                                                    log.BeginDateTime = DateTime.Now;

                                                    pageInfo.pageId = i;
                                                    var tempLink    = link.Find(a => a.GetValue("id").ToStr() == tempLeaf.DataSourceId);
                                                    var pageData    = DataSchema.GetFirstColumnData(tempLink, tempLeaf, item, pageInfo);

                                                    //遍历填充table
                                                    for (var row = 0; row < pageData.list.Count; row++)
                                                    {
                                                        var dtRow           = dt.NewRow();
                                                        dtRow["EtlAddTime"] = DateTime.Now;
                                                        dtRow["EtlKey"]     = pageData.list[row].GetValue("key");
                                                        dtRow[columnName]   = pageData.list[row].GetValue("data");

                                                        //字典对照
                                                        if (!string.IsNullOrEmpty(tempLeaf.Dic))
                                                        {
                                                            dtRow[columnName] = IFast.Query <Data_Dic_Details>(a => a.Value.ToLower() == dtRow[columnName].ToStr().ToLower() && a.DicId == tempLeaf.Dic, a => new { a.ContrastValue }).ToDic(db).GetValue("ContrastValue");
                                                        }

                                                        //数据策略
                                                        isAdd = DataSchema.DataPolicy(db, item, dtRow["EtlKey"], columnName, dtRow[columnName]);

                                                        for (var col = 2; col < dt.Columns.Count; col++)
                                                        {
                                                            columnName = dt.Columns[col].ColumnName.ToLower();
                                                            if (leaf.Exists(a => a.FieldName.ToLower() == columnName))
                                                            {
                                                                tempLeaf          = leaf.Find(a => a.FieldName.ToLower() == columnName);
                                                                tempLink          = link.Find(a => a.GetValue("id").ToStr() == tempLeaf.DataSourceId);
                                                                dtRow[columnName] = DataSchema.GetColumnData(tempLink, tempLeaf, dtRow["EtlKey"]);

                                                                //字典对照
                                                                if (!string.IsNullOrEmpty(tempLeaf.Dic))
                                                                {
                                                                    dtRow[columnName] = IFast.Query <Data_Dic_Details>(a => a.Value.ToLower() == dtRow[columnName].ToStr().ToLower() && a.DicId == tempLeaf.Dic, a => new { a.ContrastValue }).ToDic(db).GetValue("ContrastValue");
                                                                }

                                                                //数据策略
                                                                if (item.Policy == "2")
                                                                {
                                                                    isAdd = DataSchema.DataPolicy(db, item, dtRow["EtlKey"], columnName, dtRow[columnName]);
                                                                }
                                                            }
                                                        }

                                                        if (isAdd)
                                                        {
                                                            dt.Rows.Add(dtRow);
                                                        }
                                                    }

                                                    if (dt.Rows.Count > 0)
                                                    {
                                                        DataSchema.AddList(db, dt, ref log);
                                                    }
                                                    db.Add(log);
                                                    dt.Clear();
                                                }

                                                DataSchema.CloseLink(link);
                                                item.LastUpdateTime = DateTime.Now;
                                                IFast.Update <Data_Business>(item, a => a.Id == item.Id, a => new { a.LastUpdateTime }, db);
                                            }
                                        }
                                    });
                                }
                            }

                            BaseLog.SaveLog("结束抽取", "FastEtlService");
                            DataSchema.CloseTableLink(tableLink);
                        }
                    }
                    await Task.Delay(1000 * 60 * 30, stoppingToken);
                }
            }
            catch (Exception ex)
            {
                BaseLog.SaveLog(ex.ToString(), "FastEtlServiceError");
            }
        }
        private void btnValidar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                string mensajeFinal     = string.Empty;
                string directorioActual = Directory.GetCurrentDirectory();

                XmlSchemaSet xmlSchemaSet = new XmlSchemaSet();
                //xmlSchemaSet.Add(null, "..\\..\\..\\Common\\Validation\\UBL-Invoice-2.1.xsd");
                xmlSchemaSet.Add(null, "..\\..\\..\\Common\\Validation\\UBL-CreditNote-2.1.xsd");

                Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
                openFileDialog.Multiselect = false;
                openFileDialog.Filter      = "XML de documentos|*.xml|Todos los archivos|*.*";
                openFileDialog.DefaultExt  = "*.xml";
                openFileDialog.Title       = "Selección de XML de documentos electrónicos";

                Nullable <bool> dialogOk = openFileDialog.ShowDialog();
                string          ruta     = string.Empty;

                if (dialogOk == true)
                {
                    ruta = openFileDialog.FileName;
                }

                XDocument document         = XDocument.Load(@ruta);
                bool      validationErrors = false;
                document.Validate(xmlSchemaSet, (s, ev) => { mensajeFinal = ev.Message; validationErrors = true; });

                if (validationErrors)
                {
                    mensajeFinal += mensajeFinal + "errores";
                }
                else
                {
                    mensajeFinal += mensajeFinal + "sin errores";
                }

                CustomDialogWindow customDialogWindow = new CustomDialogWindow();
                customDialogWindow.Buttons            = CustomDialogButtons.OK;
                customDialogWindow.Caption            = "Detalle";
                customDialogWindow.DefaultButton      = CustomDialogResults.OK;
                customDialogWindow.InstructionHeading = "Resultados de la descarga del documento(s)";
                customDialogWindow.InstructionIcon    = CustomDialogIcons.Information;
                customDialogWindow.InstructionText    = mensajeFinal;
                CustomDialogResults customDialogResults = customDialogWindow.Show();
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show($"No se ha podido realizar la inspección del documento mediante XSD, detalle del error{ex}",
                                               "Error inesperado", MessageBoxButton.OK, MessageBoxImage.Error);
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al enviar el documento a sunat desde la interfaz",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
        }
        private async void btnEnviar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                int cantidadAceptados = 0;
                List <Data_Documentos> selected_data_Documentos = new List <Data_Documentos>();
                foreach (var data_Documento in data_Documentos)
                {
                    if (data_Documento.Selectable == true)
                    {
                        selected_data_Documentos.Add(data_Documento);
                    }
                }

                foreach (var selected_data_Documento in selected_data_Documentos)
                {
                    if (selected_data_Documento.EnviadoSunat == true)
                    {
                        cantidadAceptados++;
                    }
                }

                if (selected_data_Documentos.Count() > 0)
                {
                    string enviados     = string.Empty;
                    string noEnviados   = string.Empty;
                    string mensajeFinal = string.Empty;

                    if (cantidadAceptados == 0)
                    {
                        ProgressDialogResult result = ProgressWindow.Execute(padre, "Procesando...", () =>
                        {
                            ProcesarEnvio procesarEnvio = new ProcesarEnvio(data_Usuario);
                            IEnumerable <Data_Documentos> documentosProcesar = selected_data_Documentos.AsEnumerable();
                            Parallel.ForEach(documentosProcesar, (data_Documento) => procesarEnvio.Post(data_Documento));
                        });

                        List <Data_Documentos> selected_data_Documentos_updated = new List <Data_Documentos>();
                        Data_Documentos        documentoUpdated;

                        foreach (var data_Documento in data_Documentos)
                        {
                            if (data_Documento.Selectable == true)
                            {
                                documentoUpdated = new Data_Documentos(data_Documento.IdDocumento);
                                documentoUpdated.Read_Documento();
                                selected_data_Documentos_updated.Add(documentoUpdated);
                            }
                        }

                        foreach (var selected_data_Documento in selected_data_Documentos_updated)
                        {
                            if (selected_data_Documento.EnviadoSunat == true)
                            {
                                enviados += $", {selected_data_Documento.SerieCorrelativo}";
                            }
                            else
                            {
                                noEnviados += $", {selected_data_Documento.SerieCorrelativo}";
                            }
                        }

                        if (string.IsNullOrEmpty(enviados)) //  Ningún enviado, puros rechazados como voz
                        {
                            mensajeFinal = $"No se pudo enviar ningún documento, los documentos rechazados son:\n {noEnviados}";
                        }

                        if (!string.IsNullOrEmpty(enviados) && string.IsNullOrEmpty(noEnviados))    //  Sin ningún documento rechazado
                        {
                            mensajeFinal = $"Se ha enviado a Sunat el(los) documento(s):\n {enviados}";
                        }

                        if (!string.IsNullOrEmpty(enviados) && !string.IsNullOrEmpty(noEnviados))   //  Con al menos un documento rechazado
                        {
                            mensajeFinal = $"Se ha enviado a Sunat el(los) documento(s):\n {enviados} y se han rechazado los siguientes documentos:\n {noEnviados}";
                        }

                        LoadGrid();

                        CustomDialogWindow customDialogWindow = new CustomDialogWindow();
                        customDialogWindow.Buttons            = CustomDialogButtons.OK;
                        customDialogWindow.Caption            = "Mensaje";
                        customDialogWindow.DefaultButton      = CustomDialogResults.OK;
                        customDialogWindow.InstructionHeading = "Resultados del envío a Sunat";
                        customDialogWindow.InstructionIcon    = CustomDialogIcons.Information;
                        customDialogWindow.InstructionText    = mensajeFinal;
                        CustomDialogResults customDialogResults = customDialogWindow.Show();
                    }
                    else
                    {
                        System.Windows.Forms.MessageBox.Show("Estimado usuario, está intentando enviar a Sunat uno o varios documentos que ya fueron aceptados, " +
                                                             "sí desea revisar estos documento(s) selecciónelo y pulse descargar.", "Acción no permitida", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Debe seleccionar al menos un documento", "Ninguna selección detectada", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                System.Windows.MessageBox.Show(msg, "Error al enviar el documento a sunat", MessageBoxButton.OK, MessageBoxImage.Error);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al enviar el documento a sunat desde la interfaz",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
        }
Example #16
0
        private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            if (!string.IsNullOrEmpty(txtCertificadoDigital.Text.ToString().Trim()) && !string.IsNullOrEmpty(txtCertificadoDigitalClave.Password.ToString().Trim()) &&
                !string.IsNullOrEmpty(txtUsuarioSol.Text.ToString().Trim()) && !string.IsNullOrEmpty(txtClaveSol.Password.ToString().Trim()))
            {
                string claveSol           = string.Empty;
                string usuarioSol         = string.Empty;
                string certificadoDigital = string.Empty;
                if (txtUsuarioSol.Text.ToString().Trim().ToUpper().Equals("MODDATOS"))
                {
                    usuarioSol = txtUsuarioSol.Text.ToString().Trim().ToUpper();
                    claveSol   = txtClaveSol.Password.ToString().Trim().ToUpper();
                }
                else
                {
                    usuarioSol = txtUsuarioSol.Text.ToString().Trim();
                    claveSol   = txtClaveSol.Password.ToString().Trim();
                }

                bool errorCertificado = false;
                try
                {
                    certificadoDigital = Convert.ToBase64String(File.ReadAllBytes(txtCertificadoDigital.Text.ToString().Trim()));
                }
                catch (Exception)
                {
                    MessageBox.Show("No se puede leer el certificado digital.", "Archivo irreconosible", MessageBoxButton.OK, MessageBoxImage.Information);
                    errorCertificado = true;
                }

                if (errorCertificado == false)
                {
                    Data_AccesosSunat data_AccesosSunat = new Data_AccesosSunat(IdEmisor)
                    {
                        CertificadoDigital = certificadoDigital,
                        ClaveCertificado   = txtCertificadoDigitalClave.Password.ToString().Trim(),
                        UsuarioSol         = usuarioSol,
                        ClaveSol           = claveSol,
                        IdDatosFox         = Id_DatosFox,
                        IdUsuario          = data_Usuario.IdUsuario
                    };

                    if (data_AccesosSunat.Create_AccesosSunat())
                    {
                        MessageBox.Show("Los datos se han registrado con éxito, para ver los cambios es necesario reiniciar FEICONT.",
                                        "Registro exitoso", MessageBoxButton.OK, MessageBoxImage.Information);
                        try
                        {
                            System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
                            Application.Current.Shutdown();
                            //System.Windows.Forms.Application.Restart();
                        }
                        catch (Exception)
                        {
                            MessageBox.Show("Tenemos problemas para reiniciar, por favor cierre y vuelva a abrir la aplicación.",
                                            "Es necesario reiniciar la aplicación", MessageBoxButton.OK, MessageBoxImage.Information);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ha ocurrido un problema en el registro de datos, contacte con soporte.", "Registro fallido", MessageBoxButton.OK, MessageBoxImage.Error);
                        Data_Log data_Log = new Data_Log()
                        {
                            DetalleError   = $"No se registro el usuario",
                            Comentario     = "Ha ocurrido un problema en el registro de datos",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
            }
            else
            {
                MessageBox.Show("Antes de continuar debe rellenar todos los campos.", "Campos en blanco", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
        }
Example #17
0
        public async void Post(Data_Documentos IE_IdDocumento)
        {
            //var task = Task.Factory.StartNew(async () =>
            //{
            try
            {
                string IdDocumento = IE_IdDocumento.IdDocumento;

                // var taskfactory etc etc pero para despues "20186C16-C1DC-4717-8F46-407447D225BC"
                Data_Documentos data_Documento = new Data_Documentos(IdDocumento);          //  IdDocumento variable global
                data_Documento.Read_Documento();

                GenerarFactura generarFactura = new GenerarFactura();

                DocumentoElectronico documento = generarFactura.data(data_Documento);           //  CAMBIAR A ASINCRONO AL FINALIZAR EL DESARROLLO\

                var response = await generarFactura.Post(documento);                            //await

                if (!response.Exito)
                {
                    Data_Log data_Log = new Data_Log()
                    {
                        DetalleError   = response.MensajeError,
                        Comentario     = $"El XML con serie correlativo: {documento.SerieCorrelativo} no se pudo generar",
                        IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }

                string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml");

                Firmar firmar = new Firmar();

                FirmadoRequest  firmadoRequest  = firmar.Data(data_Documento.IdEmisor, response.TramaXmlSinFirma);
                FirmadoResponse firmadoResponse = await firmar.Post(firmadoRequest); //  Ya se obtuvo el documento firmado

                if (firmadoResponse.Exito)                                           //  Comprobamos que se haya firmado de forma correcta
                {
                    Data_Documentos actualizacionXML = new Data_Documentos(IdDocumento)
                    {
                        XmlFirmado = firmadoResponse.TramaXmlFirmado
                    };
                    if (!actualizacionXML.Update_Documento_OneColumn("[dbo].[Update_Documento_SignedXML]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al actualizar el xmlFirmado del documento",
                            Comentario     = "Error con la base de datos",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
                else
                {
                    data_Log = new Data_Log()
                    {
                        DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();
                }

                EnviarSunat enviarSunat = new EnviarSunat();

                EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento,
                                                                                 GetURL(data_Documento.TipoDocumento)); // Obtenemos los datos para EnviarDocumentoRequest

                EnviarDocumentoResponse enviarDocumentoResponse = await enviarSunat.Post_Documento(enviarDocumentoRequest);

                if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr))        // Comprobar envío a sunat
                {
                    Data_Documentos actualizacionCDR = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, CdrSunat = enviarDocumentoResponse.TramaZipCdr
                    };
                    if (!actualizacionCDR.Update_Documento_OneColumn("[dbo].[Update_Documento_CDR]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al actualizar el CDR del documento",
                            Comentario     = "Error con la base de datos: [dbo].[Update_Documento_CDR]",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionComentario = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeRespuesta
                    };
                    if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando la recepción del CDR del documento",
                            Comentario     = "No se pudo guardar el CDR",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionEstadoSunat = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, EstadoSunat = "Aceptado"
                    };
                    if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el estado del documento",
                            Comentario     = "No se pudo guardar el estado del documento",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
                else
                {
                    data_Log = new Data_Log()
                    {
                        DetalleError = enviarDocumentoResponse.MensajeError, Comentario = "Error al enviar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa
                    };
                    data_Log.Create_Log();

                    Data_Documentos actualizacionComentario = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeError
                    };
                    if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el error al no poder recibir  el CDR del documento",
                            Comentario     = "No se recibió el CDR",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }

                    Data_Documentos actualizacionEstadoSunat = new Data_Documentos()
                    {
                        IdDocumento = IdDocumento, EstadoSunat = "Rechazado"
                    };
                    if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]"))
                    {
                        data_Log = new Data_Log()
                        {
                            DetalleError   = "Error al guardar el comentario notificando el estado del documento",
                            Comentario     = "No se pudo guardar el estado del documento",
                            IdUser_Empresa = data_Usuario.IdUser_Empresa
                        };
                        data_Log.Create_Log();
                    }
                }
            }
            catch (Exception ex)
            {
                var msg = string.Concat(ex.InnerException?.Message, ex.Message);
                data_Log = new Data_Log()
                {
                    DetalleError   = $"Detalle del error: {msg}",
                    Comentario     = "Error al procesar el envío del documento",
                    IdUser_Empresa = data_Usuario.IdUser_Empresa
                };
                data_Log.Create_Log();
            }
            //});
            //return task;
        }