/// <summary> /// Determines if a charge should be reduced based on registration date /// </summary> /// <param name="fechaAfiliacion">Registration date</param> /// <returns>True if price should be reduced</returns> private bool IncompleteCharge(DateTime?fechaAfiliacion) { if (!fechaAfiliacion.HasValue) { throw (new Exception("Error, variable nula")); } return(fechaAfiliacion.Value.Month == DateManager.GetMonthNumber() && fechaAfiliacion.Value.Year == DateManager.GetToday().Year); }
/// <summary> /// Searches for relevant information /// </summary> private void Consultar() { Clean(); List <Cargo> cargos = null; if (this.YearsBox.SelectedItem is null || this.Meses.SelectedItem is null || this.Nodos.SelectedItem is null) { SystemSounds.Beep.Play(); MessageBox.Show("Seleccione un valor valido!", Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); return; } string year = this.YearsBox.SelectedItem.ToString(); string month = this.Meses.SelectedItem.ToString(); string nodo = this.Nodos.SelectedItem.ToString(); int yearInt, mesInt = DateManager.GetMonthNumber(month), nodoInt; if (String.IsNullOrEmpty(nodo) || String.IsNullOrEmpty(month) || String.IsNullOrEmpty(year)) { SystemSounds.Beep.Play(); MessageBox.Show("Busqueda no valida!", Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (!(Int32.TryParse(year, out yearInt))) { SystemSounds.Beep.Play(); MessageBox.Show("Error!", Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); return; } try { if (month == "TODOS") { if (nodo == "TODOS") { new Thread(() => { Thread.CurrentThread.IsBackground = true; cargos = BDManager.GetCargosBasedOn(yearInt); Calcular(cargos); }).Start(); } else { if (Int32.TryParse(nodo, out nodoInt)) { new Thread(() => { Thread.CurrentThread.IsBackground = true; cargos = BDManager.GetCargosBasedOn(yearInt, 0, nodoInt); Calcular(cargos); }).Start(); } else { SystemSounds.Beep.Play(); MessageBox.Show("Error!", Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); return; } } } else if (nodo == "TODOS") { new Thread(() => { Thread.CurrentThread.IsBackground = true; cargos = BDManager.GetCargosBasedOn(yearInt, mesInt); Calcular(cargos); }).Start(); } else { if (Int32.TryParse(nodo, out nodoInt)) { new Thread(() => { Thread.CurrentThread.IsBackground = true; cargos = BDManager.GetCargosBasedOn(yearInt, mesInt, nodoInt); Calcular(cargos); }).Start(); } else { SystemSounds.Beep.Play(); MessageBox.Show("Error!", Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); return; } } } catch (Exception) { SystemSounds.Beep.Play(); MessageBox.Show("Error", Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); } }
/// <summary> /// Generates Recibos de caja. /// </summary> /// <param name="items">It is a pair of values</param> /// <param name="type">The type of recibo de caja</param> /// <returns>True if files were generated succesfully</returns> public override bool GenerateFiles(List <Tuple <Factura, Customer> > items, string type, object sender, System.Windows.Controls.TextBlock text) { for (int i = 0; i < items.Count; ++i) { //Change current operation description base.UpdateCurrentOperationDescription("Proceso iniciado " + (i + 1) + "/" + items.Count); text.Dispatcher.Invoke(delegate { text.Text = CurrentOperationDescription; }); string concepto = String.Empty; int ct = 0; foreach (Cargo cargo in items.ElementAt(i).Item1.cargos) { concepto += cargo.Concepto.ToString().ToUpper(); concepto += new StringBuilder(" ").Append(cargo.MesCargado.ToString().ToUpper()); if (!(items.ElementAt(i).Item1.cargos.Count - 1 == ct++)) { concepto += "-"; } } using (ExcelPackage xlPackage = new ExcelPackage(new System.IO.FileInfo(@UserPreferences.GetRecibosLocation()))) { //Change current operation description base.UpdateCurrentOperationDescription("Obteniendo directorio"); text.Dispatcher.Invoke(delegate { text.Text = CurrentOperationDescription; }); StringBuilder DirectoryLocation = new StringBuilder(UserPreferences.GetPreferredLocation()).Append(@"\").Append(type); var directoryInfo = System.IO.Directory.CreateDirectory(@DirectoryLocation.ToString()); //Change Current Operation Description base.UpdateCurrentOperationDescription("Generando nombres de archivo"); text.Dispatcher.Invoke(delegate { text.Text = CurrentOperationDescription; }); StringBuilder FileLocationXlsx = new StringBuilder(directoryInfo.FullName).Append(@"\").Append(items.ElementAt(i).Item1.NumeroFactura).Append(FileExtensions.ExcelFormat); StringBuilder FileLocationPDF = new StringBuilder(directoryInfo.FullName).Append(@"\").Append(items.ElementAt(i).Item1.NumeroFactura).Append(FileExtensions.PDFFormat); try { var worksheet = xlPackage.Workbook.Worksheets.First(); var totalRows = worksheet.Dimension.End.Row; var totalColumns = worksheet.Dimension.End.Column; //Change Current Operation Description base.UpdateCurrentOperationDescription("Escaneando plantilla"); text.Dispatcher.Invoke(delegate { text.Text = CurrentOperationDescription; }); int count = 0; for (int rowNum = 1; rowNum <= totalRows; ++rowNum) { for (int colNum = 1; colNum <= totalColumns; ++colNum) { var row = worksheet.Cells[rowNum, colNum].Select(c => c.Value == null ? String.Empty : c.Value.ToString()); string cellValue = String.Join(",", row); if (cellValue == RecibosKeyWords.NUMERORECIBO) { int numero_recibo = UserPreferences.GetNumeroRecibo(); worksheet.Cells[rowNum, colNum].Value = new StringBuilder("#").Append(numero_recibo).ToString(); UserPreferences.SaveNumeroRecibo(++numero_recibo); } if (cellValue == RecibosKeyWords.NOMBRES) { worksheet.Cells[rowNum, colNum].Value = new StringBuilder(items.ElementAt(i).Item2.Nombre).Append(" ").Append(items.ElementAt(i).Item2.Apellido).ToString(); } if (cellValue == RecibosKeyWords.FECHA) { worksheet.Cells[rowNum, colNum].Value = DateManager.GetDateInSpanish(); } if (cellValue == RecibosKeyWords.CEDULA) { worksheet.Cells[rowNum, colNum].Value = items.ElementAt(i).Item2.Cedula; } if (cellValue == RecibosKeyWords.DIRECCION) { worksheet.Cells[rowNum, colNum].Value = items.ElementAt(i).Item2.Direccion; } if (cellValue == RecibosKeyWords.BARRIO) { worksheet.Cells[rowNum, colNum].Value = items.ElementAt(i).Item2.Barrio; } if (cellValue == RecibosKeyWords.CONCEPTO) { worksheet.Cells[rowNum, colNum].Value = concepto; } if (cellValue == RecibosKeyWords.NODO) { worksheet.Cells[rowNum, colNum].Value = items.ElementAt(i).Item2.Nodo; } if (cellValue == RecibosKeyWords.TELEFONO) { worksheet.Cells[rowNum, colNum].Value = items.ElementAt(i).Item2.Telefono; } if (cellValue == RecibosKeyWords.MES) { worksheet.Cells[rowNum, colNum].Value = DateManager.GetMonthInSpanish(); } if (cellValue == RecibosKeyWords.VALOR) { string valorToDisplay = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", Valor); worksheet.Cells[rowNum, colNum].Value = valorToDisplay; } //Change progress value int newProgress = (int)((((float)(++count) / (float)(totalRows * totalColumns)) * (1.0f / (float)items.Count)) * 100); base.UpdateProgreso(newProgress); (sender as BackgroundWorker).ReportProgress(Progress); } } //Change Current Operation Description base.UpdateCurrentOperationDescription("Generando archivo PDF"); text.Dispatcher.Invoke(delegate { text.Text = CurrentOperationDescription; }); xlPackage.SaveAs(new System.IO.FileInfo(@FileLocationXlsx.ToString())); Workbook workbook = new Application().Workbooks.Open(@FileLocationXlsx.ToString()); workbook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, @FileLocationPDF.ToString()); workbook.Close(); } catch (Exception) { RollBack(FileLocationXlsx.ToString(), FileLocationPDF.ToString()); throw; } finally { File.Delete(@FileLocationXlsx.ToString()); } } } base.UpdateProgreso(100); (sender as BackgroundWorker).ReportProgress(Progress); return(true); }
/// <summary> /// Creates a customer based on input data /// </summary> private void CreateCustomer() { String cedula, nombre, apellido, telefono, celular, correo, direccion, barrio, mac, precinto; int nodo, megas, saldo, descuento; bool internet, tv; DateTime?fechaAfiliacionTv, fechaAfiliacionInternet; Estado estadoTv, estadoInternet; cedula = this.CedulaText.Text != string.Empty ? this.CedulaText.Text.Trim() : null; nombre = this.NombresText.Text != String.Empty ? this.NombresText.Text.Trim() : null; apellido = this.ApellidosText.Text != String.Empty ? this.ApellidosText.Text.Trim() : null; telefono = this.TelefonoText.Text != String.Empty ? this.TelefonoText.Text.Trim() : null; celular = this.CelularText.Text != String.Empty ? this.CelularText.Text.Trim() : null; correo = this.CorreoText.Text != String.Empty ? this.CorreoText.Text.Trim() : null; direccion = this.DireccionText.Text != String.Empty ? this.DireccionText.Text.Trim() : null; barrio = this.BarrioBox.Text != String.Empty ? this.BarrioBox.Text : null; mac = this.MACText.Text != String.Empty ? this.MACText.Text.Trim() : null; precinto = this.PrecintoText.Text != String.Empty ? this.PrecintoText.Text.Trim() : null; nodo = Int32.TryParse(this.NodoBox.Text.Trim(), out nodo) ? nodo : -1; megas = Int32.TryParse(this.MegasBox.Text.Trim(), out megas) ? megas : -1; descuento = Int32.TryParse(this.DescuentoText.Text.Trim(), out descuento) ? descuento : 0; internet = this.InternetRadioButton.IsChecked ?? false; tv = this.TelevisionRadioButton.IsChecked ?? false; fechaAfiliacionTv = null; fechaAfiliacionInternet = null; estadoTv = Estado.Pendiente; estadoInternet = Estado.Pendiente; saldo = 0; if (cedula == null) { SystemSounds.Beep.Play(); MessageBox.Show(Messages.InputRequirements.CedulaIsAMandatoryField, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (nombre == null) { SystemSounds.Beep.Play(); MessageBox.Show(Messages.InputRequirements.NombreIsAMandatoryField, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (apellido == null) { SystemSounds.Beep.Play(); MessageBox.Show(Messages.InputRequirements.ApellidoIsAMandatoryField, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (direccion == null) { SystemSounds.Beep.Play(); MessageBox.Show(Messages.InputRequirements.DireccionIsAMandatoryField, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (barrio == null) { SystemSounds.Beep.Play(); MessageBox.Show(Messages.InputRequirements.BarrioIsAMandatoryField, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (nodo == -1) { SystemSounds.Beep.Play(); MessageBox.Show(Messages.InputRequirements.NodoIsAMandatoryField, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (megas == -1) { SystemSounds.Beep.Play(); MessageBox.Show(Messages.InputRequirements.MegasIsAMandatoryField, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (!(internet || tv)) { SystemSounds.Beep.Play(); MessageBox.Show(Messages.InputRequirements.AtLeastOneServiceMustBeProvided, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (megas != 0 && !internet) { SystemSounds.Beep.Play(); MessageBox.Show(Messages.InputRequirements.MegasOnlyApplyForInternetService, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } Customer customer = new Customer(cedula, nombre, apellido, telefono, celular, correo, direccion, barrio, mac, precinto, nodo, megas, saldo, descuento, tv, internet, fechaAfiliacionTv, fechaAfiliacionInternet, estadoTv, estadoInternet); StringBuilder numeroFactura = new StringBuilder(cedula).Append("-").Append(TypeOfRecibos.AFILIACION).Append("-").Append(DateManager.GetDateInSpanish()); List <Cargo> cargos = new List <Cargo>(); Cargo cargo = new Cargo(UserPreferences.GetAfiliacionValue(), UserPreferences.GetAfiliacionValue(), Concepto.Afiliacion); cargos.Add(cargo); Factura factura = new Factura(numeroFactura.ToString(), DateManager.GetToday(), null, null, cargos, customer.Cedula); RecibosManager RecibosManager = new RecibosManager(); Tuple <Factura, Customer> pair = new Tuple <Factura, Customer>(factura, customer); List <Tuple <Factura, Customer> > info = new List <Tuple <Factura, Customer> >(); info.Add(pair); try { RecibosManager.Valor = cargo.Valor; LoadingWindow loadingWindow = new LoadingWindow(); loadingWindow.Show(); loadingWindow.StartWorking((object sender, DoWorkEventArgs e) => { RecibosManager.GenerateFiles(info, TypeOfRecibos.AFILIACION, sender, loadingWindow.Status); try { if (BDManager.CreateCustomerWithInitialFinancialInformation(customer, factura, cargo)) { this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show(Messages.SuccesfulOperation.customerWasSuccesfullyCreated, Messages.Titles.Success, MessageBoxButton.OK, MessageBoxImage.Information); Clean(); }); } } catch (MySqlException ex) { if (ex.Number == (int)MySqlErrorCode.DuplicateKeyEntry) { this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show(Messages.Errors.CustomerAlreadyExists, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); }); } else if (ex.Number == (int)MySqlErrorCode.DataTooLong) { this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show("Uno de los campos no es valido. La informacion es demasiado larga!", Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); }); } else { this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show(Messages.Errors.setErrorCodeMessage(ex.Number.ToString()), Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); }); } } } ); } catch (Exception) { this.Dispatcher.Invoke(delegate { SystemSounds.Beep.Play(); MessageBox.Show(Messages.Errors.CouldntReadFile, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); }); } }
/// <summary> /// Creates a single invoice /// </summary> /// <param name="customer">Customer associated with the invoice</param> /// <returns>A invoice object</returns> private Factura CreateInvoice(Customer customer) { StringBuilder numeroFactura = new StringBuilder(customer.Cedula).Append("-").Append(TypeOfRecibos.MENSUALIDAD).Append("-").Append(DateManager.GetMonthInSpanish()).Append("-").Append(DateManager.GetToday().Year); DateTime fecha = DateManager.GetToday(); Mes mesCargado = DateManager.GetMonth(); DateTime fechaLimite; List <Cargo> cargos = new List <Cargo>(); if (customer.HasTV && customer.HasInternet) { fechaLimite = DateManager.GetDateLimit(false); if (customer.EstadoTV == Estado.Pendiente || customer.EstadoInternet == Estado.Pendiente) { return(null); } else { //No pending int internet = 0, tv = 0; switch (customer.Megas) { case 3: (tv, internet) = UserPreferences.GetCombo3(); break; case 5: (tv, internet) = UserPreferences.GetCombo5(); break; case 7: (tv, internet) = UserPreferences.GetCombo7(); break; case 10: (tv, internet) = UserPreferences.GetCombo10(); break; } internet -= customer.Descuento; if (IncompleteCharge(customer.FechaAfiliacionInternet)) { Calculadora.CalcularPrecioRealBasadoEnDias(ref internet, 30 - DateManager.GetToday().Day); } if (IncompleteCharge(customer.FechaAfiliacionTV)) { if (DateManager.GetToday().Day < 16) { Calculadora.CalcularPrecioRealBasadoEnDias(ref tv, 30 - DateManager.GetToday().Day); } else { tv = 0; } } Cargo cargoTV = new Cargo(tv, 0, Concepto.TV); Cargo cargoInternet = new Cargo(internet, 0, Concepto.Internet); cargos.Add(cargoTV); cargos.Add(cargoInternet); AddPreviousCharges(customer.Cedula, cargos); return(new Factura(numeroFactura.ToString(), fecha, fechaLimite, mesCargado, cargos, customer.Cedula)); } } else if (customer.HasInternet) { if (customer.EstadoInternet == Estado.Pendiente) { return(null); } fechaLimite = DateManager.GetDateLimit(false); int internet = 0; switch (customer.Megas) { case 3: internet = UserPreferences.Get3MegasValue(); break; case 5: internet = UserPreferences.Get5MegasValue(); break; case 7: internet = UserPreferences.Get7MegasValue(); break; case 10: internet = UserPreferences.Get10MegasValue(); break; } internet -= customer.Descuento; if (IncompleteCharge(customer.FechaAfiliacionInternet)) { Calculadora.CalcularPrecioRealBasadoEnDias(ref internet, 30 - DateManager.GetToday().Day); } Cargo cargoInternet = new Cargo(internet, 0, Concepto.Internet); cargos.Add(cargoInternet); AddPreviousCharges(customer.Cedula, cargos); return(new Factura(numeroFactura.ToString(), fecha, fechaLimite, mesCargado, cargos, customer.Cedula)); } else if (customer.HasTV) { if (customer.EstadoTV == Estado.Pendiente) { return(null); } fechaLimite = DateManager.GetDateLimit(true); int tv = UserPreferences.GetTVValue(); if (IncompleteCharge(customer.FechaAfiliacionTV)) { if (DateManager.GetToday().Day < 16) { Calculadora.CalcularPrecioRealBasadoEnDias(ref tv, 30 - DateManager.GetToday().Day); } else { tv = 0; } } Cargo cargoTV = new Cargo(tv, 0, Concepto.TV); cargos.Add(cargoTV); AddPreviousCharges(customer.Cedula, cargos); return(new Factura(numeroFactura.ToString(), fecha, fechaLimite, mesCargado, cargos, customer.Cedula)); } else { if (customer.Saldo == 0) { return(null); } //If program hits this part, it means customer has no services but it owes money fechaLimite = DateManager.GetDateLimit(true); } //Get previous charges AddPreviousCharges(customer.Cedula, cargos); return(new Factura(numeroFactura.ToString(), fecha, fechaLimite, mesCargado, cargos, customer.Cedula)); }
/// <summary> /// Adds other charges to a customer /// </summary> private void AddOtros() { Customer customer = this.ListViewCustomers.SelectedItem as Customer; List <Cargo> cargos = new List <Cargo>(); SystemSounds.Beep.Play(); var r = MessageBox.Show("¿Esta seguro de que desea generar un cargo por otros para el cliente con cedula " + customer.Cedula + " ?", "Informacion", MessageBoxButton.YesNo, MessageBoxImage.Question); if ((r == MessageBoxResult.Yes)) { string numeroFactura = new StringBuilder(customer.Cedula).Append("-").Append(TypeOfRecibos.OTROS).Append("-").Append(DateManager.GetDateInSpanish()).ToString(); string ans = Microsoft.VisualBasic.Interaction.InputBox("Digite el valor del cargo", "Cargo"); if (Int32.TryParse(ans, out int pago)) { Cargo cargo = new Cargo(pago, pago, Concepto.Otros); cargos.Add(cargo); Factura factura = new Factura(numeroFactura, DateManager.GetToday(), null, null, cargos, customer.Cedula); RecibosManager recibosManager = new RecibosManager(); Tuple <Factura, Customer> pair = new Tuple <Factura, Customer>(factura, customer); List <Tuple <Factura, Customer> > info = new List <Tuple <Factura, Customer> >(); info.Add(pair); try { recibosManager.Valor = cargo.Valor; LoadingWindow loadingWindow = new LoadingWindow(); loadingWindow.Show(); loadingWindow.StartWorking((object sender, DoWorkEventArgs e) => { recibosManager.GenerateFiles(info, TypeOfRecibos.OTROS, sender, loadingWindow.Status); try { if (BDManager.AddChargeSimple(factura)) { this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show("Cargo generado exitosamente!", Messages.Titles.Success, MessageBoxButton.OK, MessageBoxImage.Information); }); } } catch (MySqlException ex) { this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show(Messages.Errors.setErrorCodeMessage(ex.Number.ToString()), Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); }); } catch (Exception ex) { this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show(ex.Message, Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); }); } } ); } catch (Exception) { this.Dispatcher.Invoke(delegate { SystemSounds.Beep.Play(); MessageBox.Show(Messages.Errors.CouldntReadFile, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); }); } } else { SystemSounds.Beep.Play(); MessageBox.Show("Valor no valido!", Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); } } }
/// <summary> /// Adds a traslado to a customer /// </summary> private void AddTraslado() { Customer customer = this.ListViewCustomers.SelectedItem as Customer; List <Cargo> cargos = new List <Cargo>(); SystemSounds.Beep.Play(); var r = MessageBox.Show("¿Esta seguro de que desea generar un traslado para el cliente con cedula " + customer.Cedula + " ?", "Informacion", MessageBoxButton.YesNo, MessageBoxImage.Question); if ((r == MessageBoxResult.Yes)) { string numeroFactura = new StringBuilder(customer.Cedula).Append("-").Append(TypeOfRecibos.TRASLADO).Append("-").Append(DateManager.GetDateInSpanish()).ToString(); int traslado_value = UserPreferences.GetTrasladoValue(); Cargo cargo = new Cargo(traslado_value, traslado_value, Concepto.Traslado); cargos.Add(cargo); Factura factura = new Factura(numeroFactura, DateManager.GetToday(), null, null, cargos, customer.Cedula); RecibosManager recibosManager = new RecibosManager(); Tuple <Factura, Customer> pair = new Tuple <Factura, Customer>(factura, customer); List <Tuple <Factura, Customer> > info = new List <Tuple <Factura, Customer> >(); info.Add(pair); try { recibosManager.Valor = cargo.Valor; LoadingWindow loadingWindow = new LoadingWindow(); loadingWindow.Show(); loadingWindow.StartWorking((object sender, DoWorkEventArgs e) => { recibosManager.GenerateFiles(info, TypeOfRecibos.TRASLADO, sender, loadingWindow.Status); try { if (BDManager.AddChargeSimple(factura)) { this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show("Traslado generado exitosamente!", Messages.Titles.Success, MessageBoxButton.OK, MessageBoxImage.Information); }); } } catch (MySqlException ex) { this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show(Messages.Errors.setErrorCodeMessage(ex.Number.ToString()), Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); }); } catch (Exception ex) { this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show(ex.Message, Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); }); } } ); } catch (Exception) { this.Dispatcher.Invoke(delegate { SystemSounds.Beep.Play(); MessageBox.Show(Messages.Errors.CouldntReadFile, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); }); } } }
/// <summary> /// Updates the state of a service /// </summary> /// <param name="customer"></param> /// <param name="estado"></param> /// <param name="service"></param> /// <param name="updateDate"></param> private void UpdateServiceStatus(Customer customer, Estado estado, string service, bool updateDate) { new Thread(() => { Thread.CurrentThread.IsBackground = true; SystemSounds.Beep.Play(); try { if (updateDate) { if (BDManager.UpdateCustomerEstado(customer.Cedula, service, estado, true, DateManager.GetToday())) { MessageBox.Show("Cliente actualizado!", Messages.Titles.Success, MessageBoxButton.OK, MessageBoxImage.Information); } else { MessageBox.Show("Error al actualizar el cliente!", Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Error); return; } } else { if (BDManager.UpdateCustomerEstado(customer.Cedula, service, estado, false)) { MessageBox.Show("Cliente actualizado!", Messages.Titles.Success, MessageBoxButton.OK, MessageBoxImage.Information); } else { MessageBox.Show("Error al actualizar el cliente!", Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Error); return; } } } catch (Exception) { SystemSounds.Beep.Play(); MessageBox.Show("Error!", Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); return; } foreach (Customer _customer in Customers) { if (_customer.Cedula == customer.Cedula) { if (service == "estadoTV") { if (updateDate) { _customer.FechaAfiliacionTV = DateManager.GetToday(); } _customer.EstadoTV = estado; } else { if (updateDate) { _customer.FechaAfiliacionInternet = DateManager.GetToday(); } _customer.EstadoInternet = estado; } break; } } this.ListViewCustomers.Dispatcher.Invoke(delegate { ICollectionView view = CollectionViewSource.GetDefaultView(this.ListViewCustomers.ItemsSource); view.Refresh(); }); }).Start(); }
/// <summary> /// Generates Invoices /// </summary> /// <param name="items">It is a pair of values in which none can be null</param> /// <param name="type">The type of invoices</param> /// <returns>True if files were generated succesfully</returns> public override bool GenerateFiles(List <Tuple <Factura, Customer> > items, string type, object sender, System.Windows.Controls.TextBlock text) { for (int i = 0; i < items.Count; ++i) { int total = 0; foreach (Cargo cargo in items.ElementAt(i).Item1.cargos) { total += cargo.Valor; } //Change Current Operation Description base.UpdateCurrentOperationDescription("Proceso iniciado: " + (i + 1) + "/" + items.Count); text.Dispatcher.Invoke(delegate { text.Text = CurrentOperationDescription; }); using (ExcelPackage xlPackage = new ExcelPackage(new System.IO.FileInfo(@UserPreferences.GetFacturasLocation()))) { //Change Current Operation Description base.UpdateCurrentOperationDescription("Obteniendo directorio"); text.Dispatcher.Invoke(delegate { text.Text = CurrentOperationDescription; }); StringBuilder DirectoryLocation = new StringBuilder(UserPreferences.GetPreferredLocation()).Append(@"\").Append(type).Append(@"\").Append(DateManager.GetMonthInSpanish().ToUpper()); var directoryInfo = System.IO.Directory.CreateDirectory(@DirectoryLocation.ToString()); //Change Current Operation Description base.UpdateCurrentOperationDescription("Generando nombres de archivo"); text.Dispatcher.Invoke(delegate { text.Text = CurrentOperationDescription; }); StringBuilder FileLocationXlsx = new StringBuilder(directoryInfo.FullName).Append(@"\").Append(items.ElementAt(i).Item1.NumeroFactura).Append(FileExtensions.ExcelFormat); StringBuilder FileLocationPDF = new StringBuilder(directoryInfo.FullName).Append(@"\").Append(items.ElementAt(i).Item1.NumeroFactura).Append(FileExtensions.PDFFormat); if (File.Exists(FileLocationPDF.ToString())) { continue; } try { var worksheet = xlPackage.Workbook.Worksheets.First(); var totalRows = worksheet.Dimension.End.Row; var totalColumns = worksheet.Dimension.End.Column; //Change Current Operation Description base.UpdateCurrentOperationDescription("Escaneando plantilla"); text.Dispatcher.Invoke(delegate { text.Text = CurrentOperationDescription; }); for (int rowNum = 1; rowNum <= totalRows; ++rowNum) { for (int colNum = 1; colNum <= totalColumns; ++colNum) { var row = worksheet.Cells[rowNum, colNum].Select(c => c.Value == null ? String.Empty : c.Value.ToString()); string cellValue = String.Join(",", row); if (cellValue == FacturasKeyWords.CEDULA) { worksheet.Cells[rowNum, colNum].Value = items.ElementAt(i).Item2.Cedula; } if (cellValue == FacturasKeyWords.NOMBRES) { worksheet.Cells[rowNum, colNum].Value = new StringBuilder(items.ElementAt(i).Item2.Nombre).Append(" ").Append(items.ElementAt(i).Item2.Apellido).ToString(); } if (cellValue == FacturasKeyWords.BARRIO) { worksheet.Cells[rowNum, colNum].Value = items.ElementAt(i).Item2.Barrio; } if (cellValue == FacturasKeyWords.DIRECCION) { worksheet.Cells[rowNum, colNum].Value = items.ElementAt(i).Item2.Direccion; } if (cellValue == FacturasKeyWords.FECHA) { worksheet.Cells[rowNum, colNum].Value = DateManager.GetDateInSpanish(items.ElementAt(i).Item1.Fecha); } if (cellValue == FacturasKeyWords.FECHADEPAGO) { worksheet.Cells[rowNum, colNum].Value = DateManager.GetDateInSpanish(items.ElementAt(i).Item1.FechaLimite.Value); } if (cellValue == FacturasKeyWords.TOTAL) { string valorToDisplay = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", total); worksheet.Cells[rowNum, colNum].Value = valorToDisplay; } //Adjusts charges int j = 0; foreach (Cargo cargo in items.ElementAt(i).Item1.cargos) { //Avoid index out of range if (j == FacturasKeyWords.SIZEOFCARGO) { break; } if (cellValue == FacturasKeyWords.CONCEPTO.ElementAt(j)) { worksheet.Cells[rowNum, colNum].Value = cargo.Concepto.ToString().ToUpper(); } if (cellValue == FacturasKeyWords.PERIODO.ElementAt(j)) { if (cargo.MesCargado is null) { worksheet.Cells[rowNum, colNum].Value = DateManager.GetMonthInSpanish((int)items.ElementAt(i).Item1.MesCargado + 1); } else { worksheet.Cells[rowNum, colNum].Value = cargo.MesCargado.ToString().ToUpper(); } } if (cellValue == FacturasKeyWords.VALOR.ElementAt(j)) { int valorSinIva = cargo.Valor; if (cargo.Concepto == Concepto.TV) { Calculadora.CalcularValorSinIVA(out valorSinIva, out int iva, cargo.Valor); } string valorToDisplay = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", valorSinIva); worksheet.Cells[rowNum, colNum].Value = valorToDisplay; } if (cellValue == FacturasKeyWords.IVA.ElementAt(j)) { int iva = 0; if (cargo.Concepto == Concepto.TV) { Calculadora.CalcularValorSinIVA(out int valorSinIva, out iva, cargo.Valor); } string valorToDisplay = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", iva); worksheet.Cells[rowNum, colNum].Value = valorToDisplay; } if (cellValue == FacturasKeyWords.NETO.ElementAt(j)) { string valorToDisplay = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C}", cargo.Valor); worksheet.Cells[rowNum, colNum].Value = valorToDisplay; } ++j; } //Change progress value int newProgress = (int)((100 * ((float)i / (float)items.Count))); base.UpdateProgreso(newProgress); (sender as BackgroundWorker).ReportProgress(Progress); } } //Clean unused fields in facturas for (int rowNum = 1; rowNum <= totalRows; ++rowNum) { for (int colNum = 1; colNum <= totalColumns; ++colNum) { var row = worksheet.Cells[rowNum, colNum].Select(c => c.Value == null ? String.Empty : c.Value.ToString()); string cellValue = String.Join(",", row); for (int j = 0; j < FacturasKeyWords.SIZEOFCARGO; j++) { if (cellValue == FacturasKeyWords.CONCEPTO.ElementAt(j)) { worksheet.Cells[rowNum, colNum].Value = String.Empty; } if (cellValue == FacturasKeyWords.PERIODO.ElementAt(j)) { worksheet.Cells[rowNum, colNum].Value = String.Empty; } if (cellValue == FacturasKeyWords.VALOR.ElementAt(j)) { worksheet.Cells[rowNum, colNum].Value = String.Empty; } if (cellValue == FacturasKeyWords.IVA.ElementAt(j)) { worksheet.Cells[rowNum, colNum].Value = String.Empty; } if (cellValue == FacturasKeyWords.NETO.ElementAt(j)) { worksheet.Cells[rowNum, colNum].Value = String.Empty; } } } } //Change Current Operation Description base.UpdateCurrentOperationDescription("Generando archivo PDF"); text.Dispatcher.Invoke(delegate { text.Text = CurrentOperationDescription; }); xlPackage.SaveAs(new System.IO.FileInfo(@FileLocationXlsx.ToString())); Workbook workbook = new Application().Workbooks.Open(@FileLocationXlsx.ToString()); workbook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, @FileLocationPDF.ToString()); ++NumberOfFilesCreated; workbook.Close(); } catch (System.InvalidOperationException) { RollBack(FileLocationXlsx.ToString(), FileLocationPDF.ToString()); throw; } finally { File.Delete(@FileLocationXlsx.ToString()); } } } base.UpdateProgreso(100); (sender as BackgroundWorker).ReportProgress(Progress); return(true); }
/// <summary> /// Processes the payment /// </summary> private void Pay() { if (CedulaCliente is null) { SystemSounds.Beep.Play(); MessageBox.Show("Cedula invalida", Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); return; } List <Cargo> cargosActualizados = new List <Cargo>(); foreach (Compra _compra in this.ListViewCompras.Items) { Cargo cargo = (Cargo)_compra.CargoView; cargosActualizados.Add(cargo); } int pagoTotal = int.Parse(this.TotalText.Content.ToString(), NumberStyles.Currency); try { Factura factura = new Factura(); //In this case NumeroFactura is used for the name of the file, so its safe not to provide the object with more values //Must add number of file to the name of the file to avoid file from being removed if two or more payments happen the same day factura.NumeroFactura = new StringBuilder(CedulaCliente).Append("-").Append(DateManager.GetMonthInSpanish()).Append("-").Append(UserPreferences.GetNumeroRecibo()).ToString(); factura.cargos = cargosActualizados; Customer customer = BDManager.GetCustomer(CedulaCliente); if (customer is null) { SystemSounds.Beep.Play(); MessageBox.Show("Error inesperado", Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); return; } RecibosManager recibosManager = new RecibosManager(); Tuple <Factura, Customer> pair = new Tuple <Factura, Customer>(factura, customer); List <Tuple <Factura, Customer> > info = new List <Tuple <Factura, Customer> >(); info.Add(pair); try { recibosManager.Valor = pagoTotal; LoadingWindow loadingWindow = new LoadingWindow(); loadingWindow.Show(); loadingWindow.StartWorking((object sender, DoWorkEventArgs e) => { recibosManager.GenerateFiles(info, TypeOfRecibos.PAGO, sender, loadingWindow.Status); this.Dispatcher.Invoke(delegate { loadingWindow.Hide(); SystemSounds.Beep.Play(); MessageBox.Show("Archivo creado exitosamente", Messages.Titles.Success, MessageBoxButton.OK, MessageBoxImage.Information); }); } ); } catch (Exception) { this.Dispatcher.Invoke(delegate { SystemSounds.Beep.Play(); MessageBox.Show(Messages.Errors.CouldntReadFile, Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); }); return; } try { if (descuento == 0) { if (BDManager.Pay(cargosActualizados, CedulaCliente, pagoTotal)) { SystemSounds.Beep.Play(); MessageBox.Show("Pago exitoso!", Messages.Titles.Success, MessageBoxButton.OK, MessageBoxImage.Information); Clean(); } } else { if (BDManager.Pay(cargosActualizados, CedulaCliente, pagoTotal, descuento, descuentoCargo)) { SystemSounds.Beep.Play(); MessageBox.Show("Pago exitoso!", Messages.Titles.Success, MessageBoxButton.OK, MessageBoxImage.Information); Clean(); } } } catch (Exception) { SystemSounds.Beep.Play(); MessageBox.Show("No se pudo efectuar el pago", Messages.Titles.Warninig, MessageBoxButton.OK, MessageBoxImage.Warning); int resetNumeber = UserPreferences.GetNumeroRecibo(); UserPreferences.SaveNumeroRecibo(--resetNumeber); } } catch (Exception e) { SystemSounds.Beep.Play(); MessageBox.Show("Error inesperado. Elimine el archivo generado!" + "\n" + e.Message, Messages.Titles.Alert, MessageBoxButton.OK, MessageBoxImage.Error); } }