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); } }
// 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); }
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)); }
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); } }
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); }
/// <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); }
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(); } } }
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)); }
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; }
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)); }
public void CreaNuovoCarrelloPerClonazione() { if (possoClonareCarrello == false) { throw new InvalidOperationException("nessun carrello caricato"); } Carrello clonato = ClonaCarrello(); mioObjContext.Detach(carrello); carrello = clonato; isStatoModifica = false; isCarrelloModificato = true; }
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"); }
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))); }
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); }
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; }
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"); } }
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"); } }
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); } }
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); } }
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); } }
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); } }
public float GetSaldo(Carrello c) { return(c.MostraTotale()); }
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); }
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); }
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(); }
public CatalogoController(Carrello carrello, ISession session) { _carrello = carrello; _session = session; }
public Ordine(Utente utente, Carrello carrello) { _utente = utente; _carrello = carrello; }
public VerificaConfermaController(Carrello c, Utente u, ISession session) { _ordine = new Ordine(u, c); _utente = u; _session = session; }