Example #1
0
 /// <summary>
 /// Abilita le azioni per ogni entità.
 /// </summary>
 protected void AbilitaAzioni()
 {
     CicloGiorni((oreGiorno, suffissoData, giorno) =>
     {
         foreach (DataRowView azione in _entitaAzioni)
         {
             if (azione["Giorno"] is DBNull || azione["Giorno"].ToString().Contains(suffissoData))
             {
                 Range cellaAzione = new Range(_definedNames.GetRowByName(azione["SiglaEntita"]), _definedNames.GetColFromName(azione["SiglaAzione"], suffissoData));
                 _ws.Range[cellaAzione.ToString()].Interior.Pattern    = Excel.XlPattern.xlPatternNone;
                 _ws.Range[cellaAzione.ToString()].Interior.ColorIndex = 2;
             }
         }
     });
 }
Example #2
0
        public override void Range(object Sh, Excel.Range Target)
        {
            if (Workbook.CategorySheets.Contains(Target.Worksheet))
            {
                //Se la funzione scrive in altre celle, ricordarsi di disabilitare gli handler per la modifica delle celle
                //Workbook.WB.SheetChange -= Handler.StoreEdit;
                Workbook.RemoveStdStoreEdit();
                Workbook.WB.SheetChange -= this.Range;


                Excel.Worksheet ws        = Target.Worksheet;
                Excel.Worksheet wsMercato = Workbook.Sheets[Workbook.Mercato];

                bool wasProtected = wsMercato.ProtectContents;
                if (wasProtected)
                {
                    wsMercato.Unprotect(Workbook.Password);
                    ws.Unprotect(Workbook.Password);
                }

                DefinedNames definedNames        = new DefinedNames(ws.Name);
                DefinedNames definedNamesMercato = new DefinedNames(Workbook.Mercato);

                DataTable entita = Workbook.Repository[DataBase.TAB.CATEGORIA_ENTITA];

                string[] ranges = Target.Address.Split(',');

                foreach (string range in ranges)
                {
                    Range rng = new Range(range);

                    foreach (Range cell in rng.Cells)
                    {
                        string[] parts = definedNames.GetNameByAddress(cell.StartRow, cell.StartColumn).Split(Simboli.UNION[0]);

                        string siglaEntita       = parts[0];
                        string siglaInformazione = parts[1];
                        string suffissoData      = parts[2];
                        string suffissoOra       = parts[3];

                        var rif =
                            (from r in entita.AsEnumerable()
                             where r["IdApplicazione"].Equals(Workbook.IdApplicazione) && r["SiglaEntita"].Equals(siglaEntita)
                             select new { SiglaEntita = r["Gerarchia"] is DBNull ? r["SiglaEntita"] : r["Gerarchia"], Riferimento = r["Riferimento"] }).First();

                        string quarter = Regex.Match(siglaInformazione, @"Q\d").Value;
                        quarter = quarter == "" ? "Q1" : quarter;

                        Range rngMercato = new Range(definedNamesMercato.GetRowByName(rif.SiglaEntita, "UM", "T") + 2, definedNamesMercato.GetColFromName("RIF" + rif.Riferimento, "PROGRAMMA" + quarter));
                        rngMercato.StartRow += (Date.GetOraFromSuffissoOra(suffissoOra) - 1);

                        wsMercato.Range[rngMercato.ToString()].Value  = ws.Range[cell.ToString()].Value;
                        ws.Range[cell.ToString()].Interior.ColorIndex = wsMercato.Range[rngMercato.ToString()].DisplayFormat.Interior.ColorIndex;
                    }
                }

                if (wasProtected)
                {
                    wsMercato.Protect(Workbook.Password);
                    ws.Protect(Workbook.Password);
                }

                //Se la funzione scrive in altre celle, ricordarsi di riabilitare gli handler per la modifica delle celle
                //Workbook.WB.SheetChange += Handler.StoreEdit;
                Workbook.AddStdStoreEdit();
                Workbook.WB.SheetChange += this.Range;
            }
        }
Example #3
0
        protected override void ScriviCella(Excel.Worksheet ws, DefinedNames definedNames, object siglaEntita, DataRowView info, string suffissoData, string suffissoOra, object risultato, bool saveToDB, bool fromCarica)
        {
            base.ScriviCella(ws, definedNames, siglaEntita, info, suffissoData, suffissoOra, risultato, saveToDB, fromCarica);

            //se l'informazione è visibile la devo scrivere anche nei fogli dei mercati
            DataView informazioni = new DataView(Workbook.Repository[DataBase.TAB.ENTITA_INFORMAZIONE]);

            informazioni.RowFilter = "SiglaEntita = '" + siglaEntita + "' OR SiglaEntitaRif = '" + siglaEntita + "' AND SiglaInformazione = '" + info["SiglaInformazione"] + "' AND IdApplicazione = " + Workbook.IdApplicazione;
            bool visible = false;

            foreach (DataRowView r in informazioni)
            {
                if (r["Visibile"].Equals("1"))
                {
                    visible = true;
                }
            }

            if (visible)
            {
                DataTable entita = Workbook.Repository[DataBase.TAB.CATEGORIA_ENTITA];

                var rif =
                    (from r in entita.AsEnumerable()
                     where r["IdApplicazione"].Equals(Workbook.IdApplicazione) && r["SiglaEntita"].Equals(siglaEntita)
                     select new { SiglaEntita = r["Gerarchia"] is DBNull ? r["SiglaEntita"] : r["Gerarchia"], Riferimento = r["Riferimento"] }).First();

                string quarter = Regex.Match(info["SiglaInformazione"].ToString(), @"Q\d").Value;
                quarter = quarter == "" ? "Q1" : quarter;

                Range rngMercato = new Range(_definedNamesSheetMercato.GetRowByName(rif.SiglaEntita, "UM", "T") + 2, _definedNamesSheetMercato.GetColFromName("RIF" + rif.Riferimento, "PROGRAMMA" + quarter));
                rngMercato.StartRow += (Date.GetOraFromSuffissoOra(suffissoOra) - 1);

                _wsMercato.Range[rngMercato.ToString()].Value = risultato;
            }
        }
Example #4
0
        public void AggiornaColori()
        {
            if (Workbook.Mercato != "MSD1")
            {
                SplashScreen.UpdateStatus("Aggiorno colori");

                DataView categoriaEntita = Workbook.Repository[DataBase.TAB.CATEGORIA_ENTITA].DefaultView;
                categoriaEntita.RowFilter = "SiglaCategoria = '" + _siglaCategoria + "' AND IdApplicazione = " + Workbook.IdApplicazione;
                DataView informazioni = Workbook.Repository[DataBase.TAB.ENTITA_INFORMAZIONE].DefaultView;

                foreach (DataRowView entita in categoriaEntita)
                {
                    informazioni.RowFilter = "SiglaEntita = '" + entita["SiglaEntita"] + "' AND SiglaTipologiaInformazione <> 'CHECK' AND Visibile = '1' AND IdApplicazione = " + Workbook.IdApplicazione;
                    foreach (DataRowView info in informazioni)
                    {
                        object siglaEntita = info["SiglaEntitaRif"] is DBNull ? info["SiglaEntita"] : info["SiglaEntitaRif"];
                        Range  rng         = _definedNames.Get(siglaEntita, info["SiglaInformazione"], Date.SuffissoDATA1).Extend(colOffset: Date.GetOreGiorno(Workbook.DataAttiva));
                        string quarter     = Regex.Match(info["SiglaInformazione"].ToString(), @"Q\d").Value;
                        quarter = quarter == "" ? "Q1" : quarter;

                        var rif =
                            (from r in categoriaEntita.Table.AsEnumerable()
                             where r["IdApplicazione"].Equals(Workbook.IdApplicazione) && r["SiglaEntita"].Equals(siglaEntita)
                             select new { SiglaEntita = r["Gerarchia"] is DBNull ? r["SiglaEntita"] : r["Gerarchia"], Riferimento = r["Riferimento"] }).First();

                        Range rngMercato = new Range(_definedNamesSheetMercato.GetRowByName(rif.SiglaEntita, "UM", "T") + 2, _definedNamesSheetMercato.GetColFromName("RIF" + rif.Riferimento, "PROGRAMMA" + quarter)).Extend(rowOffset: Date.GetOreGiorno(Workbook.DataAttiva));

                        for (int j = 0; j < rngMercato.Rows.Count; j++)
                        {
                            _ws.Range[rng.Columns[j].ToString()].Interior.ColorIndex = _wsMercato.Range[rngMercato.Rows[j].ToString()].DisplayFormat.Interior.ColorIndex;
                        }
                    }
                }
            }
        }
Example #5
0
        private void btnApplica_Click(object sender, EventArgs e)
        {
            Workbook.ScreenUpdating = false;
            Sheet.Protected         = false;

            btnApplica.Enabled = false;
            btnAnnulla.Enabled = false;
            btnMeteo.Enabled   = false;

            if (_toProcessDates.Count == 0)
            {
                MessageBox.Show("Non è stata selezionata alcuna data...", Simboli.NomeApplicazione, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else if (treeViewUP.Nodes.OfType <TreeNode>().Where(n => n.Checked).ToArray().Length == 0)
            {
                MessageBox.Show("Non è stata selezionata alcuna unità...", Simboli.NomeApplicazione, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                SplashScreen.Show();
                Workbook.Application.EnableEvents = false;
                Workbook.ScreenUpdating           = false;
                Workbook.Application.Calculation  = Excel.XlCalculation.xlCalculationManual;

                bool caricaOrGenera = false;
                bool loaded         = false;

                bool g_mp_mgp = false;

                DataView entitaProprieta = Workbook.Repository[DataBase.TAB.ENTITA_PROPRIETA].DefaultView;

                ThroughAllNodes(treeViewAzioni.Nodes, nodoAzione =>
                {
                    if (loaded && Regex.Match(nodoAzione.Name, @"\w[^\d]+").Value == "GENERA")
                    {
                        Workbook.Application.CalculateFull();
                        Workbook.ScreenUpdating = false;
                        loaded = false;
                    }

                    if (nodoAzione.Checked && nodoAzione.Nodes.Count == 0)
                    {
                        TreeNode[] nodiEntita = treeViewUP.Nodes.OfType <TreeNode>().Where(node => node.Checked).ToArray();
                        _azioni.RowFilter     = "SiglaAzione = '" + nodoAzione.Name + "' AND IdApplicazione = " + Workbook.IdApplicazione;
                        if (!g_mp_mgp)
                        {
                            g_mp_mgp = nodoAzione.Name == "G_MP_MGP";
                        }

                        ThroughAllNodes(treeViewUP.Nodes, nodoEntita =>
                        {
                            foreach (DateTime date in _toProcessDates)
                            {
                                string suffissoData = Date.GetSuffissoData(date);

                                if (nodoEntita.Checked && nodoEntita.Nodes.Count == 0)
                                {
                                    entitaProprieta.RowFilter = "SiglaEntita = '" + nodoEntita.Name + "' AND SiglaProprieta LIKE '%GIORNI_STRUTTURA' AND IdApplicazione = " + Workbook.IdApplicazione;
                                    int intervalloGiorni      = Struct.intervalloGiorni;
                                    if (entitaProprieta.Count > 0)
                                    {
                                        intervalloGiorni = int.Parse("" + entitaProprieta[0]["Valore"]);
                                    }

                                    if (date <= Workbook.DataAttiva.AddDays(intervalloGiorni))
                                    {
                                        string nomeFoglio = DefinedNames.GetSheetName(nodoEntita.Name);
                                        bool presente;

                                        DataView entitaAzione  = new DataView(Workbook.Repository[DataBase.TAB.ENTITA_AZIONE]);
                                        entitaAzione.RowFilter = "SiglaEntita = '" + nodoEntita.Name + "' AND SiglaAzione = '" + nodoAzione.Name + "' AND IdApplicazione = " + Workbook.IdApplicazione;

                                        if (entitaAzione.Count > 0 && (entitaAzione[0]["Giorno"] is DBNull || entitaAzione[0]["Giorno"].ToString().Contains(Date.GetSuffissoData(date))))
                                        {
                                            SplashScreen.UpdateStatus("[" + date.ToShortDateString() + "] " + nodoAzione.Parent.Text + " " + nodoAzione.Text + ": " + nodoEntita.Text);

                                            //string[] mercati = null;
                                            string[] mercati = null;
                                            if (Workbook.Repository.Applicazione["ModificaDinamica"].Equals("1"))
                                            {
                                                mercati = groupMercati.Controls
                                                          .OfType <CheckBox>()
                                                          .Where(c => c.Checked)
                                                          .Select(c => Regex.Match(c.Text, @"\d+").Value)
                                                          .OrderBy(s => s)
                                                          .ToArray();
                                            }
                                            else if (Workbook.IdApplicazione == 18)
                                            {
                                                mercati = new string[] { Regex.Match(Workbook.Mercato, @"\d+").Value };
                                            }

                                            switch (Regex.Match(nodoAzione.Parent.Name, @"\w[^\d]+").Value)
                                            {
                                            case "CARICA":
                                                presente = _carica.AzioneInformazione(nodoEntita.Name, nodoAzione.Name, nodoAzione.Parent.Name, date, mercati);
                                                _r.AggiornaRiepilogo(nodoEntita.Name, nodoAzione.Name, presente, date);
                                                caricaOrGenera = true;
                                                loaded         = true;
                                                break;

                                            case "GENERA":
                                                presente = _carica.AzioneInformazione(nodoEntita.Name, nodoAzione.Name, nodoAzione.Parent.Name, date, mercati);
                                                _r.AggiornaRiepilogo(nodoEntita.Name, nodoAzione.Name, presente, date);
                                                caricaOrGenera = true;
                                                break;

                                            case "ESPORTA":
                                                presente = _esporta.RunExport(nodoEntita.Name, nodoAzione.Name, nodoEntita.Text, nodoAzione.Text, date, mercati);
                                                if (presente)
                                                {
                                                    _r.AggiornaRiepilogo(nodoEntita.Name, nodoAzione.Name, presente, date);
                                                }
                                                break;
                                            }

                                            if (_azioni[0]["Relazione"] != DBNull.Value && Struct.visualizzaRiepilogo)
                                            {
                                                string[] azioneRelazione = _azioni[0]["Relazione"].ToString().Split(';');

                                                DefinedNames definedNames = new DefinedNames("Main");

                                                foreach (string relazione in azioneRelazione)
                                                {
                                                    _azioni.RowFilter = "SiglaAzione = '" + relazione + "' AND IdApplicazione = " + Workbook.IdApplicazione;

                                                    Range rng = new Range(definedNames.GetRowByName(nodoEntita.Name), definedNames.GetColFromName(relazione, suffissoData));
                                                    if (Workbook.Main.Range[rng.ToString()].Interior.ColorIndex != 2)
                                                    {
                                                        Workbook.Main.Range[rng.ToString()].Value = "RI" + _azioni[0]["Gerarchia"];
                                                        Style.RangeStyle(Workbook.Main.Range[rng.ToString()], fontSize: 8, bold: true, foreColor: 3, backColor: 6, align: Excel.XlHAlign.xlHAlignCenter);
                                                    }
                                                }
                                                _azioni.RowFilter = "SiglaAzione = '" + nodoAzione.Name + "' AND IdApplicazione = " + Workbook.IdApplicazione;
                                            }
                                        }
                                    }
                                }
                            }
                        });
                        switch (Regex.Match(nodoAzione.Parent.Name, @"\w[^\d]+").Value)
                        {
                        case "CARICA":
                            Workbook.InsertLog(Core.DataBase.TipologiaLOG.LogCarica, "Carica: " + nodoAzione.Text);
                            break;

                        case "GENERA":
                            Workbook.InsertLog(Core.DataBase.TipologiaLOG.LogGenera, "Genera: " + nodoAzione.Text);
                            break;

                        case "ESPORTA":
                            Workbook.InsertLog(Core.DataBase.TipologiaLOG.LogEsporta, "Esporta: " + nodoAzione.Text);
                            break;
                        }
                    }
                });

                Workbook.Application.Calculation = Excel.XlCalculation.xlCalculationAutomatic;

                if (caricaOrGenera)
                {
                    SplashScreen.UpdateStatus("Salvo su DB");
                    Sheet.SalvaModifiche();
                    DataBase.SalvaModificheDB();
                    if (Workbook.IdApplicazione == 5 && g_mp_mgp)
                    {
                        SplashScreen.UpdateStatus("Aggiorno rendimenti");
                        Workbook.Application.Calculation = Excel.XlCalculation.xlCalculationManual;

                        ThroughAllNodes(treeViewUP.Nodes, nodoEntita =>
                        {
                            if (nodoEntita.Checked && nodoEntita.Nodes.Count == 0)
                            {
                                _categoriaEntita.RowFilter = "SiglaEntita = '" + nodoEntita.Name + "' AND IdApplicazione = " + Workbook.IdApplicazione;

                                if (_categoriaEntita[0]["SiglaCategoria"].Equals("IREN_60T"))
                                {
                                    foreach (DateTime date in _toProcessDates)
                                    {
                                        _carica.AzioneInformazione(nodoEntita.Name, "RENDIMENTO", "CARICA", date, null);
                                    }
                                }
                            }
                        });
                        Workbook.Application.Calculation = Excel.XlCalculation.xlCalculationAutomatic;
                        SplashScreen.UpdateStatus("Salvo su DB");
                        Sheet.SalvaModifiche();
                        DataBase.SalvaModificheDB();
                    }
                }

                Workbook.Application.EnableEvents = true;
                Workbook.ScreenUpdating           = true;
                SplashScreen.Close();
            }

            btnApplica.Enabled = true;
            btnAnnulla.Enabled = true;
            btnMeteo.Enabled   = true;

            Sheet.Protected         = true;
            Workbook.ScreenUpdating = true;
        }
Example #6
0
        /// <summary>
        /// Formatta il blocco entità.
        /// </summary>
        /// <param name="siglaEntita">Sigla entità.</param>
        /// <param name="desEntita">Descrizione.</param>
        /// <param name="codiceRUP">Codice RUP.</param>
        protected void FormattaBloccoEntita(object siglaEntita, object desEntita, object codiceRUP)
        {
            Range rngMercatoPrec = new Range();
            //Titolo
            Range rng = new Range(_definedNames.GetRowByName(siglaEntita, "T"), _struttura.colBlock, 1, 10);

            Style.RangeStyle(_ws.Range[rng.ToString()], fontSize: 12, merge: true, bold: true, align: Excel.XlHAlign.xlHAlignCenter, borders: "[top:medium,right:medium,bottom:medium,left:medium]");
            _ws.Range[rng.ToString()].Value     = "PROGRAMMA A 15 MINUTI " + desEntita;
            _ws.Range[rng.ToString()].RowHeight = 25;

            //Data
            rng = new Range(_definedNames.GetRowByName(siglaEntita, "DATA"), _struttura.colBlock, 1, 5);
            Style.RangeStyle(_ws.Range[rng.ToString()], fontSize: 10, bold: true, align: Excel.XlHAlign.xlHAlignCenter, borders: "[top:medium,right:medium,bottom:medium,left:medium,insidev:medium]", numberFormat: "dd/MM/yyyy");
            _ws.Range[rng.ToString()].RowHeight        = 18;
            _ws.Range[rng.Columns[0].ToString()].Value = "Data";
            _ws.Range[rng.Columns[1, 3].ToString()].Merge();
            _ws.Range[rng.Columns[1].ToString()].Value = Workbook.DataAttiva;
            _ws.Range[rng.Columns[4].ToString()].Value = _mercato;

            //Tabella
            DataTable categoriaEntita = Workbook.Repository[DataBase.TAB.CATEGORIA_ENTITA];
            DataView  informazioni    = Workbook.Repository[DataBase.TAB.ENTITA_INFORMAZIONE].DefaultView;

            List <DataRow> entitaRif =
                (from r in categoriaEntita.AsEnumerable()
                 where r["IdApplicazione"].Equals(Workbook.IdApplicazione) && r["Gerarchia"].Equals(siglaEntita)
                 select r).ToList();

            bool hasEntitaRif = entitaRif.Count > 0;
            int  numEntita    = Math.Max(entitaRif.Count, 1);

            rng = new Range(_definedNames.GetRowByName(siglaEntita, "UM", "T"), _struttura.colBlock, 1, 5 * numEntita);
            for (int i = 0; i < numEntita; i++)
            {
                informazioni.RowFilter = "SiglaEntita = '" + siglaEntita + "' AND Visibile = '1' " + (hasEntitaRif ? "AND SiglaEntitaRif = '" + entitaRif[i]["SiglaEntita"] + "'" : "") + " AND IdApplicazione = " + _appID;

                //range grande come tutta la tabella
                rng = new Range(_definedNames.GetRowByName(siglaEntita, "UM", "T"), _definedNames.GetColFromName("RIF" + (i + 1), "PROGRAMMAQ1") - 1, Date.GetOreGiorno(Workbook.DataAttiva) + 2, 5);

                Style.RangeStyle(_ws.Range[rng.ToString()], borders: "[top:medium,right:medium,bottom:medium,left:medium,insideH:thin,insideV:thin]", align: Excel.XlHAlign.xlHAlignCenter, numberFormat: "general");
                Style.RangeStyle(_ws.Range[rng.Rows[1, rng.Rows.Count - 1].Columns[0].ToString()], backColor: 15, bold: true, align: Excel.XlHAlign.xlHAlignLeft);
                Style.RangeStyle(_ws.Range[rng.Rows[0].ToString()], backColor: 15, bold: true, fontSize: 11);
                Style.RangeStyle(_ws.Range[rng.Rows[1].ToString()], backColor: 15, bold: true);
                _ws.Range[rng.Rows[0].Columns[1, rng.Columns.Count - 1].ToString()].Merge();
                if (hasEntitaRif)
                {
                    _ws.Range[rng.Rows[0].ToString()].Value = new object[] { "UM", entitaRif[i]["CodiceRUP"] is DBNull ? entitaRif[i]["DesEntita"] : entitaRif[i]["CodiceRUP"] }
                }
                ;
                else
                {
                    _ws.Range[rng.Rows[0].ToString()].Value = new object[] { "UM", codiceRUP is DBNull ? desEntita : codiceRUP }
                };

                for (int h = 1; h <= Date.GetOreGiorno(Workbook.DataAttiva); h++)
                {
                    _ws.Range[rng.Columns[0].Rows[h + 1].ToString()].Value = "Ora " + h;
                }

                var isOrario = informazioni
                               .OfType <DataRowView>()
                               .Any(r => r["SiglaInformazione"].ToString().StartsWith("PROGRAMMA_"));

                if (!isOrario)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        _ws.Range[rng.Rows[1].Columns[j + 1].ToString()].Value = 15 * j + "-" + 15 * (j + 1);
                    }
                }
                else
                {
                    _ws.Range[rng.Cells[1, 1].ToString()].Value = "0-60";
                }

                //TODO controllare che non ci siano problemi
                if (_mercato != "MSD1")
                {
                    string mercatoPrec = Simboli.GetMercatoPrec(_mercato);
                    //calcolo il range nel foglio del mercato precedente (non è detto che siano nella stessa posizione (anche se non ha senso che non lo siano...))
                    rngMercatoPrec = new Range(_definedNamesMercatoPrec.GetRowByName(siglaEntita, "UM", "T"), _definedNamesMercatoPrec.GetColFromName("RIF" + (i + 1), "PROGRAMMAQ1") - 1, Date.GetOreGiorno(Workbook.DataAttiva) + 2, 5);

                    Excel.FormatCondition condGreater = _ws.Range[rng.Rows[2, rng.Rows.Count - 1].Columns[1, 4].ToString()].FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, Formula1: "=" + rng.Cells[2, 1] + " > '" + mercatoPrec + "'!" + rngMercatoPrec.Cells[2, 1]);
                    condGreater.Interior.ColorIndex = Struct.COLORE_VARIAZIONE_POSITIVA;

                    Excel.FormatCondition condLess = _ws.Range[rng.Rows[2, rng.Rows.Count - 1].Columns[1, 4].ToString()].FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, Formula1: "=" + rng.Cells[2, 1] + " < '" + mercatoPrec + "'!" + rngMercatoPrec.Cells[2, 1]);
                    condLess.Interior.ColorIndex = Struct.COLORE_VARIAZIONE_NEGATIVA;
                }
            }
        }