예제 #1
0
        private void elimina()
        {
            bool conferma = false;

            dialogProvider.ShowConfirmation("Sei sicuro di voler eliminare questa Azione Automatica? \n\n(" + azioneAutomaticaSelezionata.nome + ")", "Elimina",
                                            (confermato) =>
            {
                conferma = confermato;
            });

            if (!conferma)
            {
                return;
            }

            AzioneAuto azione = azioneAutomaticaSelezionata;

            OrmUtil.forseAttacca <AzioneAuto>(ref azione);
            LumenEntities dbContext = UnitOfWorkScope.currentDbContext;

            dbContext.AzioniAutomatiche.Remove(azione);
            dbContext.SaveChanges();

            rileggereAzioniAutomatiche();
        }
예제 #2
0
        /*
         *              public ObjectResult<TEntity> execute() {
         *                      ObjectSet<TEntity> objectSet = UnitOfWorkScope.CurrentObjectContext.ObjectContext.CreateObjectSet<TEntity>();
         *                      return objectSet.Execute( MergeOption.AppendOnly );
         *              }
         */

        public void refresh(TEntity entita)
        {
            // Se era staccato l'oggetto, allora lo riattacco.
            OrmUtil.forseAttacca <TEntity>(ref entita);

            // Poi lo rinfesco dal db
            UnitOfWorkScope.currentObjectContext.Refresh(RefreshMode.StoreWins, entita);
        }
예제 #3
0
        public virtual void update(ref TEntity entita, bool forzaDaModificare)
        {
            // Riattacco l'entità
            OrmUtil.forseAttacca <TEntity>(ref entita);

            // Flaggo l'oggetto come modificato. In questo modo mi assicuro che quando chiamero il SaveChanges, questo verrà aggiornato
            if (forzaDaModificare)
            {
                UnitOfWorkScope.currentObjectContext.ObjectStateManager.ChangeObjectState(entita, EntityState.Modified);
            }
        }
        /// <summary>
        /// Elimino e distruggo le foto sparse indicate
        /// </summary>
        /// <param name="fotosDaCanc"></param>
        public int elimina(IEnumerable <Fotografia> fotosDaCanc)
        {
            _possoChiudere = false;
            int conta = 0;

            _giornale.Info("E' stata richiesta la distruzione di " + fotosDaCanc.Count() + " fotografie. Iniizo eliminazione");

            LumenEntities lumenEntities = UnitOfWorkScope.currentDbContext;

            foreach (Fotografia ff in fotosDaCanc)
            {
                Fotografia ff2 = ff;
                OrmUtil.forseAttacca <Fotografia>(ref ff2);

                AiutanteFoto.disposeImmagini(ff2);

                // Elimino la foto da disco
                seEsisteCancella(PathUtil.nomeCompletoRisultante(ff2));
                seEsisteCancella(PathUtil.nomeCompletoProvino(ff2));
                seEsisteCancella(PathUtil.nomeCompletoOrig(ff2));

                // Poi dal database
                lumenEntities.Fotografie.Remove(ff2);
                _giornale.Debug("Eliminata Fotogarfia dal db: id=" + ff2.id + " num=" + ff2.numero);
                ++conta;
            }


            int test3 = lumenEntities.SaveChanges();


            _giornale.Info("Eliminazione foto completata. Tot = " + conta);
            _giornale.Debug("la SaveChanges ha ritornato: " + test3);

            if (test3 > 0)
            {
                // Rilancio un messaggio in modo che tutta l'applicazione (e tutti i componenti) vengano notificati
                FotoEliminateMsg msg = new FotoEliminateMsg(this as IEliminaFotoVecchieSrv);
                msg.listaFotoEliminate = fotosDaCanc;
                pubblicaMessaggio(msg);
            }

            _possoChiudere = true;
            return(conta);
        }
예제 #5
0
        internal void elimina(Carrello carrelloDacanc)
        {
            if (!carrelloDacanc.Equals(this.carrello))
            {
                OrmUtil.forseAttacca <Carrello>(ref carrelloDacanc, mioDbContext);
            }

            if (carrelloDacanc.venduto)
            {
                throw new InvalidOperationException("Carrello venduto. Impossibile cancellare");
            }

            mioDbContext.Carrelli.Remove(carrelloDacanc);

            mioDbContext.SaveChanges();

            isCarrelloModificato = false;
        }
        private void eliminareFormatoCarta()
        {
            FormatoCarta dacanc = formatoCartaSelezionato;

            try {
                try {
                    OrmUtil.forseAttacca(ref dacanc);
                } catch (Exception) {
                }

                var test = UnitOfWorkScope.currentDbContext.FormatiCarta.Remove(dacanc);

                var test2 = UnitOfWorkScope.currentDbContext.SaveChanges();

                // Se tutto è andato bene, allora rimuovo l'elemento dalla collezione visuale.
                formatoCartaSelezionato = null;
                formatiCarta.Remove(dacanc);
            } catch (Exception ee) {
                UnitOfWorkScope.currentObjectContext.ObjectStateManager.ChangeObjectState(dacanc, System.Data.Entity.EntityState.Unchanged);
                throw ee;
            }
        }
예제 #7
0
        private void rinomina()
        {
            InputBoxDialog d = new InputBoxDialog();

            d.Title = "Inserire il nome dell'azione";
            bool?esito = d.ShowDialog();

            if (esito != true)
            {
                return;
            }

            AzioneAuto azione = azioneAutomaticaSelezionata;

            OrmUtil.forseAttacca <AzioneAuto>(ref azione);
            azione.nome = d.inputValue.Text;
            OrmUtil.cambiaStatoModificato(azione);

            azioneAutomaticaSelezionata = azione;

            rileggereAzioniAutomatiche();

            dialogProvider.ShowMessage("Modifica Effettuata con successo", "Avviso");
        }
예제 #8
0
        /// <summary>
        /// Se una azione automatica contiene una mascheratura orientabile (quindi doppia)
        /// posso disassociarla e creare una nuova azione
        /// </summary>
        void disassociareMascheratura()
        {
            CorrezioniList correzioniList = null;
            AzioneAuto     azioneAuto     = azioneAutomaticaSelezionata;

            MascheraturaOrientabile mascheraturaOrientabile = null;

            // Controllo che l'azione corrente contenga una mascheratura orientabile
            if (azioneAuto.correzioniXml != null)
            {
                correzioniList = SerializzaUtil.stringToObject <CorrezioniList>(azioneAuto.correzioniXml);
                if (correzioniList != null && correzioniList.Count > 0)
                {
                    mascheraturaOrientabile = (MascheraturaOrientabile)correzioniList.SingleOrDefault(mo => mo is MascheraturaOrientabile);
                }
            }

            if (mascheraturaOrientabile == null)
            {
                dialogProvider.ShowError("L'azione selezionata non contiene una <MascheraturaOrientabile>.\nSolo queste si possono separare!", "Azione non separabile", null);
                return;
            }

            // ok procedo a separare le cornici
            // Sostituisco la correzione nella lista, cercando di mettere quella nuova nella stessa posizione
            Mascheratura masH = mascheraturaOrientabile.mascheraturaH;
            Mascheratura masV = mascheraturaOrientabile.mascheraturaV;

            // Elimino la mascheratura doppia ...
            correzioniList.Remove(mascheraturaOrientabile);
            // aggiungo solo la mascheratura Orizzontale
            correzioniList.Insert(0, masV);

            // Aggiorno l'entità sul db
            OrmUtil.forseAttacca <AzioneAuto>(ref azioneAuto);
            azioneAuto.correzioniXml = SerializzaUtil.objectToString(correzioniList);

            // Ora creo l'altra azione
            CorrezioniList correzioniList2 = new CorrezioniList();

            correzioniList2.Add(masH);
            AzioneAuto azioneV = new AzioneAuto {
                id            = Guid.NewGuid(),
                attivo        = true,
                nome          = "Separata",
                correzioniXml = SerializzaUtil.objectToString(correzioniList2)
            };

            UnitOfWorkScope.currentDbContext.AzioniAutomatiche.Add(azioneV);

            // Ora aggiungo anche alla collezione visiva
            azioniAutomatiche.Add(azioneV);

            deselezionareTutto();

            // Purtroppo non si aggiornano le icone di overlay. devo ricaricare.
            App.Current.Dispatcher.BeginInvoke(new Action(() => {
                rileggereAzioniAutomaticheCommand.Execute(null);
            }
                                                          ));
        }
예제 #9
0
        void forseAssociareMaschere()
        {
            if (!modalitaAssociazione)
            {
                return;
            }

            // Per poter iniziare l'associazione, ocorre che la riga selezionata, contenga una mascheratura
            Mascheratura mascheratura2 = estraiMascheratura(azioneAutomaticaSelezionata);

            if (mascheratura2 == null)
            {
                dialogProvider.ShowError("L'azione selezionata non contiene Mascheratura", "Azioni non associate", null);
                return;
            }

            // Dalla prima azione, estraggo la mascheratura, perché devo controllare che sia di Orientamento opposto alla prima che ho fissato.
            CorrezioniList correzioni1   = SerializzaUtil.stringToObject <CorrezioniList>(azioneAutoAssociare1.correzioniXml);
            Mascheratura   mascheratura1 = (Mascheratura)correzioni1.ToList <Correzione>().FirstOrDefault(c => c is Mascheratura);

            var ratio1 = mascheratura1.width / mascheratura1.height;
            var ratio2 = mascheratura2.width / mascheratura2.height;

            if ((ratio1 < 1 && ratio2 < 1) || (ratio1 > 1 && ratio2 > 1))
            {
                dialogProvider.ShowError("Le maschere devono ossere di diverso orientamento.\nUna orizzontale ed una verticale!", "Azioni non associate", null);
                return;
            }

            // Ok : adesso posso procedere alla associazione

            MascheraturaOrientabile mo = new MascheraturaOrientabile();

            mo.mascheraturaH = (ratio1 < 1 ? mascheratura2 : mascheratura1);
            mo.mascheraturaV = (ratio1 < 1 ? mascheratura1 : mascheratura2);

            using (new UnitOfWorkScope()) {
                // Sostituisco la correzione nella lista, cercando di mettere quella nuova nella stessa posizione
                int pos = correzioni1.IndexOf(mascheratura1);
                correzioni1.RemoveAt(pos);
                correzioni1.Insert(pos, mo);

                // Rimuovo l'azione2 dalla collezione a video
                AzioneAuto azioneDacanc = azioneAutomaticaSelezionata;
                azioniAutomatiche.Remove(azioneDacanc);

                // Ora vado ad aggiornare l'azione1 con le correzioni nuove
                AzioneAuto azione = azioneAutoAssociare1;
                OrmUtil.forseAttacca <AzioneAuto>(ref azione);
                azioneAutoAssociare1.correzioniXml = SerializzaUtil.objectToString(correzioni1);

                // Elimino dal db la azione2
                OrmUtil.forseAttacca <AzioneAuto>(ref azioneDacanc);

                // Rimuovo l'azione dal database
                UnitOfWorkScope.currentDbContext.AzioniAutomatiche.Remove(azioneDacanc);

                UnitOfWorkScope.currentDbContext.SaveChanges();

                // Torno in modalità normale
                modalitaAssociazione = false;
            }

            // Purtroppo non si aggiornano le icone di overlay. devo ricaricare.
            App.Current.Dispatcher.BeginInvoke(new Action(() => {
                rileggereAzioniAutomaticheCommand.Execute(null);
            }
                                                          ));
        }
예제 #10
0
        public void clonaImmagineIncorniciata(Fotografia fotoOrig, string nomeFileImg)
        {
            FileInfo fileInfoSrc   = new FileInfo(fotoOrig.nomeFile);
            string   nomeOrig      = fileInfoSrc.Name;
            string   nomeFotoClone = ClonaImmaginiWorker.getNomeFileClone(fotoOrig);
            string   nomeFileDest  = Path.Combine(Config.Configurazione.cartellaRepositoryFoto, Path.GetDirectoryName(fotoOrig.nomeFile), nomeFotoClone);

            //Sposto la foto nella coartellaRepository e gli attribuisco il suo nome originale.
            File.Move(nomeFileImg, nomeFileDest);

            Fotografia fotoMsk = null;

            using (new UnitOfWorkScope(false))
            {
                try
                {
                    fotoMsk    = new Fotografia();
                    fotoMsk.id = Guid.NewGuid();
                    fotoMsk.dataOraAcquisizione = fotoOrig.dataOraAcquisizione;

                    Fotografo f = fotoOrig.fotografo;
                    OrmUtil.forseAttacca <Fotografo>(ref f);
                    fotoMsk.fotografo = f;

                    if (fotoOrig.evento != null)
                    {
                        Evento e = fotoOrig.evento;
                        OrmUtil.forseAttacca <Evento>(ref e);
                        fotoMsk.evento = e;
                    }

                    fotoMsk.didascalia = fotoOrig.didascalia;
                    fotoMsk.numero     = fotoOrig.numero;
                    // Le correzioni non devo duplicarle perché non sono tipiche della composizione finale, ma della foto originale.

                    fotoMsk.faseDelGiorno = fotoOrig.faseDelGiorno;
                    fotoMsk.giornata      = fotoOrig.giornata;

                    // il nome del file, lo memorizzo solamente relativo
                    // scarto la parte iniziale di tutto il path togliendo il nome della cartella di base delle foto.
                    // Questo perché le stesse foto le devono vedere altri computer della rete che
                    // vedono il percorso condiviso in maniera differente.
                    fotoMsk.nomeFile = Path.Combine(Path.GetDirectoryName(fotoOrig.nomeFile), nomeFotoClone);

                    fotografieRepositorySrv.addNew(fotoMsk);
                    fotografieRepositorySrv.saveChanges();
                }

                catch (Exception ee)
                {
                    _giornale.Error("Non riesco ad inserire una foto clonata. Nel db non c'è ma nel filesystem si: " + fotoOrig.nomeFile, ee);
                }

                AiutanteFoto.creaProvinoFoto(nomeFileDest, fotoMsk);

                // Libero la memoria occupata dalle immagini, altrimenti esplode.
                AiutanteFoto.disposeImmagini(fotoMsk, IdrataTarget.Tutte);

                // Notifico la lista delle foto da mandare in modifica
                NuovaFotoMsg msg = new NuovaFotoMsg(this, fotoMsk);
//				msg.descrizione += Configurazione.ID_FOTOGRAFO_ARTISTA;
                LumenApplication.Instance.bus.Publish(msg);
            }
        }
예제 #11
0
        private void modificaMetadatiFotografie(Fotografia foto, MetadatiFoto metadati, bool forzaNullo)
        {
            // L'entità è sicuramente staccata
            //UnitOfWorkScope.CurrentObjectContext.Fotografie.Attach( foto );

            Fotografia f = foto;

            try {
                OrmUtil.forseAttacca <Fotografia>(ref f);
            } catch (Exception) {
            }

            //Consento la modifica anche di valori nulli
            //if( !String.IsNullOrWhiteSpace( metadati.didascalia ) )
            if (metadati.usoDidascalia)
            {
                if (String.IsNullOrWhiteSpace(metadati.didascalia))
                {
                    foto.didascalia = null;
                }
                else
                {
                    foto.didascalia = metadati.didascalia.Trim().ToUpper();                      // pulisco spazi e converto in maiuscolo
                }
            }
            else
            {
                if (forzaNullo)
                {
                    foto.didascalia = null;
                }
            }

            if (metadati.usoFaseDelGiorno)
            {
                if (metadati.faseDelGiorno != null)
                {
                    foto.faseDelGiorno = (short)metadati.faseDelGiorno;
                }
                else
                {
                    foto.faseDelGiorno = null;
                }
            }

            else
            {
                if (forzaNullo)
                {
                    foto.faseDelGiorno = null;
                }
            }

            if (metadati.usoEvento)
            {
                foto.evento = metadati.evento;
            }
            else
            {
                if (forzaNullo)
                {
                    foto.evento = null;
                }
            }

            OrmUtil.cambiaStatoModificato(f);
        }
예제 #12
0
        public bool  modificaMetadatiFotografie(IEnumerable <Fotografia> fotografie, MetadatiFoto metadati)
        {
            bool esito = false;

            try
            {
                // riattacco l'entità che non si sa mai
                if (metadati.evento != null)
                {
                    try {
                        Evento e = metadati.evento;
                        OrmUtil.forseAttacca <Evento>(ref e);
                    } catch (Exception ee) {
                        _giornale.Debug("Potenziale errore", ee);
                    }
                }

                foreach (Fotografia f in fotografie)
                {
                    Fotografia fotografia = f;
                    try {
                        OrmUtil.forseAttacca(ref fotografia);
                    } catch (Exception ee) {
                        _giornale.Debug("Potenziale errore", ee);
                        fotografia = UnitOfWorkScope.currentDbContext.Fotografie.Single(f2 => f2.id == f.id);
                    }

#if DEBUG
                    String didascaliaNew = null;
                    if (metadati.usoDidascalia)
                    {
                        if (!String.IsNullOrWhiteSpace(metadati.didascalia))
                        {
                            didascaliaNew = metadati.didascalia.TrimEnd().ToUpper();
                        }
                    }

                    string strDidascaliaOld    = fotografia.didascalia;
                    string strFaseDelGiornoOld = fotografia.faseDelGiorno == null ? "empty" : FaseDelGiornoUtil.valoreToString(fotografia.faseDelGiorno);
                    string strEventoOld        = fotografia.evento == null ? "empty" : fotografia.evento.descrizione;

                    string strFaseDelGiornoNew = metadati.faseDelGiorno == null ? "empty" : metadati.faseDelGiorno.ToString();
                    string strEventoNew        = metadati.evento == null ? "empty" : metadati.evento.descrizione;

                    String msg = String.Format("Modificati metadati: {0} da: dida:{1} faseGG:{2} evento:{3} in dida:{4} faseGG:{5} evento:{6}",
                                               fotografia.ToString(),
                                               strDidascaliaOld,
                                               strFaseDelGiornoOld,
                                               strEventoOld,
                                               didascaliaNew,
                                               strFaseDelGiornoNew,
                                               strEventoNew
                                               );
#endif

                    modificaMetadatiFotografie(fotografia, metadati);

#if DEBUG
                    _giornale.Debug(msg);
#endif
                }

                UnitOfWorkScope.currentDbContext.SaveChanges();
                _giornale.Debug("Modifica metadati salvataggio eseguito. Ora committo la transazione");

                _giornale.Info("Commit metadati andato a buon fine");

                esito = true;
            } catch (Exception eee) {
                _giornale.Error("Modifica metadati", eee);
                esito = false;
                _giornale.Error("Impossibile modificare metadati", eee);
            }

            return(esito);
        }
예제 #13
0
        public Carrello Applica(Carrello cin, Promozione promo, PromoContext contestoDiVendita)
        {
            PromoProdXProd _promoProdXProd = (PromoProdXProd)promo;

            try {
                OrmUtil.forseAttacca <PromoProdXProd>(ref _promoProdXProd);
            } catch (Exception) {
            }

            // NOTA: non controllo più il flag di applicazione stampe/file che c'è sul database.
            //       tanto è il prodotto di innesco che mi guida.

            var qta = cin.righeCarrello
                      .Where(r => r.prezzoLordoUnitario > 0 && r.prodotto.Equals(_promoProdXProd.prodottoInnesco))
                      .Sum(r2 => r2.quantita);

            // Non entro in promozione: esco subito
            if (qta < _promoProdXProd.qtaInnesco)
            {
                return(cin);
            }

            // Ok la quantità è sufficiente per cascare nella promo.
            // Ora agisco sul carrello

            // Ora determino quante foto di quella misura posso elargire.
            var multiploRegali = ((int)(qta / _promoProdXProd.qtaInnesco));
            var qtaElarg       = multiploRegali * (_promoProdXProd.qtaElargito);

            _giornale.Debug("devo elargire " + qtaElarg + " omaggio");

            bool elargito = false;

            // -- Ora itero le righe del carrello con quel tipo e prendo per prima le righe a prezzo pieno.

            var righeOma1 = cin.righeCarrello
                            .Where(r => r.prodotto.Equals(_promoProdXProd.prodottoElargito) && r.sconto == null);
            var righeOma2 = cin.righeCarrello
                            .Where(r => r.prodotto.Equals(_promoProdXProd.prodottoElargito) && r.sconto != null).OrderByDescending(r => r.sconto);

            // Faccio due giri : 1) righe non ancora scontate. 2) righe scontate
            for (int ii = 1; ii < 2; ii++)
            {
                var righeOma = (ii == 1 ? righeOma1 : righeOma2);
                foreach (RigaCarrello riga in righeOma)
                {
                    if (qtaElarg >= riga.quantita)
                    {
                        riga.sconto = riga.prezzoLordoUnitario;
                        qtaElarg   -= riga.quantita;
                        elargito    = true;
                    }
                }
            }

            // Aggiungo la promo alla lista di quelle elargite
            if (elargito && contestoDiVendita.promoApplicate.Contains(promo) == false)
            {
                contestoDiVendita.promoApplicate.Add(promo);
            }

            return(cin);
        }
예제 #14
0
 private void modificaDidascaliaFotografie(Fotografia ff, String findBarCode)
 {
     OrmUtil.forseAttacca <Fotografia>(ref ff);
     ff.didascalia = findBarCode;
     OrmUtil.cambiaStatoModificato(ff);
 }
예제 #15
0
        /**
         * dato il nome del file della immagine, creo l'oggetto Fotografia e lo aggiungo al suo contenitore
         * (in pratica faccio una insert nel database).
         */
        private Fotografia aggiungiFotoDB(Fotografia foto, string nomeFileClone)
        {
            // Ad ogni foto persisto.
            // Se per esempio ho 500 foto da salvare, non posso permettermi che se una salta, perdo anche le altre 499 !
            Fotografia fotoClone = null;

            LumenEntities objContext = UnitOfWorkScope.currentDbContext;

            try
            {
                fotoClone    = new Fotografia();
                fotoClone.id = Guid.NewGuid();
                fotoClone.dataOraAcquisizione = foto.dataOraAcquisizione;

                Fotografo f = foto.fotografo;
                OrmUtil.forseAttacca <Fotografo>(ref f);
                fotoClone.fotografo = f;

                if (foto.evento != null)
                {
                    Evento e = foto.evento;
                    OrmUtil.forseAttacca <Evento>(ref e);
                    fotoClone.evento = e;
                }

                fotoClone.didascalia    = foto.didascalia;
                fotoClone.numero        = foto.numero;
                fotoClone.correzioniXml = foto.correzioniXml;

                if (foto.imgOrig != null)
                {
                    fotoClone.imgOrig = (IImmagine)foto.imgOrig.Clone();
                }
                if (foto.imgProvino != null)
                {
                    fotoClone.imgProvino = (IImmagine)foto.imgProvino.Clone();
                }
                if (foto.imgRisultante != null)
                {
                    fotoClone.imgRisultante = (IImmagine)foto.imgRisultante.Clone();
                }

                fotoClone.faseDelGiorno = foto.faseDelGiorno;
                fotoClone.giornata      = foto.giornata;

                // il nome del file, lo memorizzo solamente relativo
                // scarto la parte iniziale di tutto il path togliendo il nome della cartella di base delle foto.
                // Questo perché le stesse foto le devono vedere altri computer della rete che
                // vedono il percorso condiviso in maniera differente.
                fotoClone.nomeFile = nomeFileClone;

                objContext.Fotografie.Add(fotoClone);

                objContext.SaveChanges();
                ++conta;

                _giornale.Debug("Clonata nuova foto: " + foto.ToString() + " ora sono " + conta);
            }
            catch (Exception ee)
            {
                _giornale.Error("Non riesco ad inserire una foto clonata. Nel db non c'è ma nel filesystem si: " + fotoClone.nomeFile, ee);
            }

            return(foto);
        }