Esempio n. 1
0
        private void barButtonItemSave_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.gridView1.CloseEditor();
            this.gridControl1.EndUpdate();

            if (XtraMessageBox.Show("Salva le modifiche ?", "Conferma", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                m_Fattura.DataContabile     = this.textEditFatturaData.DateTime.Date;
                m_Fattura.IntestazioneRiga1 = this.textEditIntestazione1.Text;
                m_Fattura.IntestazioneRiga2 = this.textEditIntestazione2.Text;
                m_Fattura.IntestazioneRiga3 = this.textEditIntestazione3.Text;
                m_Fattura.IntestazioneRiga4 = this.textEditIntestazione4.Text;

                m_Fattura.Note = this.textEditNote.Text;

                if (m_IsNewInvoice)
                {
                    if (string.IsNullOrEmpty(m_Fattura.Codice))
                    {
                        throw new Exception("Nessuna SiglaFattura associata alla struttura " + m_Struttura.Descrizione);
                    }

                    var prog = this.unitOfWork1.FindObject <Progressivo>(new GroupOperator(new CriteriaOperator[]
                    {
                        new BinaryOperator("Codice", m_Fattura.Codice),
                        new BinaryOperator("Anno", m_Fattura.Anno)
                    }));

                    if (prog == null)
                    {
                        m_Fattura.Numero = 1;
                    }
                    else
                    {
                        m_Fattura.Numero = prog.UltimoNumero + 1;
                    }

                    m_Fattura.CodiceCompleto = string.Format("{0}/{1}/{2}", m_Fattura.Numero, m_Fattura.Codice,
                                                             m_Fattura.Anno);
                }

                m_Fattura.Totale = m_Fattura.RigheFattura.Sum(a => a.PrezzoTotale);

                if (string.IsNullOrEmpty(m_Fattura.Codice))
                {
                    throw new Exception("Manca il codice fattura nella struttura");
                }

                var fprev = this.unitOfWork1.FindObject <Fattura>(new GroupOperator(new CriteriaOperator[]
                {
                    new BinaryOperator("Codice", m_Fattura.Codice),
                    new BinaryOperator("Numero", m_Fattura.Numero - 1),
                    new BinaryOperator("Anno", m_Fattura.Anno)
                }));

                var fsucc = this.unitOfWork1.FindObject <Fattura>(new GroupOperator(new CriteriaOperator[]
                {
                    new BinaryOperator("Codice", m_Fattura.Codice),
                    new BinaryOperator("Numero", m_Fattura.Numero + 1),
                    new BinaryOperator("Anno", m_Fattura.Anno)
                }));

                if (fprev != null && fprev.DataContabile > m_Fattura.DataContabile)
                {
                    XtraMessageBox.Show(
                        "Esiste una fattura precedente " +
                        fprev.CodiceCompleto + " con data successiva.", "Errore",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);

                    return;
                }

                if (fsucc != null && fsucc.DataContabile < m_Fattura.DataContabile)
                {
                    XtraMessageBox.Show(
                        "Esiste una fattura successiva " +
                        fsucc.CodiceCompleto + " con data precedente.", "Errore",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);

                    return;
                }

                foreach (var item in m_Fattura.RigheFattura)
                {
                    if (item.PrezzoTotale != item.Quantita * item.PrezzoUnitario)
                    {
                        XtraMessageBox.Show("Il totale non coincide per la riga: " + item.DescrizioneRiga, "Errore",
                                            MessageBoxButtons.OK, MessageBoxIcon.Error);

                        return;
                    }
                }

                if (m_Fattura.Totale > m_Vendita.TotaleImporto)
                {
                    XtraMessageBox.Show(
                        "Il totale in fattura non può essere maggiore della vendita selezionata: " +
                        m_Vendita.TotaleImporto.ToString("c"), "Errore",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);

                    return;
                }

                if (m_Fattura.Totale + m_Vendita.Fatture.Where(a => a.Oid != m_Fattura.Oid).Sum(a => a.Totale) > m_Vendita.TotaleImporto)
                {
                    XtraMessageBox.Show(
                        "La somma delle fatture emesse non può essere maggiore della vendita selezionata: " +
                        m_Vendita.TotaleImporto.ToString("c"),
                        "Errore",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);

                    return;
                }

                m_Fattura.Save();

                this.unitOfWork1.CommitChanges();

                if (m_IsNewInvoice)
                {
                    m_IsNewInvoice = false;

                    var prog = this.unitOfWork1.FindObject <Progressivo>(new GroupOperator(new CriteriaOperator[]
                    {
                        new BinaryOperator("Codice", m_Fattura.Codice),
                        new BinaryOperator("Anno", m_Fattura.Anno)
                    }));

                    if (prog == null)
                    {
                        prog              = new Progressivo(this.unitOfWork1);
                        prog.Codice       = m_Fattura.Codice;
                        prog.Anno         = m_Fattura.Anno;
                        prog.UltimoNumero = m_Fattura.Numero;

                        prog.Save();
                    }
                    else
                    {
                        prog.UltimoNumero = m_Fattura.Numero;

                        prog.Save();
                    }

                    this.unitOfWork1.CommitChanges();
                }

                Lock(true);

                this.textEditFatturaNumero.Text = m_Fattura.CodiceCompleto;

                modificata = true;
            }
        }