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; } }