Ejemplo n.º 1
0
        /// <summary>
        /// Ritorna le aziende aggiudicatarie nel formato: {codice fiscale} - {ragione sociale};{codice fiscale} - {ragione sociale}
        /// </summary>
        /// <param name="pub"></param>
        /// <returns></returns>
        public string GetAziendeAggiudicatarie(pubblicazione pub)
        {
            List <singoloType> aggiudicatariList = new List <singoloType>();

            if (pub.data != null && pub.data.Any(x => x.aggiudicatari != null))
            {
                foreach (pubblicazioneLottoAggiudicatari aggiudicatari in pub.data
                         .Where(x => x.partecipanti != null)
                         .Select(x => x.aggiudicatari))
                {
                    foreach (singoloType aggiudicatario in aggiudicatari.aggiudicatario)
                    {
                        if (!aggiudicatariList.Any(f => f.Item.Eq(aggiudicatario.Item) && f.ragioneSociale.Eq(aggiudicatario.ragioneSociale)))
                        {
                            aggiudicatariList.Add(aggiudicatario);
                        }
                    }
                }
                IEnumerable <string> aggiudicatariResult = aggiudicatariList
                                                           .Select(y => string.Concat(y.Item, WordSeparator, y.ragioneSociale))
                                                           .ToList <string>();
                return(string.Join(FieldSeparator, aggiudicatariResult.ToArray()));
            }
            return(string.Empty);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Ritorna le aziende partecipanti nel formato: {codice fiscale} - {ragione sociale};{codice fiscale} - {ragione sociale}
        /// </summary>
        /// <param name="pub"></param>
        /// <returns></returns>
        public string GetAziendePartecipanti(pubblicazione pub)
        {
            List <singoloType> partecipantiList = new List <singoloType>();

            if (pub.data != null && pub.data.Any(x => x.partecipanti != null))
            {
                foreach (pubblicazioneLottoPartecipanti partecipanti in pub.data
                         .Where(x => x.partecipanti != null)
                         .Select(x => x.partecipanti))
                {
                    foreach (singoloType partecipante in partecipanti.partecipante)
                    {
                        if (!partecipantiList.Any(f => f.Item.Eq(partecipante.Item) && f.ragioneSociale.Eq(partecipante.ragioneSociale)))
                        {
                            partecipantiList.Add(partecipante);
                        }
                    }
                }
                IEnumerable <string> partecipantiResult = partecipantiList
                                                          .Select(y => string.Concat(y.Item, WordSeparator, y.ragioneSociale))
                                                          .ToList <string>();
                return(string.Join(FieldSeparator, partecipantiResult.ToArray()));
            }
            return(string.Empty);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Ritorna gli importi di aggiudicazione suddivisi per lotto nel formato {0:0.00};{0:0.00}
 /// </summary>
 /// <param name="pub"></param>
 /// <returns></returns>
 public decimal GetImportoSommeLiquidate(pubblicazione pub)
 {
     if (pub.data != null && pub.data.Any())
     {
         return(pub.data.Sum(x => x.importoSommeLiquidate));
     }
     return(0);
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Ritorna gli importi di aggiudicazione suddivisi per lotto nel formato {0:0.00};{0:0.00}
 /// </summary>
 /// <param name="pub"></param>
 /// <returns></returns>
 public decimal GetImportoAggiudicazione(pubblicazione pub)
 {
     if (pub.data != null && pub.data.Any())
     {
         return(pub.data.Sum(x => x.importoAggiudicazione));
     }
     return(0);
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Ritorna la struttura proponente data una pubblicazione AVCP
 /// </summary>
 /// <param name="pub"></param>
 /// <returns></returns>
 public string GetStrutturaProponente(pubblicazione pub)
 {
     if (pub.data == null || !pub.data.Any())
     {
         return(string.Empty);
     }
     return(pub.data.Select(x => string.Concat(x.strutturaProponente.denominazione, WordSeparator, x.strutturaProponente.codiceFiscaleProp))
            .Aggregate((current, next) => string.Concat(current, FieldSeparator, next)));
 }
Ejemplo n.º 6
0
 public string GetSceltaContraente(pubblicazione pub)
 {
     if (pub.data != null && pub.data.Any())
     {
         return(pub.data
                .Select(x => x.sceltaContraente.GetXmlName().ToString())
                .Aggregate((current, next) => string.Concat(current, FieldSeparator, next)));
     }
     return(String.Empty);
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Ritorna i CIG dei lotti nel formato {CIG};{CIG}
 /// </summary>
 /// <param name="pub"></param>
 /// <returns></returns>
 public string GetLotti(pubblicazione pub)
 {
     if (pub.data != null && pub.data.Any())
     {
         return(pub.data
                .Select(x => x.cig)
                .Aggregate((current, next) => string.Concat(current, FieldSeparator, next)));
     }
     return(String.Empty);
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Ritorna le date di fine lavori nel formato {0:dd/MM/yyyy};{0:dd/MM/yyyy}
 /// </summary>
 /// <param name="pub"></param>
 /// <returns></returns>
 public Nullable <DateTime> GetDataFineLavori(pubblicazione pub)
 {
     if (pub.data != null && pub.data.Any(x => x.tempiCompletamento != null))
     {
         return(pub.data
                .Where(x => x.tempiCompletamento != null)
                .Min(x => x.tempiCompletamento.dataUltimazione));
     }
     return(null);
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Metodo per il salvataggio di un DataSet in Serie AVCP
        /// </summary>
        /// <param name="pub">Oggetto da salvare</param>
        /// <param name="item">DocumentSeriesItem in cui deve essere salvato</param>
        /// <param name="username">Nome dell'operatore che esegue il savataggio</param>
        /// <returns>Restituisce l'oggetto contenente tutte le informazioni sull'importazione eseguita</returns>
        public SetDataSetResult SetDataSetPub(pubblicazione pub, DocumentSeriesItem item, string username, bool saveAlways)
        {
            if (pub == null)
            {
                throw new ArgumentNullException("pub", "Oggetto [pubblicazione] nullo");
            }

            // Creo l'oggetto di ritorno
            var tor = new SetDataSetResult();

            tor.Item = item;

            try
            {
                // Recupero il documento principale
                tor.Chain = FacadeFactory.Instance.DocumentSeriesItemFacade.GetMainChainInfo(tor.Item);
            }
            catch (Exception ex)
            {
                throw new SetDataSetResultException(tor, "Errore in fase di recupero documento catena principale.", ex);
            }

            try
            {
                // Verifico data ultimo aggiornamento
                tor.Step = 100;

                if (!saveAlways && !tor.Chain.Documents.IsNullOrEmpty() && tor.Chain.Attributes.ContainsKey(AttributeDataUltimoAggiornamento))
                {
                    DateTime lastUpdate = DateTime.MinValue;
                    if (!DateTime.TryParse(tor.Chain.Attributes[AttributeDataUltimoAggiornamento], out lastUpdate))
                    {
                        tor.Chain.AddAttribute(AttributeDataUltimoAggiornamento, pub.metadata.dataUltimoAggiornamentoDataset.ToString("s"));
                    }
                    tor.LastUpdate = lastUpdate;
                    FileLogger.Debug(LoggerName, string.Format("tor.LastUpdate = {0}", tor.LastUpdate.Date));
                    FileLogger.Debug(LoggerName, string.Format("pub.metadata.dataUltimoAggiornamentoDataset.Date = {0}", pub.metadata.dataUltimoAggiornamentoDataset.Date));

                    // Aggiorno solo se la data in arrivo è maggiore di quella salvata
                    if (pub.metadata.dataUltimoAggiornamentoDataset.Date <= tor.LastUpdate.Date)
                    {
                        tor.Updated = false;
                        return(tor);
                    }
                }
                tor.Updated = true;
            }
            catch (Exception ex)
            {
                throw new SetDataSetResultException(tor, "Errore in fase di verifica data ultimo aggiornamento.", ex);
            }

            try
            {
                // Aggiornamento necessario, eseguo eventaule Flush del documento
                tor.Step = 200;
                if (!tor.Chain.Documents.IsNullOrEmpty())
                {
                    FlushDocuments(tor.Item);
                    tor.Flushed = true;
                    // Ricarico la nuova catena creata
                    tor.Chain = FacadeFactory.Instance.DocumentSeriesItemFacade.GetMainChainInfo(tor.Item);
                }
            }
            catch (Exception ex)
            {
                throw new SetDataSetResultException(tor, "Errore in fase di Flush del documento.", ex);
            }

            try
            {
                // Salvo il documento nella catena
                tor.Step = 300;
                tor.SerializedDataSet = AVCPHelper.Serialize(pub);
                var doc = new MemoryDocumentInfo(tor.SerializedDataSet.ToBytes(), "dataset.xml", "");
                tor.Chain.AddDocument(doc);
            }
            catch (Exception ex)
            {
                throw new SetDataSetResultException(tor, "Errore in fase di salvataggio del documento in catena.", ex);
            }

            try
            {
                // Riporto i Metadati in Serie Documentale
                tor.Step = 400;

                tor.Chain.AddAttribute(AttributeUrlFile, string.Format(DocSuiteContext.Current.ProtocolEnv.AVCPDatasetUrlMask, tor.Item.Id));
                if (pub.metadata.dataUltimoAggiornamentoDataset != DateTime.MinValue)
                {
                    tor.Chain.AddAttribute(AttributeDataUltimoAggiornamento, pub.metadata.dataUltimoAggiornamentoDataset.ToString("s"));
                }
                if (pub.metadata.licenza != null)
                {
                    tor.Chain.AddAttribute(AttributeLicenza, pub.metadata.licenza.ToString());
                }
                tor.Chain.AddAttribute(AttributeAbstract, pub.metadata.@abstract);
                tor.Chain.AddAttribute(AttributeAnnoRiferimento, pub.metadata.annoRiferimento.ToString());
                tor.Chain.AddAttribute(AttributeTitolo, pub.metadata.titolo);
                if (pub.metadata.dataPubblicazioneDataset != DateTime.MinValue)
                {
                    tor.Chain.AddAttribute(AttributeDataPubblicazione, pub.metadata.dataPubblicazioneDataset.ToString("s"));
                }
                tor.Chain.AddAttribute(AttributeEntePubblicatore, pub.metadata.entePubblicatore);
            }
            catch (Exception ex)
            {
                throw new SetDataSetResultException(tor, "Errore in fase di impostazione attributi in catena.", ex);
            }

            try
            {
                // Eseguo il salvataggio dell'Item
                tor.Step = 500;
                FacadeFactory.Instance.DocumentSeriesItemFacade.UpdateDocumentSeriesItem(tor.Item, tor.Chain, username, $"Modificata registrazione AVCP {tor.Item.Year:0000}/{tor.Item.Number:0000000}");

                // Invio comando di update alle WebApi
                if (tor.Item.Status == DocumentSeriesItemStatus.Active)
                {
                    FacadeFactory.Instance.DocumentSeriesItemFacade.SendUpdateDocumentSeriesItemCommand(tor.Item);
                }

                tor.Saved = true;
            }
            catch (Exception ex)
            {
                throw new SetDataSetResultException(tor, "Errore in fase di salvataggio finale.", ex);
            }

            return(tor);
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Ritorna le aziende invitate.
 /// </summary>
 /// <param name="pub"></param>
 /// <returns>String vuota per future implementazioni</returns>
 public string GetAziendeInvitate(pubblicazione pub)
 {
     return(GetAziendePartecipanti(pub));
 }
Ejemplo n.º 11
0
        /// <summary>
        /// Aggiorna gli attributi della serie documentale per bandi di gara e contratti
        /// </summary>
        /// <param name="item"></param>
        /// <param name="pub"></param>
        /// <param name="archiveInfo"></param>
        /// <param name="chain"></param>
        /// <returns></returns>
        public BiblosChainInfo UpdateAttributeBandiDiGara(DocumentSeriesItem item, pubblicazione pub, ArchiveInfo archiveInfo, BiblosChainInfo chain)
        {
            foreach (ArchiveAttribute attribute in archiveInfo.Attributes)
            {
                string           valueString = string.Empty;
                DynamicAttribute attr;

                try
                {
                    attr = EnumHelper.ParseDescriptionToEnum <DynamicAttribute>(attribute.Name);
                }
                catch (Exception)
                {
                    continue;
                }

                switch (attr)
                {
                case DynamicAttribute.Aggiudicatario:
                    valueString = this.GetAziendeAggiudicatarie(pub);
                    break;

                case DynamicAttribute.Lotti:
                    valueString = this.GetLotti(pub);
                    break;

                case DynamicAttribute.Liquidato:
                    valueString = this.GetImportoSommeLiquidate(pub).ToString();
                    break;

                case DynamicAttribute.DitteInvitate:
                    valueString = this.GetAziendeInvitate(pub);
                    break;

                case DynamicAttribute.DittePartecipanti:
                    valueString = this.GetAziendePartecipanti(pub);
                    break;

                case DynamicAttribute.ProceduraAggiudicazione:
                    valueString = this.GetSceltaContraente(pub);
                    break;

                case DynamicAttribute.ImportoComplessivo:
                    valueString = this.GetImportoAggiudicazione(pub).ToString();
                    break;

                case DynamicAttribute.StrutturaProponente:
                    valueString = this.GetStrutturaProponente(pub);
                    break;
                }

                if (!string.IsNullOrEmpty(valueString))
                {
                    chain.AddAttribute(attribute.Name, valueString);
                    continue;
                }

                DateTime valueDatetime = DateTime.MinValue;
                switch (EnumHelper.ParseDescriptionToEnum <DynamicAttribute>(attribute.Name))
                {
                case DynamicAttribute.DurataAl:
                    DateTime?endDate = this.GetDataFineLavori(pub);
                    if ((endDate.HasValue))
                    {
                        valueDatetime = endDate.Value;
                    }
                    break;

                case DynamicAttribute.DurataDal:
                    DateTime?startDate = this.GetDataInizioLavori(pub);
                    if ((startDate.HasValue))
                    {
                        valueDatetime = startDate.Value;
                    }
                    break;
                }

                if (valueDatetime != DateTime.MinValue)
                {
                    chain.AddAttribute(attribute.Name, valueDatetime.ToString());
                }
            }
            return(chain);
        }