Esempio n. 1
0
        public bool CreaProfiliPrevent()
        {
            if (PreventObj == null)
            {
                return(false);
            }

            this.RiferimentoVendita = PreventObj.Denominazione;

            ProfiloCliente nuovo = this.GestoreProfili.ElencoProfili.AddNew();

            nuovo.NumeroPersone = int.Parse(PreventObj.PaxTotali);
            nuovo.Scuola        = PreventObj.Scuola == "S" ? true : false;

            return(true);
        }
Esempio n. 2
0
        private bool CreaVendita()
        {
            bool result = false;

            using (UnitOfWork uow = new UnitOfWork())
            {
                if (!m_ImponiData)
                {
                    m_DataImposta = DateTime.Now;
                }

                bool     conPrenotazione = false;
                DateTime inizioVal       = m_DataImposta.Date;
                DateTime fineVal         = m_DataImposta.Date;

                if (m_Prenotazione.GestoreProfili.Bigliettone() || m_Prenotazione.GestoreProfili.Cumulativo())
                {
                    fineVal = inizioVal.AddDays(15);
                }

                if (m_Prenotazione.GestoreProfili.CardMusei())
                {
                    fineVal = new DateTime(inizioVal.Year, 12, 31);
                }

                if (m_Prenotazione.GestoreProfili.NumeroCardMyFE() > 0)
                {
                    fineVal = inizioVal.AddDays(Card.GiorniCard(m_Prenotazione.GestoreProfili.TipologiaMyFe) - 1);
                }

                if (m_Prenotazione.ConPrenotazione())
                {
                    conPrenotazione = true;
                    inizioVal       = m_Prenotazione.InizioPrenotazioni(inizioVal);
                    fineVal         = m_Prenotazione.FinePrenotazioni(fineVal);
                }

                Vendita vendita = new Vendita(uow);

                vendita.Incasso         = this.checkEditPos.Checked ? EnumIncasso.Pos : EnumIncasso.Contanti;
                vendita.CodiceLeggibile = m_Prenotazione.CodiceVendita;
                vendita.CodicePrevent   = m_Prenotazione.PrenotazionePrevent;

                vendita.Descrizione = m_Prenotazione.RiferimentoVendita;

                if (m_Prevendita)
                {
                    vendita.Descrizione   = "PREVENDITA";
                    vendita.DataContabile = DateTime.Today;
                    vendita.DataOraStampa = DateTime.Now;
                }
                else
                {
                    vendita.DataContabile = m_DataImposta.Date;
                    vendita.DataOraStampa = m_DataImposta;
                }

                vendita.Provenienza = _provenienza != null?uow.GetObjectByKey <Provenienza>(_provenienza.Oid) : null;

                vendita.Utente        = uow.GetObjectByKey <Utente>(Program.UtenteCollegato.Oid);
                vendita.Postazione    = uow.GetObjectByKey <Postazione>(Program.Postazione.Oid);
                vendita.Struttura     = uow.GetObjectByKey <Struttura>(Program.Postazione.Struttura.Oid);
                vendita.TotalePersone = m_Prenotazione.GestoreProfili.TotalePersone();
                vendita.TotaleImporto = m_Prenotazione.GestoreProfili.TotaleImporto();
                vendita.Save();

                #region PRENOTAZIONE
                prevent.prenotazione.Parametri parametri = new prevent.prenotazione.Parametri();
                //List<prevent.prenotazione.ParametriRigaBiglietti> elencorighe = new List<prevent.prenotazione.ParametriRigaBiglietti>();
                List <prevent.prenotazione.ParametriRigaBiglietti> elencorigheuniche = new List <prevent.prenotazione.ParametriRigaBiglietti>();

                if (conPrenotazione)
                {
                    parametri.CodiceTransWinTicket = vendita.CodiceLeggibile;
                    parametri.Denominazione        = vendita.Descrizione;
                    parametri.PaxTotali            = m_Prenotazione.GestoreProfili.TotalePersone().ToString();
                    parametri.TipoGS             = GestoreCalendario.TipoGS;
                    parametri.Scuola             = GestoreCalendario.TipoScuola;
                    parametri.RigaPercorsoVisita = new prevent.prenotazione.ParametriRigaPercorsoVisita[m_Prenotazione.NumeroTotalePrenotazioni()];

                    // creazione prenotazione
                    int count = 0;
                    foreach (PrenotazioneIngresso prenotazioneIngresso in m_Prenotazione.Prenotazioni)
                    {
                        foreach (SingolaPrenotazione singolaPrenotazione in prenotazioneIngresso.Prenotazioni)
                        {
                            Prenotazione nuovaPrenotazione = new Prenotazione(uow);

                            nuovaPrenotazione.Vendita = vendita;
                            //nuovaPrenotazione.RigaStampaIngresso = elencoingressi[prenotazioneIngresso.Ingresso.Oid];

                            //nuovaPrenotazione.AllDay = item.AllDay;
                            //nuovaPrenotazione.AppointmentType = item.AppointmentType;
                            //nuovaPrenotazione.Description = item.Description;
                            nuovaPrenotazione.Disponibilita = EnumDisponibilita.Disponibile; //item.Disponibilita;
                            nuovaPrenotazione.EndDate       = singolaPrenotazione.OrarioFine;
                            //nuovaPrenotazione.IdRichiesta = item.IdRichiesta;
                            nuovaPrenotazione.Ingresso = uow.GetObjectByKey <Ingresso>(prenotazioneIngresso.Ingresso.Oid);
                            //nuovaPrenotazione.Label = item.Label;
                            //nuovaPrenotazione.Location = item.Location;
                            nuovaPrenotazione.NumeroPersone = singolaPrenotazione.NumeroPersone;
                            nuovaPrenotazione.StartDate     = singolaPrenotazione.Orario;
                            //nuovaPrenotazione.Status = item.Status;
                            nuovaPrenotazione.Subject = singolaPrenotazione.Descrizione;
                            nuovaPrenotazione.Save();

                            parametri.RigaPercorsoVisita[count]            = new prevent.prenotazione.ParametriRigaPercorsoVisita();
                            parametri.RigaPercorsoVisita[count].DataVisita = nuovaPrenotazione.StartDate.Date;
                            parametri.RigaPercorsoVisita[count].IdMostra   = nuovaPrenotazione.Ingresso.CodicePrevent.ToString();
                            parametri.RigaPercorsoVisita[count].PaxVisita  = nuovaPrenotazione.NumeroPersone.ToString();
                            parametri.RigaPercorsoVisita[count].OraVisita  = String.Format("{0:HH}:{1:mm}:{2:ss}.{3:ffffzzz}", nuovaPrenotazione.StartDate, nuovaPrenotazione.StartDate, nuovaPrenotazione.StartDate, nuovaPrenotazione.StartDate);
                            count++;
                        }
                    }
                }
                #endregion

                // Numerazione dei profili
                int profiloCount = 0;
                foreach (ProfiloCliente profiloCliente in m_Prenotazione.GestoreProfili.ElencoProfili)
                {
                    profiloCliente.CodiceProgressivo = profiloCount++;
                }

                if (m_Prenotazione.StampaSingolaPersona)
                {
                    // ho già controllato che non ci siano gruppi oppure scuole
                    foreach (ProfiloCliente profiloCliente in m_Prenotazione.GestoreProfili.ElencoProfili)
                    {
                        var elencocard = profiloCliente.SoluzionePreferita.GetElencoCardMyFE(uow);

                        List <Ingresso> elenco = profiloCliente.ElencoIngressiSoluzionePreferita();
                        for (int i = 0; i < profiloCliente.NumeroPersone; i++)
                        {
                            CreaStampa(uow, inizioVal, fineVal, vendita, 1,
                                       profiloCliente.SoluzionePreferita.ImportoUnitario, elenco, profiloCliente.CodiceProgressivo, elencocard[i]);
                        }
                    }
                }
                else
                {
                    // DEVE esserci almeno un PROFILO gruppo OPPURE un profilo SCUOLA

                    ProfiloCliente  profiloBase = m_Prenotazione.GestoreProfili.ElencoProfili[0];
                    List <Ingresso> elencoBase  = profiloBase.ElencoIngressiSoluzionePreferita();

                    bool tuttiuguali = true;
                    foreach (ProfiloCliente profiloCliente in m_Prenotazione.GestoreProfili.ElencoProfili)
                    {
                        if (Diversi(elencoBase, profiloCliente.ElencoIngressiSoluzionePreferita()))
                        {
                            tuttiuguali = false;
                            break;
                        }
                        if (!profiloCliente.SoluzionePreferita.ContieneGruppoOppureScuola())
                        {
                            tuttiuguali = false;
                            break;
                        }
                    }

                    if (tuttiuguali)
                    {
                        // stampa UNICA per TUTTI i profili
                        if (m_Prenotazione.GestoreProfili.ElencoProfili.Count > 1)
                        {
                            CreaStampa(uow, inizioVal, fineVal, vendita, vendita.TotalePersone, vendita.TotaleImporto, elencoBase, -1);
                        }
                        else
                        {
                            CreaStampa(uow, inizioVal, fineVal, vendita, vendita.TotalePersone, vendita.TotaleImporto, elencoBase, 0);
                        }
                    }
                    else
                    {
                        // una stampa per ogni PROFILO
                        foreach (ProfiloCliente profiloCliente in m_Prenotazione.GestoreProfili.ElencoProfili)
                        {
                            List <Ingresso> elenco = profiloCliente.ElencoIngressiSoluzionePreferita();

                            if (profiloCliente.SoluzionePreferita.ContieneGruppoOppureScuola())
                            {
                                // questo profilo è un gruppo
                                CreaStampa(uow, inizioVal, fineVal, vendita, profiloCliente.NumeroPersone, profiloCliente.ImportoTotale, elenco, profiloCliente.CodiceProgressivo);
                            }
                            else
                            {
                                // questo profilo lo tratto come singolo
                                for (int i = 0; i < profiloCliente.NumeroPersone; i++)
                                {
                                    CreaStampa(uow, inizioVal, fineVal, vendita, 1, profiloCliente.SoluzionePreferita.ImportoUnitario, elenco, profiloCliente.CodiceProgressivo);
                                }
                            }
                        }
                    }
                }

                // creazione righe vendita
                foreach (ProfiloCliente profiloCliente in m_Prenotazione.GestoreProfili.ElencoProfili)
                {
                    foreach (SoluzioneIngressiItem sol in profiloCliente.SoluzionePreferita.Elenco)
                    {
                        if (profiloCliente.SoluzionePreferita.CardMyFE() && sol.Variante.TipologiaTre == EnumTipologiaTre.CardMyFE)
                        {
                            var elencoCard = profiloCliente.SoluzionePreferita.GetElencoCardMyFE(uow);
                            for (int i = 0; i < sol.Quantita; i++)
                            {
                                RigaVenditaVariante riga = new RigaVenditaVariante(uow);
                                riga.PrezzoTotale   = sol.PrezzoUnitario;
                                riga.PrezzoUnitario = sol.PrezzoUnitario;
                                riga.Quantita       = 1;
                                riga.Vendita        = vendita;
                                riga.Profilo        = profiloCliente.CodiceProgressivo;
                                riga.Variante       = uow.GetObjectByKey <Variante>(sol.Variante.Oid);
                                riga.CodiceSconto   = null;
                                riga.Card           = elencoCard[i];
                                riga.Save();

                                CreaVenditaElencoRigheUniche(elencorigheuniche, riga);
                            }
                        }
                        else
                        {
                            CodiceSconto cs = null;
                            if (profiloCliente.ElencoCodiciSconto.Count > 0 && sol.Titolo != null && sol.Titolo.Bonus())
                            {
                                cs = uow.GetObjectByKey <CodiceSconto>(profiloCliente.ElencoCodiciSconto[0].Oid);
                            }

                            RigaVenditaVariante riga = new RigaVenditaVariante(uow);
                            riga.PrezzoTotale   = sol.PrezzoTotale;
                            riga.PrezzoUnitario = sol.PrezzoUnitario;
                            riga.Quantita       = sol.Quantita;
                            riga.Vendita        = vendita;
                            riga.Profilo        = profiloCliente.CodiceProgressivo;

                            if (sol.Titolo != null)
                            {
                                riga.Titolo = uow.GetObjectByKey <Titolo>(sol.Titolo.Oid);
                            }

                            riga.Variante     = uow.GetObjectByKey <Variante>(sol.Variante.Oid);
                            riga.CodiceSconto = cs;
                            riga.Save();

                            CreaVenditaElencoRigheUniche(elencorigheuniche, riga);
                        }
                    }

                    profiloCount++;
                }

                parametri.RigaBiglietti = elencorigheuniche.ToArray();

                m_Prenotazione.Vendita = vendita;

                // registra ingressi per QUESTA postazione
                foreach (Stampa item1 in vendita.Stampe)
                {
                    foreach (RigaStampaIngresso item2 in item1.RigheStampaIngresso)
                    {
                        if (VarcoPostazione(item2))
                        {
                            Entrata entrata = new Entrata(uow);
                            entrata.DataOraEntrata     = vendita.DataOraStampa;
                            entrata.Quantita           = item2.TotalePersone;
                            entrata.RigaStampaIngresso = item2;
                            entrata.Save();

                            item2.TotaleIngressi = item2.TotalePersone;
                            item2.Save();
                        }
                    }
                }

                // QUERY WEB ... per confermare prenotazione
                if (conPrenotazione)
                {
                    if (PrenotazioneFinale.Prenota(parametri, m_Prenotazione.PreventObj))
                    {
                        vendita.CodicePrevent = parametri.CodiceTransWinTicket;
                        vendita.Save();

                        // Salvo tutto ...
                        uow.CommitChanges();
                        result = true;
                    }
                    else
                    {
                        // errore
                        if (PrenotazioneFinale.UltimoErrore != null)
                        {
                            XtraMessageBox.Show(String.Format("Errore: {0}", PrenotazioneFinale.UltimoErrore.DescrizioneErrore), "Errore: " + PrenotazioneFinale.UltimoErrore.ReturnCode, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        else
                        {
                            XtraMessageBox.Show("Impossibile completare la prenotazione. Ritornare alla maschera precedente e riprovare.", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
                else
                {
                    // Salvo tutto ...
                    uow.CommitChanges();
                    result = true;
                }
            }

            return(result);
        }