예제 #1
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);
        }
예제 #2
0
        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();
                }
            }
        }
예제 #3
0
 public void MyTestInitialize()
 {
     this.gestoreCarrello = new GestoreCarrello();
 }
예제 #4
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);
        }