public void CarrelloTest1()
        {
            using (new UnitOfWorkScope()) {
                Carrello carrelloTest = recuperaCarrelloPerTest();

                gestoreCarrello.caricaCarrello(carrelloTest.id);

                // Cambio una info nella testata e una descrizione in un riga
                carrelloTest.note = DateTime.Now.ToString();

                // Cambio anche una nota sulle righe per causare
                foreach (var riga in carrello.righeCarrello)
                {
                    riga.descrizione = DateTime.Now.ToString();
                }

                int numRigheOrig = carrello.righeCarrello.Count;

                // ora aggiungo una riga in fondo. Prendo una foto caso che non sia già nel carrello
                var          fotos = carrello.righeCarrello.Select(r => r.fotografia).Distinct();
                RigaCarrello riga3 = new RigaCarrello();
                riga3.fotografia    = UnitOfWorkScope.currentDbContext.Fotografie.AsEnumerable().Except(fotos).First();
                riga3.quantita      = 1;
                riga3.fotografo     = riga3.fotografia.fotografo;
                riga3.prodotto      = UnitOfWorkScope.currentDbContext.FormatiCarta.First();
                riga3.discriminator = RigaCarrello.TIPORIGA_STAMPA;
                riga3.descrizione   = "DACANC";
                riga3.nomeStampante = Costanti.NomeStampantePdf;
                gestoreCarrello.aggiungiRiga(riga3);

                // Prima salvo senza cambiare niente.
                gestoreCarrello.salvare();

                // -----
                // Eseguo una query sql con un altra connessione, per vedere che la riga sia stata aggiunta
                object[] parametri = { carrello.id };
                var      cntQuery  = UnitOfWorkScope.currentDbContext.Database.SqlQuery <int>("select count(*) from RigheCarrelli where carrello_id = {0}", parametri);
                int      numRigheA = cntQuery.First <int>();
                Assert.IsTrue(numRigheA == numRigheOrig + 1);

                // Ora riprendo il carrello ed elimino la riga 3
                gestoreCarrello.caricaCarrello(carrelloTest.id);
                RigaCarrello rigaDacanc = carrello.righeCarrello.Single(r => r.descrizione == "DACANC");
                gestoreCarrello.removeRiga(rigaDacanc);

                // Eseguo una query sql con un altra connessione, per vedere che ancora non c'è stato il commit
                cntQuery = UnitOfWorkScope.currentDbContext.Database.SqlQuery <int>("select count(*) from RigheCarrelli where carrello_id = {0}", parametri);
                int numRigheB = cntQuery.First <int>();
                Assert.IsTrue(numRigheB == numRigheA);


                gestoreCarrello.salvare();


                // Eseguo una query sql con un altra connessione, per vedere che la riga sia stata eliminata
                cntQuery = UnitOfWorkScope.currentDbContext.Database.SqlQuery <int>("select count(*) from RigheCarrelli where carrello_id = {0}", parametri);
                int numRigheC = cntQuery.First <int>();
                Assert.IsTrue(numRigheC == numRigheOrig);
            }
        }
Example #2
0
        // TODO forse sarebbe più consono chiamare il clona su tutti i componenti ?? (carrello, righe, provvigioni)
        public Carrello ClonaCarrello()
        {
            Carrello clonato = new Carrello();

            clonato.giornata            = DateTime.Today;
            clonato.tempo               = DateTime.Now;
            clonato.intestazione        = carrello.intestazione;
            clonato.note                = carrello.note;
            clonato.prezzoDischetto     = carrello.prezzoDischetto;
            clonato.totaleAPagare       = carrello.totaleAPagare;
            clonato.totMasterizzate     = carrello.totMasterizzate;
            clonato.visibileSelfService = carrello.visibileSelfService;

            clonato.righeCarrello = new List <RigaCarrello>();
            foreach (RigaCarrello r in carrello.righeCarrello)
            {
                RigaCarrello r2 = new RigaCarrello();
                r2.carrello            = clonato;
                r2.bordiBianchi        = r.bordiBianchi;
                r2.descrizione         = r.descrizione;
                r2.discriminator       = r.discriminator;
                r2.prodotto            = r.prodotto;
                r2.fotografia          = r.fotografia;
                r2.fotografo           = r.fotografo;
                r2.nomeStampante       = r.nomeStampante;
                r2.prezzoLordoUnitario = r.prezzoLordoUnitario;
                r2.prezzoNettoTotale   = r.prezzoNettoTotale;
                r2.quantita            = r.quantita;
                r2.sconto = r.sconto;
                clonato.righeCarrello.Add(r2);
            }

            return(clonato);
        }
Example #3
0
        public IHttpActionResult PutCarrello(int id, Carrello carrello)
        {
            /*
             * if (!ModelState.IsValid)
             * {
             *  return BadRequest(ModelState);
             * }
             */
            if (id != carrello.CarrelloID)
            {
                return(BadRequest());
            }

            db.Entry(carrello).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!CarrelloExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Example #4
0
        public void PromoFile6x5Test()
        {
            using (new UnitOfWorkScope(false)) {
                decimal prezzoPromoDesiderato = (decimal)(3.5 * 5);
                _impl.creareNuovoCarrello();

                LumenEntities     dbContext = UnitOfWorkScope.currentDbContext;
                List <Fotografia> fotos     = (from f in dbContext.Fotografie.Include("fotografo")
                                               select f).Take(6).ToList();

                // Controllo che ci siano abbastanza foto nel database
                Assert.IsTrue(fotos.Count == 6);

                _impl.aggiungereMasterizzate(fotos);

                _impl.ricalcolaTotaleCarrello();
                var totPagarePrima = _impl.carrello.totaleAPagare;

                Carrello cart = _impl.CalcolaPromozioni(true);

                var totPagareDopo = cart.totaleAPagare;

                Assert.AreEqual(totPagareDopo, prezzoPromoDesiderato);
            }
        }
Example #5
0
        public Carrello Applica(Carrello cin, Promozione _promo, PromoContext contestoDiVendita)
        {
            PromoStessaFotoSuFile promo = (PromoStessaFotoSuFile)_promo;

            bool elargito = false;

            // Vediamo se esiste una foto con il rispettivo file.
            foreach (RigaCarrello r in cin.righeCarrello)
            {
                if (r.prezzoNettoTotale > 0 && r.discriminator == RigaCarrello.TIPORIGA_STAMPA)
                {
                    RigaCarrello rigaFile = cin.righeCarrello.SingleOrDefault(r2 => r2.isTipoMasterizzata && r2.fotografia == r.fotografia);
                    if (rigaFile != null)
                    {
                        // trovato il file che corrisponde a questa foto.
                        rigaFile.sconto = rigaFile.prezzoLordoUnitario - promo.prezzoFile;

                        rigaFile.prezzoNettoTotale = GestoreCarrello.calcValoreRiga(rigaFile);
                        elargito = true;

                        _giornale.Debug("Elargita per foto num. " + rigaFile.fotografia.numero);
                    }
                }
            }

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

            return(cin);
        }
Example #6
0
        /// <summary>
        /// Sto per aggiungere una riga nuova al carrello.
        /// Controllo che non esista già una riga con lo stesso "prodotto" e con la stessa "foto"
        /// La stessa foto stampata, però può esistere in due formati diversi (prodotti)
        /// </summary>
        public static bool isStessaFotoInCarrello(Carrello carrello, RigaCarrello rigaNew)
        {
            bool esisteGia = carrello.righeCarrello
                             .Any(r => r.prodotto.Equals(rigaNew.prodotto) &&
                                  r.fotografia.Equals(rigaNew.fotografia));

            return(esisteGia);
        }
Example #7
0
        private static CarrelloDto idrataDaCarrello(Carrello carrello)
        {
            var dto = new CarrelloDto();

            dto.id        = carrello.id;
            dto.titolo    = carrello.intestazione;
            dto.isVenduto = carrello.venduto;
            return(dto);
        }
        public void CarrelloTest3EliminaRiga()
        {
#if COSI_FUNZIONA_BENE
            Guid guid = new Guid("625a1ed1-6e22-4de7-b8c9-2420de1bcb5e");
            using (LumenEntities ctx = new LumenEntities()) {
                Carrello carrello = ctx.Carrelli
                                    .Include("righeCarrello")
                                    .Single(r => r.id == guid);

                int          conta      = 0;
                RigaCarrello rigaDacanc = null;
                foreach (var riga in carrello.righeCarrello)
                {
                    if (++conta == 2)
                    {
                        rigaDacanc = riga;
                    }
                }

                if (rigaDacanc != null)
                {
                    carrello.righeCarrello.Remove(rigaDacanc);
                    ctx.RigheCarrelli.Remove(rigaDacanc);
                }

                ctx.SaveChanges();
            }
#endif
            // Cerco un carrello che non sia venduto, con almeno due righe
            Guid guid = Guid.Empty;

            using (LumenEntities ctx = new LumenEntities()) {
                Carrello carrello = ctx.Carrelli
                                    .Include("righeCarrello")
                                    .Where(c => c.venduto == false && c.righeCarrello.Count > 1)
                                    .FirstOrDefault();

                if (carrello != null)
                {
                    guid = carrello.id;
                }
            }

            if (guid != Guid.Empty)
            {
                // Carrello carrelloTest = recuperaCarrelloPerTest();
                using (GestoreCarrello ges = new GestoreCarrello()) {
                    ges.caricaCarrello(guid);

                    RigaCarrello rigaDacanc = ges.carrello.righeCarrello.AsEnumerable().ElementAt(1);
                    ges.removeRiga(rigaDacanc);
                    ges.salvare();
                }
            }
        }
Example #9
0
        public IHttpActionResult PostCarrello(Carrello carrello)
        {
            /*
             * if (!ModelState.IsValid)
             * {
             *  return BadRequest(ModelState);
             * }
             */
            db.TblCarrelli.Add(carrello);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = carrello.CarrelloID }, carrello));
        }
Example #10
0
        public void creaNuovo()
        {
            creaMioDbContext();

            carrello          = new Carrello();
            carrello.giornata = LumenApplication.Instance.stato.giornataLavorativa;

            carrello.righeCarrello = new EntityCollection <RigaCarrello>();
            //Metto un'intestazione automatica per distinguere il carrello autogenerato dagli altri
            // scarrello.intestazione = "Auto";
            isStatoModifica      = false;
            isCarrelloModificato = false;
        }
Example #11
0
        public IHttpActionResult DeleteCarrello(int id)
        {
            Carrello carrello = db.TblCarrelli.Find(id);

            if (carrello == null)
            {
                return(NotFound());
            }

            db.TblCarrelli.Remove(carrello);
            db.SaveChanges();

            return(Ok(carrello));
        }
Example #12
0
        public void CreaNuovoCarrelloPerClonazione()
        {
            if (possoClonareCarrello == false)
            {
                throw new InvalidOperationException("nessun carrello caricato");
            }

            Carrello clonato = ClonaCarrello();

            mioObjContext.Detach(carrello);
            carrello = clonato;

            isStatoModifica      = false;
            isCarrelloModificato = true;
        }
Example #13
0
        private void PromoCalcGenerico(int qtaP, int qtaM, int qtaG, decimal prezzoPromoDesiderato)
        {
            using (new UnitOfWorkScope(false)) {
                _impl.creareNuovoCarrello();

                ParamStampaFoto paramP = ricavaParamStampa("P");
                ParamStampaFoto paramM = ricavaParamStampa("M");
                ParamStampaFoto paramG = ricavaParamStampa("G");

                Dictionary <string, int> mappa = new Dictionary <string, int> {
                    { "P", qtaP },
                    { "M", qtaM },
                    { "G", qtaG }
                };
                int totFoto = mappa.Values.Sum();

                LumenEntities     dbContext = UnitOfWorkScope.currentDbContext;
                List <Fotografia> fotos     = (from f in dbContext.Fotografie.Include("fotografo")
                                               select f).Take(totFoto).ToList();

                // Controllo che ci siano abbastanza foto nel database
                Assert.IsTrue(fotos.Count == totFoto);

                contaStampate = 0;

                int qq = 0;
                _impl.aggiungereStampe(fotos.Skip(qq).Take(mappa["P"]), paramP);
                qq += mappa["P"];
                _impl.aggiungereStampe(fotos.Skip(qq).Take(mappa["M"]), paramM);
                qq += mappa["M"];
                _impl.aggiungereStampe(fotos.Skip(qq).Take(mappa["G"]), paramG);

                _impl.ricalcolaTotaleCarrello();
                var totPagarePrima = _impl.carrello.totaleAPagare;

                Carrello cart = _impl.CalcolaPromozioni(true);

                var totPagareDopo = cart.totaleAPagare;

                Assert.AreEqual(totPagareDopo, prezzoPromoDesiderato);
            }



            Console.WriteLine("FINITO");
        }
Example #14
0
        public ActionResult GetCatalogo()
        {
            Richiesta r = Deserialize <Richiesta>();

            _carrello           = new Carrello();
            _carrelloController = new CarrelloController(_carrello, _session);
            _catalogoController = new CatalogoController(_carrello, _session);
            Catalogo res = null;

            if (!GestoreSessione.GetGestoreSessione().VerificaSessione(r.Mittente))
            {
                GestoreSessione.GetGestoreSessione().EliminaSessione(r.Mittente);
                return(Content(Serialize <Catalogo>(res)));
            }
            res = _catalogoController.GetCatalogo((Supermarket)r.Parametri[0]);
            return(Content(Serialize <Catalogo>(res)));
        }
Example #15
0
        private Carrello recuperaCarrelloPerTest()
        {
            Carrello carrello = UnitOfWorkScope.currentDbContext.Carrelli
                                .Where(c => c.intestazione.Contains(Tag) && c.venduto == false)
                                .FirstOrDefault();

            if (carrello == null)
            {
                carrello = creaNuovoCarrelloPerTest();
            }
            else
            {
                // Stacco il carrello dalla sessione
                UnitOfWorkScope.currentObjectContext.Detach(carrello);
            }

            return(carrello);
        }
Example #16
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;
        }
Example #17
0
        public void PromoCalTest9()
        {
            using (new UnitOfWorkScope()) {
                _impl.creareNuovoCarrello();

                ParamStampaFoto paramM4 = ricavaParamStampa("M");

                int totFoto = 12;

                LumenEntities     dbContext = UnitOfWorkScope.currentDbContext;
                List <Fotografia> fotos     = (from f in dbContext.Fotografie.Include("fotografo")
                                               select f).Take(totFoto).ToList();

                // Controllo che ci siano abbastanza foto nel database
                Assert.IsTrue(fotos.Count == totFoto);

                contaStampate = 0;

                int qq = 0;
                // Delle 12 foto, metto solo le prime 4 in stampa.
                _impl.aggiungereStampe(fotos.Take(4), paramM4);

                // Poi metto tutte e 12 da masterizzare
                _impl.aggiungereMasterizzate(fotos);

                Assert.AreEqual(_impl.carrello.righeCarrello.Count, 4 + 12);

                _impl.ricalcolaTotaleCarrello();

                decimal totalePrePromo = (4 * PRZ_FRM_MED) + (totFoto * PRZ_FRM_FILE);
                Assert.AreEqual(_impl.carrello.totaleAPagare, totalePrePromo);

                Carrello cart = _impl.CalcolaPromozioni(true);

                var totalePostPromo = 0
                                      + (4 * PRZ_FRM_MED)                               /* 4 stampe a prezzo pieno */
                                      + (3 * 0)                                         /* 3 file in omaggio per il 10+3 */
                                      + (5 * PRZ_FRM_FILE)                              /* 6 file a prezzo pieno */
                                      + (4 * 1)                                         /* 4 file a prezzo scontato */
                ;

                Assert.AreEqual(cart.totaleAPagare, totalePostPromo, "tot carrello errato x promozioni");
            }
        }
Example #18
0
        public void PromoCalTest8()
        {
            using (new UnitOfWorkScope()) {
                _impl.creareNuovoCarrello();

                ParamStampaFoto paramM2 = ricavaParamStampa("M");
                paramM2.numCopie = 2;
                ParamStampaFoto paramM16 = ricavaParamStampa("M");
                paramM16.numCopie = 16;

                int totFoto = 2;

                LumenEntities     dbContext = UnitOfWorkScope.currentDbContext;
                List <Fotografia> fotos     = (from f in dbContext.Fotografie.Include("fotografo")
                                               select f).Take(totFoto).ToList();

                // Controllo che ci siano abbastanza foto nel database
                Assert.IsTrue(fotos.Count == totFoto);

                contaStampate = 0;

                int qq = 0;
                _impl.aggiungereStampe(fotos[0], paramM2);

                Assert.AreEqual(_impl.carrello.totaleAPagare, paramM2.numCopie * PRZ_FRM_MED);
                Assert.AreEqual(_impl.carrello.righeCarrello.Count, 1);

                _impl.aggiungereStampe(fotos[1], paramM16);

                Assert.AreEqual(_impl.carrello.righeCarrello.Count, 2);

                _impl.ricalcolaTotaleCarrello();
                var totPagarePrima = _impl.carrello.totaleAPagare;

                Assert.AreEqual(totPagarePrima, PRZ_FRM_MED * 18);

                Carrello cart = _impl.CalcolaPromozioni(true);

                var totPagareDopo = cart.totaleAPagare;

                Assert.AreEqual(totPagareDopo, PRZ_FRM_MED * 15, "valore carrello errato");
            }
        }
Example #19
0
        public void CarrelloTest2Cancella()
        {
            using (new UnitOfWorkScope()) {
                Carrello carrelloTest = recuperaCarrelloPerTest();

                // Eseguo una query sql con un altra connessione, per vedere che ci siano le righe
                object[]     parametri = { carrelloTest.id };
                const string sqlQuery  = "select count(*) from RigheCarrelli where carrello_id = {0}";

                var cntQuery  = UnitOfWorkScope.currentDbContext.Database.SqlQuery <int>(sqlQuery, parametri);
                int numRigheA = cntQuery.First <int>();
                Assert.IsTrue(numRigheA > 0);

                gestoreCarrello.elimina(carrelloTest);

                cntQuery = UnitOfWorkScope.currentDbContext.Database.SqlQuery <int>(sqlQuery, parametri);
                int numRigheC = cntQuery.First <int>();
                Assert.IsTrue(numRigheC == 0);
            }
        }
Example #20
0
        public void crudCarrello2()
        {
            using (LumenEntities context = new LumenEntities()) {
                Random r = new Random();

                Carrello cc = new Carrello();

                cc.id              = Guid.NewGuid();
                cc.giornata        = DateTime.Today;
                cc.tempo           = DateTime.Today;
                cc.intestazione    = "Test-" + r.Next(1000, 9999);
                cc.note            = "Prova";
                cc.prezzoDischetto = r.Next(1, 90);
                cc.totaleAPagare   = r.Next(10, 80);
                cc.totMasterizzate = (short)r.Next(1, 100);


                RigaCarrello rc = new RigaCarrello();
                rc.id                  = Guid.NewGuid();
                rc.carrello            = cc;
                rc.descrizione         = "Test-" + r.Next(1000, 9999);
                rc.discriminator       = "S";
                rc.prodotto            = context.FormatiCarta.First();
                rc.fotografo           = context.Fotografi.First();
                rc.prezzoLordoUnitario = r.Next(1, 12);
                rc.quantita            = (short)r.Next(1, 12);
                rc.prezzoNettoTotale   = rc.prezzoLordoUnitario * rc.quantita;
                rc.totFogliStampati    = 1;
                rc.sconto              = (decimal)r.Next(1, 12);
                rc.fotografia          = context.Fotografie.First();
                rc.bordiBianchi        = true;
                cc.righeCarrello.Add(rc);

                context.Carrelli.Add(cc);

                int test = context.SaveChanges();

                Assert.IsTrue(test > 0);
            }
        }
Example #21
0
        public void PromoCalTest10()
        {
            using (new UnitOfWorkScope()) {
                _impl.creareNuovoCarrello();

                ParamStampaFoto paramM = ricavaParamStampa("M");

                int totFoto = 12;

                LumenEntities     dbContext = UnitOfWorkScope.currentDbContext;
                List <Fotografia> fotos     = (from f in dbContext.Fotografie.Include("fotografo")
                                               select f).Take(totFoto).ToList();

                // Controllo che ci siano abbastanza foto nel database
                Assert.IsTrue(fotos.Count == totFoto);

                contaStampate = 0;

                int qq = 0;
                // Delle 12 foto in stampa.
                _impl.aggiungereStampe(fotos, paramM);

                // Poi metto 4 da masterizzare
                _impl.aggiungereMasterizzate(fotos.Take(4));

                Assert.AreEqual(_impl.carrello.righeCarrello.Count, 4 + 12);

                _impl.ricalcolaTotaleCarrello();

                decimal totalePrePromo = (totFoto * PRZ_FRM_MED) + (4 * PRZ_FRM_FILE);
                Assert.AreEqual(_impl.carrello.totaleAPagare, totalePrePromo);

                Carrello cart = _impl.CalcolaPromozioni(true);

                var totalePostPromo = ((12 - 2) * PRZ_FRM_MED) + (4 * 1);

                Assert.AreEqual(cart.totaleAPagare, totalePostPromo, "tot carrello errato x promozioni");
            }
        }
        public void spaccatoIncassiFotografiTest()
        {
            using (new UnitOfWorkScope()) {
                FormatoCarta formatoCarta = UnitOfWorkScope.currentDbContext.FormatiCarta.First();

                ParamStampaFoto paramStampa = new ParamStampaFoto {
                    nomeStampante = "doPDF 9",
                    formatoCarta  = formatoCarta,
                };



                _impl.creareNuovoCarrello();

                _impl.carrello.prezzoDischetto = (decimal)27.9;

                // Carico 3 fotografi tra quelli che hanno delle foto
                var          idFotografi = UnitOfWorkScope.currentDbContext.Fotografie.Select(f => f.fotografo).Distinct().Take(3);
                Fotografo [] arrayF      = idFotografi.ToArray();
                if (idFotografi.Count() != 3)
                {
                    return;
                }

                string par1   = arrayF[0].id;
                var    fotos1 = UnitOfWorkScope.currentDbContext.Fotografie.Where(f => f.fotografo.id == par1).Take(2).ToList();
                string par2   = arrayF[1].id;
                var    fotos2 = UnitOfWorkScope.currentDbContext.Fotografie.Where(f => f.fotografo.id == par2).Take(3).ToList();
                string par3   = arrayF[2].id;
                var    fotos3 = UnitOfWorkScope.currentDbContext.Fotografie.Where(f => f.fotografo.id == par3).Take(4).ToList();

                paramStampa.numCopie = 1;
                _impl.aggiungereStampe(fotos1, paramStampa);

                paramStampa.numCopie = 2;
                _impl.aggiungereStampe(fotos2, paramStampa);

                paramStampa.numCopie = 3;
                _impl.aggiungereStampe(fotos3, paramStampa);

                _impl.aggiungereMasterizzate(fotos1);
                _impl.aggiungereMasterizzate(fotos2);
                _impl.aggiungereMasterizzate(fotos3);

                string msgEsito = _impl.salvareCarrello();
                bool   esito    = (msgEsito == null);
                Assert.IsTrue(esito);

                Carrello cc = _impl.carrello;


                decimal soldi1 = (fotos1.Count() * 1 * formatoCarta.prezzo);
                decimal soldi2 = (fotos2.Count() * 2 * formatoCarta.prezzo);
                decimal soldi3 = (fotos3.Count() * 3 * formatoCarta.prezzo);
                decimal soldi  = soldi1 + soldi2 + soldi3 + (decimal)27.9;

                // Ora faccio un pò di verifiche
                Assert.IsTrue(cc.totaleAPagare == soldi);


                // Il totale da pagare, deve essere la somma degli incassi dei fotografi
                decimal somma = cc.incassiFotografi.Sum(ii => ii.incasso);
                Assert.IsTrue(cc.totaleAPagare == somma);

                // La somma dei ...DI CUI.. deve essere uguale al totale
                decimal ima = cc.incassiFotografi.Sum(ii => ii.incassoMasterizzate);
                decimal ist = cc.incassiFotografi.Sum(ii => ii.incassoStampe);
                Assert.IsTrue(ima + ist == somma);

                Assert.IsTrue(ima == cc.prezzoDischetto);
            }
        }
Example #23
0
        public void crudCarrello()
        {
            Guid guid = Guid.NewGuid();

            using (LumenEntities context = new LumenEntities()) {
                // Prima scrivo un carrello da solo.
                Carrello c = new Carrello();
                c.id              = guid;
                c.giornata        = DateTime.Today;
                c.intestazione    = "test1";
                c.prezzoDischetto = 123;
                c.tempo           = DateTime.Now;
                c.venduto         = false;
                c.totaleAPagare   = 234;

                // Creo anche una riga
                RigaCarrello r = new RigaCarrello();
                r.id = Guid.NewGuid();
                r.prezzoLordoUnitario = 12.34m;
                r.quantita            = 1;
                r.descrizione         = "test case";
                r.prezzoNettoTotale   = r.prezzoLordoUnitario;
                r.fotografia          = context.Fotografie.FirstOrDefault();
                r.fotografo           = r.fotografia.fotografo;
                r.discriminator       = RigaCarrello.TIPORIGA_MASTERIZZATA;

                c.righeCarrello = new List <RigaCarrello>();
                c.righeCarrello.Add(r);

                // Creo anche un incasso fotografo
                IncassoFotografo i = new IncassoFotografo();
                i.id                  = Guid.NewGuid();
                i.fotografo           = r.fotografo;
                i.incasso             = r.prezzoNettoTotale;
                i.incassoMasterizzate = i.incasso;
                i.contaMasterizzate   = 1;

                c.incassiFotografi = new List <IncassoFotografo>();
                c.incassiFotografi.Add(i);

                context.Carrelli.Add(c);

                try {
                    context.SaveChanges();
                } catch (DbEntityValidationException qq) {
                    foreach (var item in qq.EntityValidationErrors)
                    {
                        foreach (var item2 in item.ValidationErrors)
                        {
                            String errore = item2.ErrorMessage;
                            Console.WriteLine(errore);
                        }
                    }
                    throw;
                } catch (Exception) {
                    throw;
                }
            }

            using (LumenEntities context = new LumenEntities()) {
                Carrello ct = context.Carrelli.Single(c => c.id == guid);
                Assert.IsTrue(ct.intestazione == "test1");
                Assert.IsTrue(ct.righeCarrello.Count == 1);
                ct.intestazione = "test2";
                context.SaveChanges();
            }

            using (LumenEntities context = new LumenEntities()) {
                Carrello ct = context.Carrelli.Single(c => c.id == guid);
                Assert.IsTrue(ct.intestazione == "test2");
                context.Carrelli.Remove(ct);
                // Se tutto va bene, mi deve buttare via con il trigger di cascade, anche le RigheCarrello e gli IncassiFotografi
                context.SaveChanges();
            }

            using (LumenEntities context = new LumenEntities()) {
                Carrello ct = context.Carrelli.SingleOrDefault(c => c.id == guid);
                Assert.IsNull(ct);
            }
        }
Example #24
0
 public float GetSaldo(Carrello c)
 {
     return(c.MostraTotale());
 }
Example #25
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);
        }
Example #26
0
        public Carrello Applica(Carrello cin, Promozione promo, PromoContext contestoDiVendita)
        {
            // Se ho già applicato la promo 3 (ingrandimento) allora questa non deve funzionare
            if (contestoDiVendita.promoApplicate.Any(p => p.id == 3))
            {
                _giornale.Debug("Non applico la " + promo.GetType().Name + " perché è già stata applicata la promo 3");
                return(cin);
            }

            this._promoPrendiNPaghiM = (PromoPrendiNPaghiM)promo;
            bool elargito = false;

            #region Elaboro Stampe

            if (promo.attivaSuStampe)
            {
                _mappaDaElargireStampe = new Dictionary <string, int>();

                #region carico totali x grandezza

                // per prima cosa, carico la mappa con i totali delle stampe
                // raggruppate per grandezza p,m,g
                // e che siano a prezzo pieno (cioè che non abbiano già uno sconto)

                var qq = cin.righeCarrello
                         .Where(r => r.isTipoStampa /* && r.sconto == null*/)
                         .GroupBy(r => ((FormatoCarta)r.prodotto).grandezza)
                         .Select(ff => new { grandez = ff.Key, conta = ff.Sum(r => r.quantita) });

                _mappaTotStampe = qq.ToDictionary(t => t.grandez, t => t.conta);

                #endregion carico totali x grandezza

                valorizzaMappeWork();

                foreach (var key in _mappaDaElargireStampe.Keys)
                {
                    // Questo è il numero di copie che devo scontare
                    int quante         = _mappaDaElargireStampe[key];
                    var prezzoUnitario = cin.righeCarrello.FirstOrDefault(r => r.isTipoStampa && ((FormatoCarta)r.prodotto).grandezza == key).prezzoLordoUnitario;
//						UnitOfWorkScope.currentDbContext.FormatiCarta.FirstOrDefault( fc => fc.grandezza == key && fc.attivo == true ).prezzo;
                    decimal totDaScontare = quante * prezzoUnitario;

                    // Ora itero le righe del carrellocon quel tipo su cui devo spalmare lo sconto
                    var righe = cin.righeCarrello
                                .Where(r => r.isTipoStampa && ((FormatoCarta)r.prodotto).grandezza == key);

                    foreach (RigaCarrello riga in righe)
                    {
                        var impRig = riga.quantita * riga.prezzoLordoUnitario;
                        if (totDaScontare <= impRig)
                        {
                            riga.sconto   = totDaScontare;
                            totDaScontare = 0;
                        }
                        else
                        {
                            riga.sconto    = impRig;
                            totDaScontare -= impRig;
                        }

                        riga.prezzoNettoTotale = GestoreCarrello.calcValoreRiga(riga);
                        elargito = true;
                        if (totDaScontare <= 0)
                        {
                            break;
                        }
                    }
                }
            }

            #endregion Elaboro Stampe


            #region Elaboro Masterizzate

            if (promo.attivaSuFile)
            {
                // Conto quante masterizzate sono a prezzo pieno
                var qta = cin.righeCarrello
                          .Where(r => r.isTipoMasterizzata /* && r.sconto == null */)
                          .Sum(r => r.quantita);

                var multiploRegali = ((int)(qta / _promoPrendiNPaghiM.qtaDaPrendere));
                var qtaElarg       = multiploRegali * (_promoPrendiNPaghiM.qtaDaPrendere - _promoPrendiNPaghiM.qtaDaPagare);

                _giornale.Debug("devo elargire " + qtaElarg + " file digitali");

                // Carico due liste: Prima quella dei file a prezzo pieno, poi quella dei file eventualmente già scontati
                var righeOmaPP = cin.righeCarrello.Where(r => r.isTipoMasterizzata && r.sconto == null);
                var righeOmaPS = cin.righeCarrello.Where(r => r.isTipoMasterizzata && r.sconto != null);

                // Faccio due giri di elargizione
                for (int ii = 1; ii <= 2; ii++)
                {
                    foreach (RigaCarrello riga in (ii == 1 ? righeOmaPP : righeOmaPS))
                    {
                        if (qtaElarg >= riga.quantita)
                        {
                            riga.sconto            = riga.prezzoLordoUnitario;
                            qtaElarg              -= riga.quantita;
                            riga.prezzoNettoTotale = GestoreCarrello.calcValoreRiga(riga);
                            elargito               = true;
                        }
                    }
                }
            }

            #endregion Elaboro Masterizzate

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

            return(cin);
        }
Example #27
0
        public void carrelloTest()
        {
            using (LumenEntities dbContext = new LumenEntities()) {
                Carrello c1 = new Carrello();
                c1.id             = Guid.NewGuid();
                c1.giornata       = DateTime.Today;
                c1.tempo          = DateTime.Now;
                c1.totaleAPagare  = 123m;
                c1.righeCarrello  = new EntityCollection <RigaCarrello>();
                _carrelloInserito = c1;

                // ---

                RigaCarrello r1 = new RigaCarrello();
                r1.fotografia          = Costanti.findUnaFotografiaRandom(dbContext);
                r1.fotografo           = r1.fotografia.fotografo;
                r1.discriminator       = RigaCarrello.TIPORIGA_MASTERIZZATA;
                r1.id                  = Guid.NewGuid();
                r1.prezzoLordoUnitario = new Decimal(20);
                r1.quantita            = 2;
                r1.prezzoNettoTotale   = Decimal.Multiply(r1.prezzoLordoUnitario, r1.quantita);
                r1.descrizione         = "Foto masterizzata";
                c1.righeCarrello.Add(r1);
                _contaMasterizzate++;

                // ---

                RigaCarrello r2 = new RigaCarrello();
                r2.fotografia          = Costanti.findUnaFotografiaRandom(dbContext);
                r2.discriminator       = RigaCarrello.TIPORIGA_STAMPA;
                r2.id                  = Guid.NewGuid();
                r2.prezzoLordoUnitario = new Decimal(5);
                r2.quantita            = 3;
                r2.prezzoNettoTotale   = Decimal.Multiply(r2.prezzoLordoUnitario, r2.quantita);
                r2.descrizione         = "RicaFotoStampata1";
                r2.totFogliStampati    = 3;
                r2.prodotto            = Utilita.ottieniFormatoCarta(dbContext, "A4");
                r2.fotografo           = Utilita.ottieniFotografoMario(dbContext);
                c1.righeCarrello.Add(r2);
                _contaStampate++;

                // ---


                RigaCarrello r3 = new RigaCarrello();
                r3.fotografia          = Costanti.findUnaFotografiaRandom(dbContext);
                r3.discriminator       = RigaCarrello.TIPORIGA_STAMPA;
                r3.id                  = Guid.NewGuid();
                r3.prezzoLordoUnitario = new Decimal(5);
                r3.quantita            = 2;
                r3.prezzoNettoTotale   = Decimal.Multiply(r3.prezzoLordoUnitario, r3.quantita);
                r3.descrizione         = "RicaFotoStampata1";
                r3.totFogliStampati    = 3;
                r3.prodotto            = Utilita.ottieniFormatoCarta(dbContext, "A4");
                r3.fotografo           = Utilita.ottieniFotografoMario(dbContext);
                c1.righeCarrello.Add(r3);
                _contaStampate++;

                // ---

                dbContext.Carrelli.Add(c1);


                try {
                    dbContext.SaveChanges();
                } catch (Exception ee) {
                    String msg = ErroriUtil.estraiMessage(ee);
                    Console.WriteLine(msg);

                    throw ee;
                }
            }

            // Verifico che l'inserimento appena effettuato sia andato bene.
            queryPolimorficaCorrente();


            // provo altre tecniche di query, giusto per sport.
            queryPolimorficaSql();
            queryPolimorfica();
        }
Example #28
0
 public CatalogoController(Carrello carrello, ISession session)
 {
     _carrello = carrello;
     _session  = session;
 }
Example #29
0
 public Ordine(Utente utente, Carrello carrello)
 {
     _utente   = utente;
     _carrello = carrello;
 }
Example #30
0
 public VerificaConfermaController(Carrello c, Utente u, ISession session)
 {
     _ordine  = new Ordine(u, c);
     _utente  = u;
     _session = session;
 }