private void _bwEsportazione_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null) { MessageBox.Show(e.Error.Message); btnAvviaEsportazione.Text = etichettaStart; } else if (e.Cancelled) { AggiornaMessaggio("*** OPERAZIONE CANCELLATA ***"); btnAvviaEsportazione.Text = etichettaStart; } else { WorkerDTO dto = (WorkerDTO)e.Result; _fasiExport = dto.FasiExport; _componentiExport = dto.ComponentiExport; PopolaGrigliaComponenti(); PopolaGrigliaFasi(); PopolaGrigliaDistinte(); PopolaGrigliaCicli(); AggiornaMessaggio("*** OPERAZIONE COMPLETATA ***"); pbEsportazione.Value = pbEsportazione.Maximum; btnAvviaEsportazione.Text = etichettaStart; } }
private void _bwEsportazione_DoWork(object sender, DoWorkEventArgs e) { DateTime dataRiferimento = new DateTime(2000, 1, 1); BackgroundWorker worker = sender as BackgroundWorker; WorkerDTO dto = (WorkerDTO)e.Argument; worker.ReportProgress(0, string.Format("Inizio esportazione componenti")); if (worker.CancellationPending) { e.Cancel = true; return; } List <string> distinte = dto.ComponentiExport.Select(x => x.DistintaPadre).Distinct().ToList(); List <string> cicli = dto.FasiExport.Select(x => x.CodiceCiclo).Distinct().ToList(); int elementiTotali = distinte.Count + cicli.Count; int contatore = 0; esportaCicli(cicli, worker, e, ref contatore); esportaDistinte(distinte, worker, e, ref contatore); e.Result = dto; }
private void btnAvviaEsportazione_Click(object sender, EventArgs e) { if (btnAvviaEsportazione.Text == etichettaStart) { List <string> distinte = _componentiExport.Select(x => x.DistintaPadre).Distinct().ToList(); List <string> cicli = _fasiExport.Select(x => x.CodiceCiclo).Distinct().ToList(); int elementi = distinte.Count + cicli.Count; if (elementi <= 0) { MessageBox.Show("Non ci sono elementi da esportare", "ATTENZIONE", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } lblElementi.Text = elementi.ToString(); btnAvviaEsportazione.Text = etichettaStop; pbEsportazione.Value = 0; txtEsportazione.Text = string.Empty; PulisciGriglie(); if (_bwEsportazione.IsBusy != true) { WorkerDTO dto = new WorkerDTO(); dto.ComponentiExport = _componentiExport; dto.FasiExport = _fasiExport; _bwEsportazione.RunWorkerAsync(dto); return; } } else { if (_bwEsportazione.WorkerSupportsCancellation == true && _bwEsportazione.IsBusy) { // Cancel the asynchronous operation. _bwEsportazione.CancelAsync(); } btnAvviaEsportazione.Text = etichettaStart; } }
private void esportaDistinte(List <string> distinte, BackgroundWorker worker, DoWorkEventArgs e, ref int contatore) { BCServices bc = new BCServices(); bc.CreaConnessione(); WorkerDTO dto = (WorkerDTO)e.Argument; foreach (string distinta in distinte) { worker.ReportProgress(contatore, string.Format(string.Empty, distinta)); worker.ReportProgress(contatore, string.Format("Distinte {0}", distinta)); contatore++; try { TestataDIBA testata = bc.EstraiTestataDIBA(distinta); if (testata != null) { bc.CambiaDescrizioneDB(distinta, testata.Description); testata = bc.EstraiTestataDIBA(distinta); if (testata.Status != Stato.InSviluppo) { string messaggio = string.Format("Distinta {0} ignorata perchè in stato {1}", distinta, testata.Status); worker.ReportProgress(contatore, messaggio); if (worker.CancellationPending) { e.Cancel = true; return; } continue; } List <RigheDIBA> righe = bc.EstraiRigheDIBA(distinta); foreach (RigheDIBA riga in righe) { bc.RimuoviComponente(distinta, string.Empty, riga.Line_No, riga.No, false); } bc.Salva(); int numeroRiga = 0; foreach (ExpComponenteDistintaBusinessCentral c in dto.ComponentiExport.Where(x => x.DistintaPadre == distinta)) { try { c.Errore = string.Empty; decimal quantita = (decimal)c.Quantita; decimal scarto = (decimal)c.Scarto; decimal arrotondamento = (decimal)c.Arrotondamento; numeroRiga += 1000; bc.AggiungiComponente(distinta, string.Empty, numeroRiga, c.Tipo, c.Anagrafica, c.Descrizione, c.CodiceUM, quantita, c.Collegamento, scarto, arrotondamento); c.Esito = "OK"; } catch (Exception ex) { string messaggio = string.Format("Distinta {0} componente {1} non esportata per il seguente errore: {2}", distinta, c.Anagrafica, ex.Message); { c.Errore = ex.Message; c.Esito = "KO"; } worker.ReportProgress(contatore, messaggio); } } worker.ReportProgress(contatore, string.Format("Distinta {0} terminata", distinta)); } else { string messaggio = string.Format("La distinta {0} non è stata trovata", distinta); foreach (ExpComponenteDistintaBusinessCentral c in dto.ComponentiExport.Where(x => x.DistintaPadre == distinta)) { c.Errore = messaggio; c.Esito = "KO"; } worker.ReportProgress(contatore, messaggio); } } catch (Exception ex) { string messaggio = string.Format("Distinta {0} non esportata per il seguente errore: {1}", distinta, ex.Message); foreach (ExpComponenteDistintaBusinessCentral c in dto.ComponentiExport.Where(x => x.DistintaPadre == distinta)) { c.Errore = "Eccezione"; c.Esito = "KO"; } worker.ReportProgress(contatore, messaggio); } finally { bc.CreaConnessione(); } if (worker.CancellationPending) { e.Cancel = true; return; } } }
private void esportaCicli(List <string> cicli, BackgroundWorker worker, DoWorkEventArgs e, ref int contatore) { BCServices bc = new BCServices(); bc.CreaConnessione(); WorkerDTO dto = (WorkerDTO)e.Argument; foreach (string ciclo in cicli) { worker.ReportProgress(contatore, string.Format(string.Empty, ciclo)); worker.ReportProgress(contatore, string.Format("Ciclo {0}", ciclo)); contatore++; try { Cicli testata = bc.EstraiTestataCiclo(ciclo); if (testata != null) { bc.CambiaDescrizioneCiclo(ciclo, testata.Description); testata = bc.EstraiTestataCiclo(ciclo); if (testata.Status != Stato.InSviluppo) { string messaggio = string.Format("Ciclo {0} ignorato perchè in stato {1}", ciclo, testata.Status); worker.ReportProgress(contatore, messaggio); if (worker.CancellationPending) { e.Cancel = true; return; } continue; } List <RigheCICLO> righe = bc.EstraiRigheCICLO(ciclo); foreach (RigheCICLO riga in righe) { bc.RimuoviCommento(ciclo, string.Empty, riga.Operation_No, false); bc.RimuoviFase(ciclo, string.Empty, riga.Operation_No, false); } bc.Salva(); foreach (ExpFaseCicloBusinessCentral f in dto.FasiExport.Where(x => x.CodiceCiclo == ciclo).OrderBy(x => x.Operazione)) { try { f.Errore = string.Empty; bc.AggiungiFase(ciclo, string.Empty, f.Operazione.ToString(), f.Tipo, f.AreaProduzione, f.Task, (decimal)f.TempoSetup, f.UMSetup, f.SchedaProcesso, (decimal)f.TempoLavorazione, f.UMLavorazione, (decimal)f.TempoAttesa, f.UMAttesa, (decimal)f.TempoSpostamento, f.UMSpostamento, (decimal)f.DimensioneLotto, f.Collegamento, f.Condizione, f.LogicheLavorazione, f.Caratteristica, f.Descrizione); bc.AggiungiCommento(ciclo, string.Empty, f.Operazione.ToString(), f.CommentiConcatenati()); f.Esito = "OK"; } catch (Exception ex) { string messaggio = string.Format("Ciclo {0} operazione {1} non esportato per il seguente errore: {2}", ciclo, f.Operazione, ex.Message); { f.Errore = ex.Message; f.Esito = "KO"; } worker.ReportProgress(contatore, messaggio); } } worker.ReportProgress(contatore, string.Format("Ciclo {0} terminato", ciclo)); } else { string messaggio = string.Format("Il ciclo {0} non è stato trovato", ciclo); foreach (ExpFaseCicloBusinessCentral c in dto.FasiExport.Where(x => x.CodiceCiclo == ciclo)) { c.Errore = messaggio; c.Esito = "KO"; } worker.ReportProgress(contatore, messaggio); } } catch (Exception ex) { string messaggio = string.Format("Ciclo {0} non esportato per il seguente errore: {1}", ciclo, ex.Message); foreach (ExpFaseCicloBusinessCentral f in dto.FasiExport.Where(x => x.CodiceCiclo == ciclo).OrderBy(x => x.Operazione)) { f.Errore = "Eccezione"; f.Esito = "KO"; } worker.ReportProgress(contatore, messaggio); } finally { bc.CreaConnessione(); } if (worker.CancellationPending) { e.Cancel = true; return; } } }