Example #1
0
        private void FrmProgressCalcoloCedolini_Activated(object sender, System.EventArgs e)
        {
            if (!primaVolta)
            {
                return;
            }
            primaVolta = false;
            ArrayList cedoliniDaCalcolare = new ArrayList();
            int       scartati            = 0;

            progressBar1.Maximum = cedolini.Count;

            lblEsaminati.Text = "Esaminati: " + progressBar1.Value + " / " + progressBar1.Maximum;
            lblCalcolati.Text = "Calcolati: " + 0;
            lblScartati.Text  = "Scartati: " + scartati;

            string    orderby = "fiscalyear, npayroll, flagbalance";
            DataTable tempCed = Meta.Conn.RUN_SELECT("payroll",
                                                     "idcon, idpayroll, " + orderby, orderby,
                                                     QHS.AppAnd(QHS.CmpEq("flagcomputed", 'N'), QHS.FieldInList("idcon", filtroContratti)), null, true);

            tempCed.Columns.Add("flagselezionato");
            tempCed.Columns.Add("flagultimocedolino");
            foreach (int idCedolino in cedolini)
            {
                DataRow[] rCedSel = tempCed.Select(QHC.CmpEq("idpayroll", idCedolino));
                rCedSel[0]["flagselezionato"] = "S";
            }
            occorreAggiornare = false;
            ArrayList cedoliniDiConguaglioDaCalcolare = new ArrayList();

            foreach (string idContratto in contratti)
            {
                string    filtroContratto    = QHS.CmpEq("idcon", idContratto);
                string    filtroImpContratto = QHS.AppAnd(filtroContratto, QHS.CmpEq("ayear", Meta.GetSys("esercizio")));
                DataTable ImpContratto       = Meta.Conn.RUN_SELECT("parasubcontractyear",
                                                                    "*", null, filtroImpContratto, null, true);
                int       count      = 0;
                string    precedenti = null;
                DataRow[] rCed       = tempCed.Select(filtroContratto, orderby);
                for (int i = 0; i < rCed.Length; i++)
                {
                    if (rCed[i]["flagselezionato"] is DBNull)
                    {
                        if (count == 0)
                        {
                            precedenti = rCed[i]["idpayroll"].ToString();
                        }
                        else
                        {
                            precedenti += ", " + rCed[i]["idpayroll"];
                        }
                        count++;
                    }
                    else
                    {
                        bool erroreSuQuestoCedolino = false;
                        if (ImpContratto.Rows.Count == 0)
                        {
                            txtErrori.Text        += "n° " + rCed[i]["idpayroll"] + "  (contratto non ancora trasferito dall'esercizio fiscale precedente";
                            txtErrori.Text        += ")\r\n";
                            erroreSuQuestoCedolino = true;
                        }
                        if (count != 0)
                        {
                            txtErrori.Text        += "n° " + rCed[i]["idpayroll"] + "  (prima calcolare ";
                            txtErrori.Text        += (count == 1) ? "il cedolino n° " : "i cedolini n° ";
                            txtErrori.Text        += precedenti + ")\r\n";
                            erroreSuQuestoCedolino = true;
                        }
                        else
                        {
                            string fCedCong = "idcon='" + rCed[i]["idcon"]
                                              + "' and fiscalyear=" + rCed[i]["fiscalyear"]
                                              + " and npayroll=" + rCed[i]["npayroll"]
                                              + " and flagbalance='S'";
                            DataRow[] rCedCong = tempCed.Select(fCedCong);
                            if (rCedCong.Length > 0)
                            {
                                rCed[i]["flagultimocedolino"] = "S";
                                cedoliniDiConguaglioDaCalcolare.Add((int)rCedCong[0]["idpayroll"]);
//								if (rCedCong[0]["flagselezionato"] is DBNull)
//								{
//									count = 1;
//									txtErrori.Text += "n° " + rCed[i]["idpayroll"]
//										+ "  (calcolare insieme al cedolino di conguaglio n° "
//										+ rCedCong[0]["idpayroll"] +")\r\n";
//									erroreSuQuestoCedolino = true;
//								}
                            }
                        }
                        if (!erroreSuQuestoCedolino)
                        {
                            cedoliniDaCalcolare.Add(rCed[i]["idpayroll"]);
                        }
                        else
                        {
                            scartati++;
                            lblScartati.Text = "Scartati: " + scartati;
                            progressBar1.Value++;
                        }
                        lblEsaminati.Text = "Esaminati: " + progressBar1.Value + " / " + progressBar1.Maximum;
                        Application.DoEvents();
                    }

                    if (interrompi)
                    {
                        btnInterrompi.Text = "Chiudi";
                        return;
                    }
                }
            }

            IEnumerator en = cedoliniDaCalcolare.GetEnumerator();
            string      cedoliniRataCalcolati = "";

            if (en.MoveNext())
            {
                string filtroCedoliniDaCalcolare = "(idpayroll in (" + en.Current;
                while (en.MoveNext())
                {
                    filtroCedoliniDaCalcolare += ", " + en.Current;
                }

                foreach (int cedolinoConguaglio in cedoliniDiConguaglioDaCalcolare)
                {
                    filtroCedoliniDaCalcolare += "," + cedolinoConguaglio;
                }
                filtroCedoliniDaCalcolare += "))";

                int           calcolati = 0;
                CalcoliCococo coc       = new CalcoliCococo(Meta.Dispatcher, Meta.Conn, filtroCedoliniDaCalcolare);
                foreach (int idCedolino in cedoliniDaCalcolare)
                {
                    DataRow rCedolino      = tempCed.Select(QHC.CmpEq("idpayroll", idCedolino))[0];
                    bool    ultimoCedolino = (rCedolino["flagultimocedolino"] != DBNull.Value);
                    string  errore         = null;
                    if (ultimoCedolino)
                    {
                        int idCedolinoConguaglio = ottieniIdCedolinoConguaglio(rCedolino, tempCed);
                        errore = coc.calcolaCedolino(idCedolino, false, "N");
                        if (errore != null)
                        {
                            MessageBox.Show(this, "Errore nel calcolo del cedolino n° " + idCedolino + ".\n" + errore);
                        }
                        else
                        {
                            errore = coc.calcolaCedolino(idCedolinoConguaglio, false, "F");
                            if (errore != null)
                            {
                                MessageBox.Show(this, "Errore nel calcolo del cedolino n° " + idCedolinoConguaglio + ".\n" + errore);
                            }
                            else
                            {
                                errore = coc.aggiungiRitenuteNonFiscaliCedolinoConguaglio(idCedolinoConguaglio, false);
                                if (errore != null)
                                {
                                    MessageBox.Show(this, "Errore nel calcolo del cedolino n° " + idCedolinoConguaglio + ".\n" + errore);
                                }
                                else
                                {
                                    errore = coc.aggiungiRitenuteFiscaliUltimoCedolinoRata(idCedolino, idCedolinoConguaglio, false);
                                    if (errore != null)
                                    {
                                        MessageBox.Show(this, "Errore nel calcolo del cedolino n° " + idCedolino + ".\n" + errore);
                                    }
                                    else
                                    {
                                        errore = coc.aggiornaDatiCedolinoConguaglio(idCedolinoConguaglio, false);
                                        if (errore != null)
                                        {
                                            MessageBox.Show(this, "Errore nel calcolo del cedolino n° " + idCedolinoConguaglio + ".\n" + errore);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        errore = coc.calcolaCedolino(idCedolino, false, "T");
                    }
                    if (errore == null)
                    {
                        calcolati++;
                        occorreAggiornare = true;
                        lblCalcolati.Text = "Calcolati: " + calcolati;
                        if (txtCedoliniCalcolati.Text == "")
                        {
                            txtCedoliniCalcolati.Text = idCedolino.ToString();
                            cedoliniRataCalcolati     = "'" + idCedolino + "'";
                        }
                        else
                        {
                            txtCedoliniCalcolati.Text += ", " + idCedolino;
                            cedoliniRataCalcolati     += ", '" + idCedolino + "'";
                        }
                    }
                    else
                    {
                        txtErrori.Text += "n° " + idCedolino + "  (" + errore + ")\r\n";
                    }
                    progressBar1.Value++;
                    lblEsaminati.Text = "Esaminati: " + progressBar1.Value + " / " + progressBar1.Maximum;
                    Application.DoEvents();
                    if (interrompi)
                    {
                        btnInterrompi.Text = "Chiudi";
                        return;
                    }
                }
                string errMess = coc.salvaSulDB();
                if (errMess == null)
                {
                    GeneraImpegniEScritture(cedoliniRataCalcolati);
                }
            }
            btnInterrompi.Text = "OK";
        }