public void Suspend(int idOffertaUscita, decimal crediti) { decimal puntiRimanenti = 0; decimal punti = crediti; // finchè ho punti da sospendere li tolgo da quelli utilizzabili while (punti > 0) { // recupero il primo credito disponibile CONTO_CORRENTE_CREDITO credito = _db.CONTO_CORRENTE_CREDITO .Where(m => m.ID_CONTO_CORRENTE == this.ID_CONTO_CORRENTE && m.STATO == (int)StatoCredito.ASSEGNATO && m.PUNTI > 0 && m.DATA_SCADENZA > DateTime.Now) .OrderBy(m => m.DATA_SCADENZA) .FirstOrDefault(); // hai punti da togliere tolto quelli recuperati if ((punti - credito.PUNTI) < 0) { // se i punti da togliere vanno sotto 0 allora sottraggo i punti a quelli che possedevo e azzero quelli da togliere puntiRimanenti = credito.PUNTI - punti; punti = 0; } else { // altrimenti tolgo i punti recuperati a quelli da togliere e vado avanti punti = punti - credito.PUNTI; } // se i punti da togliere sono azzerati e i punti rimanenti // sono maggiori di zero allora aggiorno il credito dei punti da sospendere if (punti <= 0 && puntiRimanenti > 0) { credito.PUNTI -= puntiRimanenti; } credito.DATA_MODIFICA = DateTime.Now; credito.ID_OFFERTA_USCITA = idOffertaUscita; credito.STATO = (int)StatoCredito.SOSPESO; _db.SaveChanges(); // se avanzano punti dal credito sottratto li aggiungo per lasciarli attivi if (punti <= 0 && puntiRimanenti > 0) { CONTO_CORRENTE_CREDITO creditoCompratore = new CONTO_CORRENTE_CREDITO(); creditoCompratore.ID_CONTO_CORRENTE = this.ID_CONTO_CORRENTE; creditoCompratore.ID_TRANSAZIONE_ENTRATA = credito.ID_TRANSAZIONE_ENTRATA; creditoCompratore.PUNTI = puntiRimanenti; creditoCompratore.SOLDI = Utility.cambioValuta(creditoCompratore.PUNTI); creditoCompratore.GIORNI_SCADENZA = credito.GIORNI_SCADENZA; creditoCompratore.DATA_SCADENZA = credito.DATA_SCADENZA; creditoCompratore.DATA_INSERIMENTO = DateTime.Now; creditoCompratore.STATO = (int)StatoCredito.ASSEGNATO; _db.CONTO_CORRENTE_CREDITO.Add(creditoCompratore); _db.SaveChanges(); } puntiRimanenti = 0; } }
private bool AddCreditoSuDB(int idTransazione, decimal crediti) { CONTO_CORRENTE_CREDITO contoCorrenteCredito = new CONTO_CORRENTE_CREDITO(); contoCorrenteCredito.ID_CONTO_CORRENTE = this.ID_CONTO_CORRENTE; contoCorrenteCredito.ID_TRANSAZIONE_ENTRATA = idTransazione; contoCorrenteCredito.PUNTI = crediti; contoCorrenteCredito.SOLDI = Utility.cambioValuta(contoCorrenteCredito.PUNTI); contoCorrenteCredito.GIORNI_SCADENZA = Convert.ToInt32(ConfigurationManager.AppSettings["GiorniScadenzaCredito"]); contoCorrenteCredito.DATA_SCADENZA = DateTime.Now.AddDays(contoCorrenteCredito.GIORNI_SCADENZA); contoCorrenteCredito.DATA_INSERIMENTO = DateTime.Now; contoCorrenteCredito.STATO = (int)StatoCredito.ASSEGNATO; _db.CONTO_CORRENTE_CREDITO.Add(contoCorrenteCredito); return(_db.SaveChanges() > 0); }
// NON ANCORA USATO private bool AddDebitoSuDB(int idTransazione, decimal crediti) { CONTO_CORRENTE_CREDITO contoCorrenteCredito = new CONTO_CORRENTE_CREDITO(); contoCorrenteCredito.ID_CONTO_CORRENTE = this.ID_CONTO_CORRENTE; contoCorrenteCredito.ID_TRANSAZIONE_ENTRATA = idTransazione; contoCorrenteCredito.PUNTI = crediti; contoCorrenteCredito.SOLDI = Utility.cambioValuta(contoCorrenteCredito.PUNTI); // scadenza infinita (valutare se tenere un debito al massimo per 1 anno) contoCorrenteCredito.GIORNI_SCADENZA = -1; contoCorrenteCredito.DATA_SCADENZA = DateTime.MaxValue; contoCorrenteCredito.DATA_INSERIMENTO = DateTime.Now; contoCorrenteCredito.STATO = (int)StatoCredito.ASSEGNATO; _db.CONTO_CORRENTE_CREDITO.Add(contoCorrenteCredito); return(_db.SaveChanges() > 0); }
private decimal RimuovereCredito(decimal debito) { // verifica se ho del credito positivo da rimuovere var creditoPositivo = _db.CONTO_CORRENTE_CREDITO.Where(m => m.ID_CONTO_CORRENTE == this.ID_CONTO_CORRENTE && m.STATO == (int)StatoCredito.ASSEGNATO && m.PUNTI > 0).ToList(); decimal puntiDebitoRimanente = debito; foreach (CONTO_CORRENTE_CREDITO m in creditoPositivo) { decimal totale = m.PUNTI + puntiDebitoRimanente; m.DATA_MODIFICA = DateTime.Now; m.DATA_SCADENZA = DateTime.Now; m.STATO = (int)StatoCredito.ELIMINATO; _db.SaveChanges(); if (totale < 0) { // se rimane del debito, continuo a sottrarlo ai prossimi crediti rimasti puntiDebitoRimanente = totale; continue; } else if (totale == 0) { // rimango con debito zero puntiDebitoRimanente = 0; break; } else { // rimango con debito zero e segno il credito rimasto CONTO_CORRENTE_CREDITO debitoRimanente = new CONTO_CORRENTE_CREDITO(); debitoRimanente.ID_CONTO_CORRENTE = this.ID_CONTO_CORRENTE; debitoRimanente.ID_TRANSAZIONE_ENTRATA = m.ID_TRANSAZIONE_ENTRATA; debitoRimanente.PUNTI = totale; debitoRimanente.SOLDI = Utility.cambioValuta(debitoRimanente.PUNTI); debitoRimanente.GIORNI_SCADENZA = m.GIORNI_SCADENZA; debitoRimanente.DATA_SCADENZA = m.DATA_SCADENZA; debitoRimanente.DATA_INSERIMENTO = m.DATA_INSERIMENTO; debitoRimanente.DATA_MODIFICA = DateTime.Now; debitoRimanente.STATO = (int)StatoCredito.ASSEGNATO; _db.CONTO_CORRENTE_CREDITO.Add(debitoRimanente); _db.SaveChanges(); puntiDebitoRimanente = 0; break; } } return(puntiDebitoRimanente); }
private decimal RimuovereDebito(decimal crediti) { // verifica se ho del credito negativo da estinguere var creditoNegativo = _db.CONTO_CORRENTE_CREDITO.Where(m => m.ID_CONTO_CORRENTE == this.ID_CONTO_CORRENTE && m.STATO == (int)StatoCredito.ASSEGNATO && m.PUNTI < 0).ToList(); decimal puntiCreditoRimanente = crediti; foreach (CONTO_CORRENTE_CREDITO m in creditoNegativo) { decimal totale = puntiCreditoRimanente + m.PUNTI; m.DATA_MODIFICA = DateTime.Now; m.DATA_SCADENZA = DateTime.Now; m.STATO = (int)StatoCredito.ELIMINATO; _db.SaveChanges(); if (totale < 0) { // rimango con credito zero e segno il debito rimasto CONTO_CORRENTE_CREDITO debitoRimanente = new CONTO_CORRENTE_CREDITO(); debitoRimanente.ID_CONTO_CORRENTE = this.ID_CONTO_CORRENTE; debitoRimanente.ID_TRANSAZIONE_ENTRATA = m.ID_TRANSAZIONE_ENTRATA; debitoRimanente.PUNTI = totale; debitoRimanente.SOLDI = Utility.cambioValuta(debitoRimanente.PUNTI); debitoRimanente.GIORNI_SCADENZA = m.GIORNI_SCADENZA; debitoRimanente.DATA_SCADENZA = m.DATA_SCADENZA; debitoRimanente.DATA_INSERIMENTO = m.DATA_INSERIMENTO; debitoRimanente.DATA_MODIFICA = DateTime.Now; debitoRimanente.STATO = (int)StatoCredito.ASSEGNATO; _db.CONTO_CORRENTE_CREDITO.Add(debitoRimanente); _db.SaveChanges(); puntiCreditoRimanente = 0; break; } else if (totale == 0) { // rimango con credito zero puntiCreditoRimanente = 0; break; } else { // continuo ad eliminare il debito rimanente puntiCreditoRimanente = totale; continue; } } return(puntiCreditoRimanente); }