Project 2 Start

This commit is contained in:
2014-01-14 01:22:06 +01:00
parent 0015d7dce4
commit e6361620a2
14 changed files with 162 additions and 1670 deletions

View File

@@ -15,7 +15,7 @@ import java.util.GregorianCalendar;
* Classe che rappresenta un bene di consumo all'interno del catalogo.
*
*/
public class BeniDiConsumo implements Utilizzabile, Serializable{
public class BeniDiConsumo extends Utilizzabile implements Serializable {
/**
* Costruttore che inizializza i valori del bene di consumo
@@ -25,11 +25,13 @@ public class BeniDiConsumo implements Utilizzabile, Serializable{
* @param prezzoBene
* @param beniInStock
*/
public BeniDiConsumo ( int idBene, String descrizioneBene, double prezzoBene, int beniInStock ){
public BeniDiConsumo(int idBene, String descrizioneBene, double prezzoBene, int beniInStock, String in_fornitore, int in_giudizio){
this.idBene=idBene;
this.descrizioneBene=descrizioneBene;
this.prezzoBene=prezzoBene;
this.beniInStock=beniInStock;
this.giudizioFornitore = in_giudizio;
this.fornitore = in_fornitore;
}
@Override
@@ -111,10 +113,38 @@ public class BeniDiConsumo implements Utilizzabile, Serializable{
beniVenduti++;
}
public int getGiudizioFornitore() {
return giudizioFornitore;
}
public String getFornitore() {
return fornitore;
}
@Override
public double get_prezzo_scontato() {
GregorianCalendar dataOdierna = new GregorianCalendar();
long milliseconds1 = dataOdierna.getTimeInMillis();
long milliseconds2 = scadenza.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffGiorni = diff / (24 * 60 * 60 * 1000); //differenza in giorni
if( diffGiorni<=7 )
return prezzoBene - (prezzoBene*0.10) ; //Prezzo scontato
else
return prezzoBene; //Nessuno sconto applicabile
}
private int idBene;
private String descrizioneBene;
private double prezzoBene;
private int beniInStock; //Numero totale di prodotti da vendere
private int beniInStock; //Numero totale di prodotti da vendere
private int beniVenduti; //Numero di prodotti venduti
private int giudizioFornitore; //Giudizio sul fornitore che varia da 1 a 5
private double prezzoBene;
private GregorianCalendar scadenza = new GregorianCalendar(99999,0,1);
private String fornitore;
private String descrizioneBene;
}

View File

@@ -1,150 +0,0 @@
package it.unisa.info13d.Articoli;
import java.io.Serializable;
import java.util.GregorianCalendar;
/**
* Created with MONSTER.
* User: xgiovio
* Date: 16/12/13
* Time: 18.46
*/
/**
*
* Classe che rappresenta un bene di consumo all'interno del catalogo.
*
*/
public class BeniDiConsumo2 extends Utilizzabile2 implements Serializable {
/**
* Costruttore che inizializza i valori del bene di consumo
*
* @param idBene
* @param descrizioneBene
* @param prezzoBene
* @param beniInStock
*/
public BeniDiConsumo2 ( int idBene, String descrizioneBene, double prezzoBene, int beniInStock, String in_fornitore, int in_giudizio ){
this.idBene=idBene;
this.descrizioneBene=descrizioneBene;
this.prezzoBene=prezzoBene;
this.beniInStock=beniInStock;
this.giudizioFornitore = in_giudizio;
this.fornitore = in_fornitore;
}
@Override
public boolean eAcquistabile() {
if(beniVenduti<beniInStock)
return true;
return false;
}
/**
* @return - id bene
*/
public int getIdBene() {
return idBene;
}
/**
* @return - descrizione bene
*/
public String getDescrizioneBene() {
return descrizioneBene;
}
/**
* @return - prezzo del bene
*/
public double getPrezzoBene() {
return prezzoBene;
}
/**
* @return - la quantita dei beni da vendere
*/
public int getBeniInStock() {
return beniInStock;
}
/**
* @return - numero di oggetti venduti
*/
public int getBeniVenduti() {
return beniVenduti;
}
/**
* @param descrizioneBene - descrizione del bene
*/
public void setDescrizioneBene(String descrizioneBene) {
this.descrizioneBene = descrizioneBene;
}
/**
* @param prezzoBene - prezzo del bene
*/
public void setPrezzoBene(double prezzoBene) {
this.prezzoBene = prezzoBene;
}
/**
* @param beniInStock - quantita' del bene disponibile per la vendita
*/
public void setBeniInStock(int beniInStock) {
this.beniInStock = beniInStock;
}
/**
* @return - la scadenza del bene (viene considerata una data a lungo termine)
*/
public GregorianCalendar getScadenza() {
return scadenza;
}
/**
* Questo metodo setta i beni venduti, decrementa la quantita in magazzino e incrementa il numero di oggeti venduti
*/
public void setBeniVenduti() {
beniInStock--;
beniVenduti++;
}
public int getGiudizioFornitore() {
return giudizioFornitore;
}
public String getFornitore() {
return fornitore;
}
@Override
public double get_prezzo_scontato() {
GregorianCalendar dataOdierna = new GregorianCalendar();
long milliseconds1 = dataOdierna.getTimeInMillis();
long milliseconds2 = scadenza.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffGiorni = diff / (24 * 60 * 60 * 1000); //differenza in giorni
if( diffGiorni<=7 )
return prezzoBene - (prezzoBene*0.10) ; //Prezzo scontato
else
return prezzoBene; //Nessuno sconto applicabile
}
private int idBene;
private int beniInStock; //Numero totale di prodotti da vendere
private int beniVenduti; //Numero di prodotti venduti
private int giudizioFornitore; //Giudizio sul fornitore che varia da 1 a 5
private double prezzoBene;
private GregorianCalendar scadenza = new GregorianCalendar(99999,0,1);
private String fornitore;
private String descrizioneBene;
}

View File

@@ -15,7 +15,7 @@ import java.util.GregorianCalendar;
* Classe che rappresenta una cena all'interno del catalogo.
*
*/
public class CeneInRistoranti implements Utilizzabile, Serializable{
public class CeneInRistoranti extends Utilizzabile implements Serializable{
/**
*
@@ -152,6 +152,31 @@ public class CeneInRistoranti implements Utilizzabile, Serializable{
ceneVendute++;
}
@Override
/**
* Questo metodo stabilisce se <20> possibile applicare o meno uno sconto alle cene.
* @return Restitisce il prezzo originale se la politica di socnto non <20> applicabile, altrienti restituisce il prezzo scontato del 10%.
*/
public double get_prezzo_scontato() {
GregorianCalendar dataOdierna = new GregorianCalendar();
long milliseconds1 = dataOdierna.getTimeInMillis();
long milliseconds2 = dataScadenzaOffertaCena.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffGiorni = diff / (24 * 60 * 60 * 1000); //differenza in giorni
if( diffGiorni<=7 )
{
if( ceneVendute > ( numCenedaVendere/2 ) )
return costoPerPersona - (costoPerPersona* ( 0.1 )) - (costoPerPersona* ( 0.1 )) ; //generico sconto ultima sett + se 50% vendute
else
return costoPerPersona - (costoPerPersona * ( 0.1 )); //generico sconto ultima sett
}
else
return costoPerPersona;
}
private int idCena;
private String nomeRistorante;
private String luogo;
@@ -160,4 +185,4 @@ public class CeneInRistoranti implements Utilizzabile, Serializable{
private GregorianCalendar dataScadenzaOffertaCena;
private int numCenedaVendere;
private int ceneVendute;
}
}

View File

@@ -1,188 +0,0 @@
package it.unisa.info13d.Articoli;
import java.io.Serializable;
import java.util.GregorianCalendar;
/**
* Created with MONSTER.
* User: xgiovio
* Date: 16/12/13
* Time: 18.47
*/
/**
*
* Classe che rappresenta una cena all'interno del catalogo.
*
*/
public class CeneInRistoranti2 extends Utilizzabile2 implements Serializable{
/**
*
* @param idCena - l'id della cena
* @param nomeRistorante - il ristorante in cui usufruire dell'offerta
* @param luogo - Ubicazione del ristorante
* @param descrizione_cena - descrizione della cena (cosa viene offerto dal ristorante)
* @param costoPerPersona - costo per singola persona
* @param dataScadenzaOffertaCena - scadenza dell'offerta
* @param numCenedaVendere - offerte disponibile per la cena
*/
public CeneInRistoranti2(int idCena, String nomeRistorante, String luogo, String descrizione_cena, double costoPerPersona, GregorianCalendar dataScadenzaOffertaCena, int numCenedaVendere){
this.idCena=idCena;
this.nomeRistorante=nomeRistorante;
this.luogo=luogo;
this.descrizione_cena=descrizione_cena;
this.costoPerPersona=costoPerPersona;
this.dataScadenzaOffertaCena=dataScadenzaOffertaCena;
this.numCenedaVendere=numCenedaVendere;
}
@Override
public boolean eAcquistabile() {
if((dataScadenzaOffertaCena.before(new GregorianCalendar())) && (numCenedaVendere>ceneVendute))
return false;
return true;
}
/**
* @return - l'id della cena
*/
public int getIdCena() {
return idCena;
}
/**
* @return - in nome del ristorante
*/
public String getNomeRistorante() {
return nomeRistorante;
}
/**
* @return - l'ubicazione del ristorante
*/
public String getLuogo() {
return luogo;
}
/**
* @return - descrizione della cena
*/
public String getDescrizione_cena() {
return descrizione_cena;
}
/**
* @return - il costo per ogni singola persona
*/
public double getCostoPerPersona() {
return costoPerPersona;
}
/**
* @return - data di scadenza dell'offerta
*/
public GregorianCalendar getDataScadenzaOffertaCena() {
return dataScadenzaOffertaCena;
}
/**
* @return - il numero di cene ancora disponibili per la vendita
*/
public int getNumCenedaVendere() {
return numCenedaVendere;
}
/**
* @return - il numero di cene vendute
*/
public int getCeneVendute() {
return ceneVendute;
}
/**
* @param nomeRistorante - setta il nome del ristorante
*/
public void setNomeRistorante(String nomeRistorante) {
this.nomeRistorante = nomeRistorante;
}
/**
* @param luogo - setta il l'ubicazione del ristorante
*/
public void setLuogo(String luogo) {
this.luogo = luogo;
}
/**
* @param descrizione_cena - setta la descrizione della cena (Esempio: pizza margherita, patate e dolce)
*/
public void setDescrizione_cena(String descrizione_cena) {
this.descrizione_cena = descrizione_cena;
}
/**
* @param costoPerPersona - setta il costo per singola persona
*/
public void setCostoPerPersona(double costoPerPersona) {
this.costoPerPersona = costoPerPersona;
}
/**
* @param dataScadenzaOffertaCena - setta la data di scadenza per l'offerta
*/
public void setDataScadenzaOffertaCena(GregorianCalendar dataScadenzaOffertaCena) {
this.dataScadenzaOffertaCena = dataScadenzaOffertaCena;
}
/**
* @param numCenedaVendere - setta il numero di cene da vendere
*/
public void setNumCenedaVendere(int numCenedaVendere) {
this.numCenedaVendere = numCenedaVendere;
}
/**
* Questo metodo all'atto dell'acquisto da parte di un utente, decrementa le cene da vendere ed incrementa quelle vendute
*/
public void setCeneVendute()
{
numCenedaVendere--;
ceneVendute++;
}
@Override
/**
* Questo metodo stabilisce se <20> possibile applicare o meno uno sconto alle cene.
* @return Restitisce il prezzo originale se la politica di socnto non <20> applicabile, altrienti restituisce il prezzo scontato del 10%.
*/
public double get_prezzo_scontato() {
GregorianCalendar dataOdierna = new GregorianCalendar();
long milliseconds1 = dataOdierna.getTimeInMillis();
long milliseconds2 = dataScadenzaOffertaCena.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffGiorni = diff / (24 * 60 * 60 * 1000); //differenza in giorni
if( diffGiorni<=7 )
{
if( ceneVendute > ( numCenedaVendere/2 ) )
return costoPerPersona - (costoPerPersona* ( 0.1 )) - (costoPerPersona* ( 0.1 )) ; //generico sconto ultima sett + se 50% vendute
else
return costoPerPersona - (costoPerPersona * ( 0.1 )); //generico sconto ultima sett
}
else
return costoPerPersona;
}
private int idCena;
private String nomeRistorante;
private String luogo;
private String descrizione_cena;
private double costoPerPersona;
private GregorianCalendar dataScadenzaOffertaCena;
private int numCenedaVendere;
private int ceneVendute;
}

View File

@@ -1,13 +1,11 @@
package it.unisa.info13d.Articoli;
import java.util.GregorianCalendar;
public class PrestazioniDopera2 extends Utilizzabile2 {
public class PrestazioniDopera extends Utilizzabile {
public PrestazioniDopera2(int in_id, String in_localita, String in_descrizione, String in_fornitore, int in_giudizio, double in_prezzo ){
public PrestazioniDopera(int in_id, String in_localita, String in_descrizione, String in_fornitore, int in_giudizio, double in_prezzo){
idPrOpera = in_id;
Localita = in_localita;

View File

@@ -3,15 +3,19 @@ package it.unisa.info13d.Articoli;
/**
* Created with MONSTER.
* User: xgiovio
* Date: 16/12/13
* Time: 18.53
* Date: 09/01/14
* Time: 18.11
*/
public interface Utilizzabile {
public abstract class Utilizzabile {
public abstract boolean eAcquistabile();
/**
* Verifica se un metodo e' acquistabile
*
* @return se un bene e' acquistabile
*
* @return metodo per l'applicazione delle politiche di sconto relative ad un articolo.
*/
boolean eAcquistabile();
public abstract double get_prezzo_scontato();
}

View File

@@ -1,21 +0,0 @@
package it.unisa.info13d.Articoli;
/**
* Created with MONSTER.
* User: xgiovio
* Date: 09/01/14
* Time: 18.11
*/
public abstract class Utilizzabile2 {
public abstract boolean eAcquistabile();
/**
*
* @return metodo per l'applicazione delle politiche di sconto relative ad un articolo.
*/
public abstract double get_prezzo_scontato();
}

View File

@@ -9,8 +9,7 @@ import java.util.GregorianCalendar;
* Date: 16/12/13
* Time: 18.45
*/
public class Vacanze implements Utilizzabile, Serializable{
public class Vacanze extends Utilizzabile implements Serializable{
/**
* Costruttore per inizialiazzare una Vacanza
@@ -113,6 +112,22 @@ public class Vacanze implements Utilizzabile, Serializable{
{
viaggiVenduti++;
}
@Override
public double get_prezzo_scontato() {
GregorianCalendar dataOdierna = new GregorianCalendar();
long milliseconds1 = dataOdierna.getTimeInMillis();
long milliseconds2 = scadenzaOfferta.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffGiorni = diff / (24 * 60 * 60 * 1000); //differenza in giorni
if( diffGiorni<=7 )
return prezzoPSingola - (prezzoPSingola*0.10); //Prezzo scontato
else
return prezzoPSingola; //Nessuno sconto applicabile
}
private int idViaggio;
private String localitaViaggio;
@@ -120,4 +135,5 @@ public class Vacanze implements Utilizzabile, Serializable{
private GregorianCalendar scadenzaOfferta;
private double prezzoPSingola;
private int viaggiVenduti;
}

View File

@@ -1,139 +0,0 @@
package it.unisa.info13d.Articoli;
import java.io.Serializable;
import java.util.GregorianCalendar;
/**
* Created with MONSTER.
* User: xgiovio
* Date: 16/12/13
* Time: 18.45
*/
public class Vacanze2 extends Utilizzabile2 implements Serializable{
/**
* Costruttore per inizialiazzare una Vacanza
*
* @param idViaggio
* @param localitaViaggio
* @param dataPartenzaViaggio
* @param scadenzaOfferta
* @param prezzoPSingola
*/
public Vacanze2(int idViaggio, String localitaViaggio, GregorianCalendar dataPartenzaViaggio, GregorianCalendar scadenzaOfferta, double prezzoPSingola){
this.idViaggio = idViaggio;
this.localitaViaggio = localitaViaggio;
this.dataPartenzaViaggio = dataPartenzaViaggio;
this.scadenzaOfferta = scadenzaOfferta;
this.prezzoPSingola = prezzoPSingola;
}
@Override
public boolean eAcquistabile() {
if(scadenzaOfferta.before(new GregorianCalendar())) //L'offerta della vacanza scade se la data sua scadenza e successiva a quella della data odierna
return false;
return true;
}
/**
* @return - id del viaggio
*/
public int getIdViaggio() {
return idViaggio;
}
/**
* @return - localita' del viaggio
*/
public String getLocalitaViaggio() {
return localitaViaggio;
}
/**
* @return - data di partenza
*/
public GregorianCalendar getDataPartenzaViaggio() {
return dataPartenzaViaggio;
}
/**
* @return - data di scadenza dell'offerta
*/
public GregorianCalendar getScadenzaOfferta() {
return scadenzaOfferta;
}
/**
* @return - il prezzo per singola persona
*/
public double getPrezzoPSingola() {
return prezzoPSingola;
}
/**
* @return - il numero di viaggi venduti
*/
public int getViaggiVenduti() {
return viaggiVenduti;
}
/**
* @param localitaViaggio - setta la localit' del viaggio
*/
public void setLocalitaViaggio(String localitaViaggio) {
this.localitaViaggio = localitaViaggio;
}
/**
* @param dataPartenzaViaggio - setta la data di patenza del viaggio
*/
public void setDataPartenzaViaggio(GregorianCalendar dataPartenzaViaggio) {
this.dataPartenzaViaggio = dataPartenzaViaggio;
}
/**
* @param scadenzaOfferta - setta la data di scadenza dell'offerta della vacanza
*/
public void setScadenzaOfferta(GregorianCalendar scadenzaOfferta) {
this.scadenzaOfferta = scadenzaOfferta;
}
/**
* @param prezzoPSingola - setta il prezzo per singola persona
*/
public void setPrezzoPSingola(double prezzoPSingola) {
this.prezzoPSingola = prezzoPSingola;
}
/**
* Questo metodo incrementa, dopo ogni acquisto, il numero di viaggi venduti
*/
public void setViaggiVenduti()
{
viaggiVenduti++;
}
@Override
public double get_prezzo_scontato() {
GregorianCalendar dataOdierna = new GregorianCalendar();
long milliseconds1 = dataOdierna.getTimeInMillis();
long milliseconds2 = scadenzaOfferta.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffGiorni = diff / (24 * 60 * 60 * 1000); //differenza in giorni
if( diffGiorni<=7 )
return prezzoPSingola - (prezzoPSingola*0.10); //Prezzo scontato
else
return prezzoPSingola; //Nessuno sconto applicabile
}
private int idViaggio;
private String localitaViaggio;
private GregorianCalendar dataPartenzaViaggio;
private GregorianCalendar scadenzaOfferta;
private double prezzoPSingola;
private int viaggiVenduti;
}

View File

@@ -1,66 +0,0 @@
package it.unisa.info13d.GestioneCatalogo;
import it.unisa.info13d.Articoli.Utilizzabile;
import it.unisa.info13d.Utility.ReShow;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Scanner;
/**
* Created with PC-STATION.
* User: lebon
* Date: 17/12/13
* Time: 10.55
*/
public class AdminSession2 {
/**
* Questo metodo visualizza il menu per gli Amministratori
* @throws IOException
* @throws ParseException
* @throws ClassNotFoundException
* @throws FileNotFoundException
*/
public static void showAdminMenu(Catalogo2 catalogo, ReShow r, String username) throws FileNotFoundException, ClassNotFoundException, ParseException, IOException {
System.out.println("------------ Admin Menu ------------");
System.out.println("1 --> Nuovo Prodotto"); //Inserisce un nuovo prodotto in vendita nel catalogo
System.out.println("2 --> Cancella Prodotto"); //Cancella un prodotto in offerta nel catalogo
System.out.println("3 --> Offerte attive"); //Visualizza le offerte attive nel catalogo
System.out.println("4 --> Offerte scadute"); //Visualizza le offerte non piu acquistabili
System.out.println("5 --> Esci");
String sceltaMenu;
System.out.print("\nOperazione: ");
Scanner inputData = new Scanner(System.in);
sceltaMenu = inputData.nextLine();
//Controllo input. La scelta deve essere obbligatoriamente compresa tra 1 e 4
for ( ; !(sceltaMenu.equals("1"))&&!(sceltaMenu.equals("2"))&&!(sceltaMenu.equals("3"))&&!(sceltaMenu.equals("4"))&&!(sceltaMenu.equals("5")); ){
System.out.println("Scelta Errata. Riprovare");
System.out.print("Operazione: ");
sceltaMenu = inputData.nextLine();
}
switch(sceltaMenu)
{
case "1":
catalogo.nuovoProdotto();
break;
case "2":
catalogo.cancellaProdotto();
break;
case "3":
catalogo.offerteAttive(username);
break;
case "4":
catalogo.offerteScadute(username);
break;
case "5":
r.reshow = false;
break;
}
}
}

View File

@@ -1,11 +1,7 @@
package it.unisa.info13d.GestioneCatalogo;
import java.util.*;
import it.unisa.info13d.Articoli.BeniDiConsumo;
import it.unisa.info13d.Articoli.CeneInRistoranti;
import it.unisa.info13d.Articoli.Global;
import it.unisa.info13d.Articoli.Utilizzabile;
import it.unisa.info13d.Articoli.Vacanze;
import it.unisa.info13d.Articoli.*;
import it.unisa.info13d.Login.Access;
import it.unisa.info13d.Login.Entry;
import it.unisa.info13d.Utility.IdCounter;
@@ -913,6 +909,74 @@ public class Catalogo{
public ArrayList<Utilizzabile> getCatalogo() {
return catalogoOfferte;
}
/**
*
* Questo emtodo restituisce tutti gli articoli con scadenza (vacanze, cene ristorante) che hanno scadenza tra una data iniziale e una data finale presi come parametri.
* @param dataStart - data iniziale
* @param dataEnd - data finale
* @return un ArrayList contenente gli articoli compresi tra le due date inserite dall'utente
*/
public ArrayList<Utilizzabile> getDataExpire(GregorianCalendar dataStart, GregorianCalendar dataEnd)
{
ArrayList<Utilizzabile> arrayData = new ArrayList();
for(Utilizzabile articolo: catalogoOfferte)
{
if(articolo instanceof Vacanze)
{
Vacanze dealVacanza = (Vacanze)articolo;
if( ( dealVacanza.getScadenzaOfferta().before(dataEnd) ) && ( dealVacanza.getScadenzaOfferta().after(dataStart) ) )
{
arrayData.add(dealVacanza);
}
}
else if(articolo instanceof CeneInRistoranti)
{
CeneInRistoranti dealCena = (CeneInRistoranti)articolo;
if( ( dealCena.getDataScadenzaOffertaCena().before(dataEnd) ) && ( dealCena.getDataScadenzaOffertaCena().after(dataStart) ) )
{
arrayData.add(dealCena);
}
}
}
return arrayData;
}
/**
* Questo metodo restituisce tutti gli articoli senza scadenza (beni, prestazioni) che sono offerti da fornitori con un giudizio superiore ad un valore preso come parametro.
* @param votazione
* @return arrayDealNotExpire - Ritorna un arrayList contente tutti gli articoli senza scadenza
*/
public ArrayList<Utilizzabile> getDealNotExpire(int votazione)
{
ArrayList<Utilizzabile> arrayDealNotExpire = new ArrayList();
for(Utilizzabile articolo: catalogoOfferte)
{
if(articolo instanceof BeniDiConsumo)
{
BeniDiConsumo dealBene = (BeniDiConsumo)articolo;
if( dealBene.getGiudizioFornitore()>votazione )
arrayDealNotExpire.add(dealBene);
}
else if(articolo instanceof PrestazioniDopera)
{
PrestazioniDopera dealPrestazione = (PrestazioniDopera)articolo;
if( dealPrestazione.getGiudizioFornitore()>votazione )
arrayDealNotExpire.add(dealPrestazione);
}
}
return arrayDealNotExpire;
}

View File

@@ -1,982 +0,0 @@
package it.unisa.info13d.GestioneCatalogo;
import java.util.*;
import it.unisa.info13d.Articoli.BeniDiConsumo;
import it.unisa.info13d.Articoli.BeniDiConsumo2;
import it.unisa.info13d.Articoli.CeneInRistoranti;
import it.unisa.info13d.Articoli.Global;
import it.unisa.info13d.Articoli.PrestazioniDopera2;
import it.unisa.info13d.Articoli.Utilizzabile;
import it.unisa.info13d.Articoli.Utilizzabile2;
import it.unisa.info13d.Articoli.Vacanze;
import it.unisa.info13d.Login.Access;
import it.unisa.info13d.Login.Entry;
import it.unisa.info13d.Utility.IdCounter;
import it.unisa.info13d.Utility.ReShow;
import it.unisa.info13d.Login.Access;
import it.unisa.info13d.Login.LoggedUser;
import it.unisa.info13d.Login.LoginData;
import it.unisa.info13d.Login.StoricoItem;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* Created with PC-STATION.
* User: lebon
* Date: 17/12/13
* Time: 10.45
*/
public class Catalogo2{
/**
* Il costruttore definisce un nuovo catalogo nel caso non sia gia presente.
* @throws FileNotFoundException
* @throws IOException
* @throws ClassNotFoundException
*/
public Catalogo2() throws FileNotFoundException,IOException,ClassNotFoundException
{
File f_data = new File("cat_db");
if ( (f_data.exists())){
ObjectInputStream reader = new ObjectInputStream(new FileInputStream(f_data));
catalogoOfferte = (ArrayList<Utilizzabile>) reader.readObject();
reader.close();
} else {
catalogoOfferte = new ArrayList<Utilizzabile>();
}
}
/**
* Questo metodo si occupa di serializzare il catalogo (per garantire un minimo di sicurezza) e salvarlo su disco
* @throws FileNotFoundException
* @throws IOException
* @throws ClassNotFoundException
*/
void store_data()throws FileNotFoundException,IOException,ClassNotFoundException{
File f_data = new File("cat_db");
ObjectOutputStream writer = new ObjectOutputStream(new FileOutputStream(f_data));
writer.writeObject(catalogoOfferte);
writer.close();
}
/**
* Questo metodo seleziona in Menu da visualizzare in base al login effettuato dall'utente
*
* @param userType is the type of user obtained from the main
* @throws IOException
* @throws ParseException
* @throws ClassNotFoundException
* @throws FileNotFoundException
*/
public void showMenu(String userType,String username, ReShow r) throws FileNotFoundException, ClassNotFoundException, ParseException, IOException
{
if(userType.equals("Admin"))
AdminSession2.showAdminMenu(this,r, username);
else
ClientSession2.showClientMenu(this,r, username);
}
/**
* Questo metodo permette l'inserimento di un nuovo deal all'interno del catalogo
* @throws ParseException
* @throws IOException
* @throws ClassNotFoundException
* @throws FileNotFoundException
*/
public void nuovoProdotto() throws ParseException, FileNotFoundException, ClassNotFoundException, IOException
{
System.out.println("--------- Aggiunta nuovo Prodotto ----------");
System.out.println("1 --> Vacanza");
System.out.println("2 --> Cena");
System.out.println("3 --> Bene di consumo ");
String sceltaMenu;
System.out.print("Prodotto: ");
Scanner inputData = new Scanner(System.in);
sceltaMenu = inputData.nextLine();
//Controllo input. La scelta deve essere obbligatoriamente compresa tra 1 e 4
for ( ; !(sceltaMenu.equals("1"))&&!(sceltaMenu.equals("2"))&&!(sceltaMenu.equals("3")) ; ){
System.out.println("Scelta Errata. Riprovare");
System.out.print("Prodotto: ");
sceltaMenu = inputData.nextLine();
}
switch(sceltaMenu)
{
case "1":
System.out.println("---------- Nuova Offerta Vacanza ----------");
System.out.print("Localita: ");
String localita = inputData.nextLine();
System.out.print("Data Partenza (GG/MM/AAAA): ");
String data = inputData.nextLine();
String temp[];
String marcatore="/";
temp = data.split(marcatore);
GregorianCalendar dataPartenza = new GregorianCalendar((Integer.parseInt(temp[2])),(Integer.parseInt(temp[1]))-1,(Integer.parseInt(temp[0])));
System.out.print("Data Scadenza offerta (GG/MM/AAAA): ");
String data2 = inputData.nextLine();
String temp2[];
temp2 = data2.split(marcatore);
GregorianCalendar dataScad = new GregorianCalendar((Integer.parseInt(temp2[2])),(Integer.parseInt(temp2[1]))-1,(Integer.parseInt(temp2[0])));
System.out.print("Prezzo singola persona: ");
String prezzo = inputData.nextLine();
double prezzoPSing = Double.parseDouble(prezzo);
catalogoOfferte.add(new Vacanze(Global.get_next_id(), localita, dataPartenza, dataScad, prezzoPSing));
store_data();
break;
case "2":
System.out.println("---------- Nuova Offerta Cena ----------");
System.out.print("Ristorante: ");
String ristorante = inputData.nextLine();
System.out.print("Localita: ");
String localitaCena = inputData.nextLine();
System.out.print("Descrizione: ");
String descrizioneCena = inputData.nextLine();
System.out.print("Costo a Persona: ");
String prezzoCena = inputData.nextLine();
double prezzoPSingCena = Double.parseDouble(prezzoCena);
System.out.print("Data Scadenza offerta (GG/MM/AAAA): ");
String data3 = inputData.nextLine();
String temp3[];
String marcatore2="/";
temp3 = data3.split(marcatore2);
GregorianCalendar dataScadCena = new GregorianCalendar((Integer.parseInt(temp3[2])),(Integer.parseInt(temp3[1]))-1,(Integer.parseInt(temp3[0])));
System.out.print("Cene da Vendere: ");
String nCene = inputData.nextLine();
int ceneDaVendere = Integer.parseInt(nCene);
catalogoOfferte.add(new CeneInRistoranti(Global.get_next_id(), ristorante, localitaCena, descrizioneCena, prezzoPSingCena, dataScadCena, ceneDaVendere));
store_data();
break;
case "3":
System.out.println("---------- Nuova Offerta Bene ----------");
System.out.print("Descrizione: ");
String descrizioneBene = inputData.nextLine();
System.out.print("Prezzo Bene: ");
String prezzoBene = inputData.nextLine();
int prezzo_bene = Integer.parseInt(prezzoBene);
System.out.print("Quantita in magazzino: ");
String qntMag = inputData.nextLine();
int qnt_mag = Integer.parseInt(prezzoBene);
catalogoOfferte.add(new BeniDiConsumo(Global.get_next_id(), descrizioneBene, prezzo_bene, qnt_mag));
store_data();
break;
}
IdCounter.save_counter();
}
/**
* Questo metodo permette la cancellazione di un prodotto dal catalogo
* @throws FileNotFoundException
* @throws ClassNotFoundException
* @throws IOException
*/
public void cancellaProdotto() throws FileNotFoundException, ClassNotFoundException, IOException
{
System.out.println("------ Lista Prodotti -----\n--");
for(Utilizzabile deal: catalogoOfferte)
{
if(deal instanceof Vacanze)
{
Vacanze dealVacanza = (Vacanze)deal;
visualizzaVacanza(dealVacanza);
}
else if(deal instanceof BeniDiConsumo)
{
BeniDiConsumo dealBene = (BeniDiConsumo)deal;
visualizzaBene(dealBene);
}
else if(deal instanceof CeneInRistoranti)
{
CeneInRistoranti dealCena = (CeneInRistoranti)deal;
visualizzaCena(dealCena);
}
}
System.out.print("Elimina prodotto [Inserisci id]: ");
Scanner inputData = new Scanner(System.in);
String id = inputData.nextLine();
int idDel = Integer.parseInt(id);
System.out.println(idDel);
for(Utilizzabile deal: catalogoOfferte)
{
if(deal instanceof Vacanze && ((Vacanze)deal).getIdViaggio()==idDel)
{
catalogoOfferte.remove(deal);
store_data();
break;
}
if(deal instanceof BeniDiConsumo && ((BeniDiConsumo) deal).getIdBene()==idDel)
{
catalogoOfferte.remove(deal);
store_data();
break;
}
if(deal instanceof CeneInRistoranti && ((CeneInRistoranti) deal).getIdCena()==idDel)
{
catalogoOfferte.remove(deal);
store_data();
break;
}
}
}
/**
*
* Questo metodo velocizza la stampa dell informazioni scorrenndo l'array.
*
* @param a
*/
public void print_cat_admin (ArrayList<Utilizzabile> a){
for(Utilizzabile deal: a)
{
if(deal instanceof Vacanze)
{
Vacanze dealVacanza = (Vacanze)deal;
if((dealVacanza.eAcquistabile()))
{
visualizzaVacanza(dealVacanza);
}
continue;
}
if(deal instanceof BeniDiConsumo)
{
BeniDiConsumo dealBene = (BeniDiConsumo)deal;
if((dealBene.eAcquistabile()))
{
visualizzaBene(dealBene);
}
continue;
}
if(deal instanceof CeneInRistoranti)
{
CeneInRistoranti dealCena = (CeneInRistoranti)deal;
if((dealCena.eAcquistabile()))
{
visualizzaCena(dealCena);
}
continue;
}
}
}
/**
* Stamapa la lista degli oggetti utilizzabile escludendo le cene con location diversa da quelle dell'utente
*
* @param a
* @param location_user_to_compare
*/
public void print_cat_user (ArrayList<Utilizzabile> a, String location_user_to_compare){
for(Utilizzabile deal: a)
{
if(deal instanceof Vacanze)
{
Vacanze dealVacanza = (Vacanze)deal;
if((dealVacanza.eAcquistabile()))
{
visualizzaVacanza(dealVacanza);
}
continue;
}
if(deal instanceof BeniDiConsumo)
{
BeniDiConsumo dealBene = (BeniDiConsumo)deal;
if((dealBene.eAcquistabile()))
{
visualizzaBene(dealBene);
}
continue;
}
if(deal instanceof CeneInRistoranti)
{
CeneInRistoranti dealCena = (CeneInRistoranti)deal;
if((dealCena.eAcquistabile() && dealCena.getLuogo().equals(location_user_to_compare )))
{
visualizzaCena(dealCena);
}
continue;
}
}
}
/**
*
* @param in - data da convertire in millisecondi
* @return - il numero in millisencodi della data passata alla funzione.
*/
protected long convert_calendar_to_int (GregorianCalendar in){
return in.getTimeInMillis();
}
/**
* Questo metodo visualizza le offerte attive del catalogo. Viene differenziata la visualizzazione in base all'utente.
* - L'amministratore avra' la possibilita' di scegliere l'ordinamento in base dalla data di scadenza o ID prodotti
* - L'utente visualizzera' le offerte attive senza possibilita' di ordinamento
*
* @param user - username utente
* @throws FileNotFoundException
* @throws ClassNotFoundException
* @throws IOException
*/
public void offerteAttive(String user) throws FileNotFoundException, ClassNotFoundException, IOException
{
Entry loggedUser = Access.get_user_data(user);
if(!(loggedUser.getType()))
{
Scanner reader = new Scanner(System.in);
System.out.println("1 --> Ordina Per Data di Scadenza");
System.out.println("2 --> Ordina Per ID");
String choice;
System.out.print("Scelta operazione: ");
choice = reader.nextLine();
for ( ; !(choice.equals("1")) && !(choice.equals("2")) ;){
System.out.println("Scelta Errata. Riprovare");
System.out.print("Scelta operazione: ");
choice = reader.nextLine();
}
if (choice.equals("1")){
class CompareDataScadenza implements Comparator<Utilizzabile> {
@Override
public int compare(Utilizzabile e1, Utilizzabile e2) {
if (e1 instanceof BeniDiConsumo){
//beni vs
if (e2 instanceof Vacanze){
//beni vs vacanze
if (((BeniDiConsumo)e1).getScadenza().getTimeInMillis() < ((Vacanze)e2).getScadenzaOfferta().getTimeInMillis())
return -1;
return 1;
}else{
if (e2 instanceof BeniDiConsumo){
//bene vs //bene
if (((BeniDiConsumo)e1).getScadenza().getTimeInMillis() < ((BeniDiConsumo)e2).getScadenza().getTimeInMillis())
return -1;
return 1;
}else{
//bene vs cena
if (((BeniDiConsumo)e1).getScadenza().getTimeInMillis() < ((CeneInRistoranti)e2).getDataScadenzaOffertaCena().getTimeInMillis())
return -1;
return 1;
}
}
}else{
if (e1 instanceof Vacanze){
//vacanze vs
if (e2 instanceof BeniDiConsumo){
//vacanze vs bene
if (((Vacanze)e1).getScadenzaOfferta().getTimeInMillis() < ((BeniDiConsumo)e2).getScadenza().getTimeInMillis())
return -1;
return 1;
}else{
if (e2 instanceof Vacanze){
//vacabnza vs vacanza
if (((Vacanze)e1).getScadenzaOfferta().getTimeInMillis() < ((Vacanze)e2).getScadenzaOfferta().getTimeInMillis())
return -1;
return 1;
}else{
//vacanza vs cena
if (((Vacanze)e1).getScadenzaOfferta().getTimeInMillis() < ((CeneInRistoranti)e2).getDataScadenzaOffertaCena().getTimeInMillis())
return -1;
return 1;
}
}
}else{
//Cene vs
if (e2 instanceof Vacanze){
//cena vs vacanza
if (((CeneInRistoranti)e1).getDataScadenzaOffertaCena().getTimeInMillis() < ((Vacanze)e2).getScadenzaOfferta().getTimeInMillis())
return -1;
return 1;
}else{
if (e2 instanceof CeneInRistoranti){
//cena vs cena
if (((CeneInRistoranti)e1).getDataScadenzaOffertaCena().getTimeInMillis() < ((CeneInRistoranti)e2).getDataScadenzaOffertaCena().getTimeInMillis())
return -1;
return 1;
}else{
//cena vs bene
if (((CeneInRistoranti)e1).getDataScadenzaOffertaCena().getTimeInMillis() < ((BeniDiConsumo)e2).getScadenza().getTimeInMillis())
return -1;
return 1;
}
}
}
}
}
}
Collections.sort(catalogoOfferte,new CompareDataScadenza());
print_cat_admin (catalogoOfferte);
}else{
class CompareID implements Comparator<Utilizzabile> {
@Override
public int compare(Utilizzabile e1, Utilizzabile e2) {
if (e1 instanceof BeniDiConsumo){
//beni vs
if (e2 instanceof Vacanze){
//beni vs vacanze
if (((BeniDiConsumo)e1).getIdBene() < ((Vacanze)e2).getIdViaggio())
return -1;
return 1;
}else{
if (e2 instanceof BeniDiConsumo){
//bene vs //bene
if (((BeniDiConsumo)e1).getIdBene() < ((BeniDiConsumo)e2).getIdBene())
return -1;
return 1;
}else{
//bene vs cena
if (((BeniDiConsumo)e1).getIdBene() < ((CeneInRistoranti)e2).getIdCena())
return -1;
return 1;
}
}
}else{
if (e1 instanceof Vacanze){
//vacanze vs
if (e2 instanceof BeniDiConsumo){
//vacanze vs bene
if (((Vacanze)e1).getIdViaggio() < ((BeniDiConsumo)e2).getIdBene())
return -1;
return 1;
}else{
if (e2 instanceof Vacanze){
//vacabnza vs vacanza
if (((Vacanze)e1).getIdViaggio() < ((Vacanze)e2).getIdViaggio())
return -1;
return 1;
}else{
//vacanza vs cena
if (((Vacanze)e1).getIdViaggio() < ((CeneInRistoranti)e2).getIdCena())
return -1;
return 1;
}
}
}else{
//Cene vs
if (e2 instanceof Vacanze){
//cena vs vacanza
if (((CeneInRistoranti)e1).getIdCena() < ((Vacanze)e2).getIdViaggio())
return -1;
return 1;
}else{
if (e2 instanceof CeneInRistoranti){
//cena vs cena
if (((CeneInRistoranti)e1).getIdCena() < ((CeneInRistoranti)e2).getIdCena())
return -1;
return 1;
}else{
//cena vs bene
if (((CeneInRistoranti)e1).getIdCena() < ((BeniDiConsumo)e2).getIdBene())
return -1;
return 1;
}
}
}
}
}
}
Collections.sort(catalogoOfferte,new CompareID());
print_cat_admin (catalogoOfferte);
}
} else{
class CompareIDUser implements Comparator<Utilizzabile> {
@Override
public int compare(Utilizzabile e1, Utilizzabile e2) {
if (e1 instanceof BeniDiConsumo){
//beni vs
if (e2 instanceof Vacanze){
//beni vs vacanze
if (((BeniDiConsumo)e1).getIdBene() < ((Vacanze)e2).getIdViaggio())
return -1;
return 1;
}else{
if (e2 instanceof BeniDiConsumo){
//bene vs //bene
if (((BeniDiConsumo)e1).getIdBene() < ((BeniDiConsumo)e2).getIdBene())
return -1;
return 1;
}else{
//bene vs cena
if (((BeniDiConsumo)e1).getIdBene() < ((CeneInRistoranti)e2).getIdCena())
return -1;
return 1;
}
}
}else{
if (e1 instanceof Vacanze){
//vacanze vs
if (e2 instanceof BeniDiConsumo){
//vacanze vs bene
if (((Vacanze)e1).getIdViaggio() < ((BeniDiConsumo)e2).getIdBene())
return -1;
return 1;
}else{
if (e2 instanceof Vacanze){
//vacabnza vs vacanza
if (((Vacanze)e1).getIdViaggio() < ((Vacanze)e2).getIdViaggio())
return -1;
return 1;
}else{
//vacanza vs cena
if (((Vacanze)e1).getIdViaggio() < ((CeneInRistoranti)e2).getIdCena())
return -1;
return 1;
}
}
}else{
//Cene vs
if (e2 instanceof Vacanze){
//cena vs vacanza
if (((CeneInRistoranti)e1).getIdCena() < ((Vacanze)e2).getIdViaggio())
return -1;
return 1;
}else{
if (e2 instanceof CeneInRistoranti){
//cena vs cena
if (((CeneInRistoranti)e1).getIdCena() < ((CeneInRistoranti)e2).getIdCena())
return -1;
return 1;
}else{
//cena vs bene
if (((CeneInRistoranti)e1).getIdCena() < ((BeniDiConsumo)e2).getIdBene())
return -1;
return 1;
}
}
}
}
}
}
Collections.sort(catalogoOfferte,new CompareIDUser());
print_cat_user(catalogoOfferte,loggedUser.getLocation());
}
}
/**
* Questo metodo visualizza le offerte scadute del catalogo
* @throws IOException
* @throws ClassNotFoundException
* @throws FileNotFoundException
*/
public void offerteScadute(String user) throws FileNotFoundException, ClassNotFoundException, IOException
{
Entry loggedUser = Access.get_user_data(user);
System.out.println("------ Offerte Scadute -----");
for(Utilizzabile deal: catalogoOfferte)
{
if(deal instanceof Vacanze)
{
Vacanze dealVacanza = (Vacanze)deal;
if(!(dealVacanza.eAcquistabile())) {visualizzaVacanza(dealVacanza);continue;}
}
if(deal instanceof BeniDiConsumo)
{
BeniDiConsumo dealBene = (BeniDiConsumo)deal;
if(!(dealBene.eAcquistabile())) {visualizzaBene(dealBene);continue;}
}
if(deal instanceof CeneInRistoranti)
{
CeneInRistoranti dealCena = (CeneInRistoranti)deal;
if(!(dealCena.eAcquistabile())) {visualizzaCena(dealCena);continue;}
}
}
}
/**
* Questa metodo aggiunge credito al conto dell'utente
* @param user
* @throws FileNotFoundException
* @throws ClassNotFoundException
* @throws IOException
*/
public void aggiungiCredito(String user) throws FileNotFoundException, ClassNotFoundException, IOException
{
Entry loggedUser = Access.get_user_data(user);
System.out.println("----- Acquisto Credito -----");
System.out.println("Saldo Attuale:"+ loggedUser.getBalance());
System.out.println("Aggiungi importo da ricaricare:");
Scanner inputData = new Scanner(System.in);
String euro = inputData.nextLine();
loggedUser.setBalance(Double.parseDouble(euro));
Access.replace_data(user, loggedUser);
System.out.println("Saldo attuale: "+loggedUser.getBalance());
}
/**
* Questo metodo permette all'utente di effettuare un acquisto
*
* @param user
* @throws FileNotFoundException
* @throws ClassNotFoundException
* @throws IOException
*/
public void acquistaProdotto(String user) throws FileNotFoundException, ClassNotFoundException, IOException
{
Entry loggedUser = Access.get_user_data(user);
System.out.println("----- Shop ----");
System.out.println("### Prodotti ###");
offerteAttive(user);
System.out.println("Offerta da acquistare[inserisci id]: ");
Scanner inputData = new Scanner(System.in);
String idProd = inputData.nextLine();
int idDel = Integer.parseInt(idProd);
boolean trovato=false;
ArrayList<StoricoItem> storico = loggedUser.getStorico();
for(Utilizzabile dealsc: catalogoOfferte)
{
if((dealsc instanceof Vacanze) && ((Vacanze)dealsc).getIdViaggio()==idDel)
{
Vacanze dealVacanza = (Vacanze)dealsc;
if(dealVacanza.eAcquistabile() && loggedUser.getBalance()>=dealVacanza.getPrezzoPSingola())
{
trovato=true;
storico.add(new StoricoItem("Viaggio: "+dealVacanza.getLocalitaViaggio(), new GregorianCalendar() ,dealVacanza.getPrezzoPSingola()));
dealVacanza.setViaggiVenduti();
loggedUser.setBalance((dealVacanza.getPrezzoPSingola() * (-1)));
store_data();
Access.replace_data(user, loggedUser);
System.out.println("************************************\nAcquisto completato con successo! \n************************************\nSaldo Attuale:" + loggedUser.getBalance());
}
else
{
System.out.println("Il prodotto non e' acquistabile e/o Credito insufficiente, ricaricare");
trovato=true;
break;
}
}
if((dealsc instanceof BeniDiConsumo) && ((BeniDiConsumo) dealsc).getIdBene()==idDel)
{
BeniDiConsumo dealBene = (BeniDiConsumo)dealsc;
if(dealBene.eAcquistabile() && loggedUser.getBalance()>=dealBene.getPrezzoBene())
{
trovato=true;
storico.add(new StoricoItem("Prodotto: "+dealBene.getDescrizioneBene(), new GregorianCalendar() ,dealBene.getPrezzoBene()));
dealBene.setBeniVenduti();
loggedUser.setBalance((dealBene.getPrezzoBene() * (-1)));
Access.replace_data(user, loggedUser);
store_data();
System.out.println("************************************\nAcquisto completato con successo! \n************************************\nSaldo Attuale:" + loggedUser.getBalance());
}
else
{
System.out.println("Il prodotto non e' acquistabile e/o Credito insufficiente, ricaricare");
trovato=true;
break;
}
}
if( (dealsc instanceof CeneInRistoranti) && ((CeneInRistoranti) dealsc).getIdCena()==idDel)
{
CeneInRistoranti dealCena = (CeneInRistoranti)dealsc;
if(dealCena.eAcquistabile() && loggedUser.getBalance()>=dealCena.getCostoPerPersona())
{
trovato=true;
storico.add(new StoricoItem("Cena ristorante "+dealCena.getNomeRistorante()+" "+dealCena.getDescrizione_cena(), new GregorianCalendar() ,dealCena.getCostoPerPersona()));
dealCena.setCeneVendute();
loggedUser.setBalance((dealCena.getCostoPerPersona() * (-1)));
Access.replace_data(user, loggedUser);
store_data();
System.out.println("*************************************\nAcquisto completato con successo! \n************************************\nSaldo Attuale:" + loggedUser.getBalance());
}
else
{
System.out.println("Il prodotto non e' acquistabile e/o Credito insufficiente, ricaricare");
trovato=true;
break;
}
}
}
if(!trovato) System.out.println("### Prodotto non presente nel catalogo");
}
/**
* Questo metodo visualizza lo storico degli ordini effettuati dall'utente. rende possibile l'ordinamento in base alla data di scadenza o per prezzo.
*
* @param user
* @throws FileNotFoundException
* @throws ClassNotFoundException
* @throws IOException
*/
public void visualizzaStorico(String user) throws FileNotFoundException, ClassNotFoundException, IOException
{
Scanner reader = new Scanner(System.in);
System.out.println("1 --> Ordina Per Data di Acquisto");
System.out.println("2 --> Ordina Per Costo Prodotto");
String choice;
System.out.print("Opzione: ");
choice = reader.nextLine();
for ( ; !(choice.equals("1")) && !(choice.equals("2")) ;){
System.out.println("Scelta Errata. Riprovare");
System.out.print("Opzione: ");
choice = reader.nextLine();
}
Entry userLogged = Access.get_user_data(user);
System.out.println("---------- STORICO ----------");
ArrayList<StoricoItem> storico = userLogged.getStorico();
if (choice.equals("1")){
class CompareDataAcquisto implements Comparator<StoricoItem> {
@Override
public int compare(StoricoItem e1, StoricoItem e2) {
if (e1.getData_acquisto().getTimeInMillis() < e2.getData_acquisto().getTimeInMillis())
return -1;
return 1;
}
}
Collections.sort(storico,new CompareDataAcquisto());
print_storico(storico);
} else {
class ComparePrezzo implements Comparator<StoricoItem> {
@Override
public int compare(StoricoItem e1, StoricoItem e2) {
if (e1.getPrezzo() < e2.getPrezzo())
return -1;
return 1;
}
}
Collections.sort(storico,new ComparePrezzo());
print_storico (storico);
}
}
protected void print_storico (ArrayList<StoricoItem> in){
for(StoricoItem record: in)
{
GregorianCalendar partenza = record.getData_acquisto();
int giornoP = partenza.get(Calendar.DAY_OF_MONTH);
int meseP = partenza.get(Calendar.MONTH);
int annoP = partenza.get(Calendar.YEAR);
System.out.println("| deal: "+record.getDescription()+"| Data Acquisto: "+giornoP+"/"+(meseP+1)+"/"+annoP+"| Prezzo: "+record.getPrezzo());
}
}
/**
* Questo metodo visualizza una vacanza, descrivendone i suoi dati.
*
* @param dealVacanza - oggetto di tipo Vacanze che rappresenta l'offerta della Vacanza da visualizzare
*/
public void visualizzaVacanza(Vacanze dealVacanza)
{
GregorianCalendar partenza = dealVacanza.getDataPartenzaViaggio();
int giornoP = partenza.get(Calendar.DAY_OF_MONTH);
int meseP = partenza.get(Calendar.MONTH);
int annoP = partenza.get(Calendar.YEAR);
GregorianCalendar scadenza = dealVacanza.getScadenzaOfferta();
int giornoS = scadenza.get(Calendar.DAY_OF_MONTH);
int meseS = scadenza.get(Calendar.MONTH);
int annoS = scadenza.get(Calendar.YEAR);
System.out.println("#Vacanza-"+dealVacanza.getIdViaggio()+"# Scadenza: "+giornoS+"/"+(meseS+1)+"/"+annoS+"| Localita: "+dealVacanza.getLocalitaViaggio()+"| Partenza: "+giornoP+"/"+(meseP+1)+"/"+annoP+"| Prezzo Pers. Singola: "+dealVacanza.getPrezzoPSingola()+"\n--");
}
/**
* Questo metodo visualizza un Bene di consumo, descrivendone i suoi dati.
*
* @param dealBene - oggetto di tipo beniDiConsumo che rappresenta l'offerta del bene da visualizzare
*/
public void visualizzaBene(BeniDiConsumo dealBene)
{
System.out.println("#Articolo-"+dealBene.getIdBene()+"# Descrizione: "+dealBene.getDescrizioneBene()+" Prezzo: "+dealBene.getPrezzoBene()+"| Quantita in magazzino: "+dealBene.getBeniInStock()+"\n--");
}
/**
*
* Questo metodo visualizza una cena, descrivendone i suoi dati.
* @param dealCena - oggetto di tipo CeneInRistoranti che rappresenta l'offerta della cena da visualizzare
*/
public void visualizzaCena(CeneInRistoranti dealCena)
{
GregorianCalendar scadenzaCena = dealCena.getDataScadenzaOffertaCena();
int giornoSC = scadenzaCena.get(Calendar.DAY_OF_MONTH);
int meseSC = scadenzaCena.get(Calendar.MONTH);
int annoSC = scadenzaCena.get(Calendar.YEAR);
System.out.println("#Cena-"+dealCena.getIdCena()+"# Scadenza:"+giornoSC+"/"+(meseSC+1)+"/"+annoSC+"| Ristorante: "+dealCena.getNomeRistorante()+"| Indirizzo: "+dealCena.getLuogo()+"| Descrizione: "+dealCena.getDescrizione_cena()+"| Costo: "+dealCena.getCostoPerPersona()+"| Disponibilita:"+dealCena.getNumCenedaVendere()+"cene"+"\n--");
}
/**
*
* @return - restituisce il catalogo delle offerte
*/
public ArrayList<Utilizzabile> getCatalogo() {
return catalogoOfferte;
}
/**
*
* Questo emtodo restituisce tutti gli articoli con scadenza (vacanze, cene ristorante) che hanno scadenza tra una data iniziale e una data finale presi come parametri.
* @param dataStart - data iniziale
* @param dataEnd - data finale
* @return un ArrayList contenente gli articoli compresi tra le due date inserite dall'utente
*/
public ArrayList<Utilizzabile> getDataExpire(GregorianCalendar dataStart, GregorianCalendar dataEnd)
{
ArrayList<Utilizzabile> arrayData = new ArrayList();
for(Utilizzabile articolo: catalogoOfferte)
{
if(articolo instanceof Vacanze)
{
Vacanze dealVacanza = (Vacanze)articolo;
if( ( dealVacanza.getScadenzaOfferta().before(dataEnd) ) && ( dealVacanza.getScadenzaOfferta().after(dataStart) ) )
{
arrayData.add(dealVacanza);
}
}
else if(articolo instanceof CeneInRistoranti)
{
CeneInRistoranti dealCena = (CeneInRistoranti)articolo;
if( ( dealCena.getDataScadenzaOffertaCena().before(dataEnd) ) && ( dealCena.getDataScadenzaOffertaCena().after(dataStart) ) )
{
arrayData.add(dealCena);
}
}
}
return arrayData;
}
/**
* Questo metodo restituisce tutti gli articoli senza scadenza (beni, prestazioni) che sono offerti da fornitori con un giudizio superiore ad un valore preso come parametro.
* @param votazione
* @return arrayDealNotExpire - Ritorna un arrayList contente tutti gli articoli senza scadenza
*/
public ArrayList<Utilizzabile> getDealNotExpire(int votazione)
{
ArrayList<Utilizzabile> arrayDealNotExpire = new ArrayList();
for(Utilizzabile articolo: catalogoOfferte)
{
if(articolo instanceof BeniDiConsumo)
{
BeniDiConsumo2 dealBene = (BeniDiConsumo2)articolo;
if( dealBene.getGiudizioFornitore()>votazione )
arrayDealNotExpire.add(dealBene);
}
else if(articolo instanceof PrestazioniDopera2)
{
PrestazioniDopera2 dealPrestazione = (PrestazioniDopera2)articolo;
if( dealPrestazione.getGiudizioFornitore()>votazione )
arrayDealNotExpire.add(dealPrestazione);
}
}
return arrayDealNotExpire;
}
private ArrayList<Utilizzabile> catalogoOfferte;
}

View File

@@ -1,65 +0,0 @@
package it.unisa.info13d.GestioneCatalogo;
import it.unisa.info13d.Articoli.Utilizzabile;
import it.unisa.info13d.Login.Access;
import it.unisa.info13d.Login.Entry;
import it.unisa.info13d.Utility.ReShow;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
/**
* Created with PC-STATION.
* User: lebon
* Date: 17/12/13
* Time: 11.10
*/
public class ClientSession2 {
/**
* Questo metodo visualizza il menu per i Clienti
* @throws IOException
* @throws ClassNotFoundException
* @throws FileNotFoundException
*/
public static void showClientMenu(Catalogo2 catalogo, ReShow r, String username) throws FileNotFoundException, ClassNotFoundException, IOException {
Entry loggedUser = Access.get_user_data(username);
System.out.println("------------ Menu operazioni ------------");
System.out.println("-- Salto totale:"+loggedUser.getBalance());
System.out.println("1 --> Acquista Credito"); //Si acquista credito per l'acquisto dei prodotti
System.out.println("2 --> Visualizza Offerte"); //Visualizza le offerte acquistabili
System.out.println("3 --> Acquista"); //Acquisto di un offerta
System.out.println("4 --> Storico acquisti"); //Visualizza lo storico degli acquisti dell'utente
System.out.println("5 --> Esci");
String sceltaMenu;
System.out.print("Operazione: ");
Scanner inputData = new Scanner(System.in);
sceltaMenu = inputData.nextLine();
//Controllo input. La scelta deve essere obbligatoriamente compresa tra 1 e 4
for ( ; !(sceltaMenu.equals("1"))&&!(sceltaMenu.equals("2"))&&!(sceltaMenu.equals("3"))&&!(sceltaMenu.equals("4"))&&!(sceltaMenu.equals("5")) ;){
System.out.println("Scelta Errata. Riprovare");
System.out.print("Operazione: ");
sceltaMenu = inputData.nextLine();
}
switch(sceltaMenu)
{
case "1":
catalogo.aggiungiCredito(username);
break;
case "2":
catalogo.offerteAttive(username);
break;
case "3":
catalogo.acquistaProdotto(username);
break;
case "4":
catalogo.visualizzaStorico(username);
break;
case "5":
r.reshow = false;
break;
}
}
}

View File

@@ -1,34 +0,0 @@
package it.unisa.info13d;
import it.unisa.info13d.GestioneCatalogo.*;
import it.unisa.info13d.Login.LoginData;
import it.unisa.info13d.Utility.IdCounter;
import it.unisa.info13d.Utility.ReShow;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.ParseException;
/**
* Questa classe rappresenta il Main dell'applicazione dalla quale si avvieranno le procedure per la gestione dell'utente e del catalogo.
*
* @author Simone Argenziano e Giovanni Di Grezia
*
*/
public class Main2 {
public static void main(String[] args) throws FileNotFoundException,IOException,ClassNotFoundException, ParseException {
LoginData login = new LoginData();
login.getUserDataInfo();
IdCounter.restore_counter();
Catalogo2 load_catalogo = new Catalogo2();
ReShow r = new ReShow();
for (;r.reshow;)
load_catalogo.showMenu(login.getType(),login.getUsername(),r);
}
}