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); }
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 void MyTestInitialize() { this.gestoreCarrello = new GestoreCarrello(); }
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); }