private void GeneraOrdineCarico() { var fatt = SelectedItem; //controllo se ci sono già altri ordini di carico //per le righe di questo ordine if (fatt.ChiusaSpedita) { MessageManager.NotificaWarnig("Documento già chiuso, non è possibile fare altri documenti di carico!"); return; } if (fatt.TipoDocumento != EnTipoDocumento.OrdineAlFornitore) { MessageManager.NotificaWarnig("Documento deve essere del tipo ordine al fornitore!"); return; } using (var saveEnt = new SaveEntityManager()) { bool save = false; var listFatt = new List <Library.Entity.Fattura>(); var daGenerare = new List <Tuple <FatturaRiga, int> >(); foreach (var item in saveEnt.UnitOfWork.FattureRigheRepository.Find(a => a.FatturaID == fatt.ID).ToList()) { /*deve cercare gli ordini di carico già fatti, e collegati, e detrarre la qta per vedere se farne di nuovi*/ var evaso = saveEnt.UnitOfWork.FattureRigheRepository.Find(a => a.IdRigaCollegata == item.ID).Select(a => new { Qta = a.Fattura.ChiusaSpedita == true ? a.Ricevuti : a.Qta }).Select(a => a.Qta).DefaultIfEmpty(0).Sum(); if (evaso == item.Qta) { continue; } daGenerare.Add(new Tuple <FatturaRiga, int>(item, item.Qta - evaso)); } if (daGenerare.Count() == 0) { MessageManager.NotificaInfo("Non ci altre righe da fare ingressare, chiudi ordine fornitore !"); return; } Library.Entity.Fattura fattExt = null; foreach (var item in daGenerare) { if (fattExt == null) { fattExt = new Library.Entity.Fattura(); fattExt.ClienteFornitoreID = fatt.ClienteFornitoreID; fattExt.TipoDocumento = Library.Entity.EnTipoDocumento.OrdineDiCarico; fattExt.Data = DateTime.Now; fattExt.Codice = ControllerFatturazione.CalcolaCodice(fattExt); var fornitore = saveEnt.UnitOfWork.SoggettiRepository.Find(a => a.ID == fattExt.ClienteFornitoreID).ToList().Select(a => new { RagioneSociale = !string.IsNullOrEmpty(a.RagioneSociale) ? a.RagioneSociale : a.Cognome + " " + a.Nome, PIVA = !string.IsNullOrEmpty(a.PIVA) ? a.PIVA : a.CodiceFiscale }).FirstOrDefault(); fattExt.RagioneSociale = fornitore.RagioneSociale; fattExt.PIVA = fornitore.PIVA; saveEnt.UnitOfWork.FatturaRepository.Add(fattExt); //saveEnt.SaveEntity(""); listFatt.Add(fattExt); } var rigaMaster = item.Item1; var riga = (new Library.Entity.FatturaRiga() { CodiceFornitore = rigaMaster.CodiceFornitore, ArticoloID = rigaMaster.ArticoloID, Descrizione = rigaMaster.Descrizione, Qta = item.Item2, Fattura = fattExt, PrezzoUnitario = rigaMaster.PrezzoUnitario, IvaApplicata = rigaMaster.IvaApplicata, IdRigaCollegata = rigaMaster.ID }); saveEnt.UnitOfWork.FattureRigheRepository.Add(riga); save = true; } if (save) { saveEnt.SaveEntity(""); } else { MessageManager.NotificaInfo("Non ci sono articoli da ordinare!"); return; } foreach (var item in listFatt.Distinct()) { ControllerFatturazione.CalcolaTotali(item); saveEnt.UnitOfWork.FatturaRepository.Update(item); } if (save) { saveEnt.SaveEntity("Generato ordine di carico!"); } RefreshList(null); } }
public static bool GeneraOrdAcq(List <ListinoPrezziFornitoriItem> items) { using (var saveEnt = new SaveEntityManager()) { bool save = false; var listFatt = new List <Library.Entity.Fattura>(); foreach (var item in items.Where(a => a.QtaDaOrdinare - a.QtaInOrdine > 0) .Select(a => new { Qta = a.QtaDaOrdinare - a.QtaInOrdine, a.CodiceArticoloFornitore, a.ID, a.Entity, a.Prezzo }).OrderBy(a => a.Entity.FornitoreID).ToList()) { Library.Entity.Fattura fattExt = saveEnt.UnitOfWork.FatturaRepository.Find(a => a.ChiusaSpedita == false && a.ClienteFornitoreID == item.Entity.FornitoreID && a.TipoDocumento == Library.Entity.EnTipoDocumento.OrdineAlFornitore).FirstOrDefault(); var riga = new Library.Entity.FatturaRiga(); Library.Entity.Articoli.Articolo art = saveEnt.UnitOfWork.ArticoliRepository.Find(a => a.ID == item.Entity.ArticoloID).FirstOrDefault(); if (fattExt == null) { fattExt = listFatt.Where(a => a.ClienteFornitoreID == item.Entity.FornitoreID).FirstOrDefault(); } if (fattExt == null) { fattExt = new Library.Entity.Fattura(); fattExt.ClienteFornitoreID = item.Entity.FornitoreID; fattExt.TipoDocumento = Library.Entity.EnTipoDocumento.OrdineAlFornitore; fattExt.Data = DateTime.Now; fattExt.Codice = ControllerFatturazione.CalcolaCodice(fattExt); var fornitore = saveEnt.UnitOfWork.SoggettiRepository.Find(a => a.ID == fattExt.ClienteFornitoreID).Select(a => new { a.RagioneSociale, a.CodiceFiscale, a.PIVA }).FirstOrDefault(); fattExt.RagioneSociale = fornitore.RagioneSociale; fattExt.PIVA = fornitore.PIVA; saveEnt.UnitOfWork.FatturaRepository.Add(fattExt); saveEnt.SaveEntity(""); } listFatt.Add(fattExt); riga = (new Library.Entity.FatturaRiga() { CodiceFornitore = item.CodiceArticoloFornitore, ArticoloID = item.Entity.ArticoloID, Descrizione = art.Titolo, Qta = item.Qta, Fattura = fattExt, PrezzoUnitario = item.Prezzo, IvaApplicata = art.Iva.ToString(), }); saveEnt.UnitOfWork.FattureRigheRepository.Add(riga); save = true; } if (save) { saveEnt.SaveEntity(""); } else { MessageManager.NotificaInfo("Non ci sono articoli da ordinare!"); return(false); } foreach (var item in listFatt.Distinct()) { ControllerFatturazione.CalcolaTotali(item); saveEnt.UnitOfWork.FatturaRepository.Update(item); } if (save) { saveEnt.SaveEntity("Generati gli ordini di acquisto!"); } return(true); } }
/// <summary> /// genera l'ordine scarico dalla vendita a banco e scarica le giacenze /// </summary> /// <param name="items"></param> /// <param name="cliente"></param> /// <param name="saveEnt"></param> /// <returns></returns> internal static bool GeneraOrdScarico(List <ScontrinoLine> items, int cliente, SaveEntityManager saveEnt) { bool save = false; var listFatt = new List <Library.Entity.Fattura>(); var fattExt = new Library.Entity.Fattura(); fattExt.ClienteFornitoreID = cliente; fattExt.TipoDocumento = Library.Entity.EnTipoDocumento.OrdineDiScarico; fattExt.Data = DateTime.Now; fattExt.Codice = ControllerFatturazione.CalcolaCodice(fattExt); var fornitore = saveEnt.UnitOfWork.SoggettiRepository.Find(a => a.ID == fattExt.ClienteFornitoreID).Select(a => new { a.RagioneSociale, a.CodiceFiscale, a.PIVA }).FirstOrDefault(); fattExt.RagioneSociale = fornitore.RagioneSociale; fattExt.PIVA = fornitore.PIVA; saveEnt.UnitOfWork.FatturaRepository.Add(fattExt); saveEnt.SaveEntity(""); listFatt.Add(fattExt); var negozio = saveEnt.UnitOfWork.DepositoRepository.Find(a => a.Principale == true).First(); using (var depo = new Core.Controllers.ControllerMagazzino()) { foreach (var item in items .Select(a => new { Qta = a.Qta, a.Articolo, a.Descrizione, a.IvaPerc, a.PrezzoIvato }) .ToList()) { var riga = (new Library.Entity.FatturaRiga() { ArticoloID = item.Articolo, Descrizione = item.Descrizione, Qta = (int)item.Qta, Fattura = fattExt, PrezzoUnitario = Math.Round(item.PrezzoIvato / (1 + ((decimal)item.IvaPerc / (decimal)100)), 5, MidpointRounding.ToEven), IvaApplicata = item.IvaPerc.ToString(), }); saveEnt.UnitOfWork.FattureRigheRepository.Add(riga); if (item.Articolo > 0) { ScaricaQtaMagazzino scarica = new ScaricaQtaMagazzino(); scarica.Qta = item.Qta; scarica.Prezzo = item.PrezzoIvato; scarica.Deposito = negozio.ID; scarica.ArticoloID = item.Articolo; scarica.Causale = "Ordine scarico " + fattExt.Codice; EventAggregator.Instance().Publish <ScaricaQtaMagazzino>(scarica); } save = true; } } if (save) { saveEnt.SaveEntity(""); } else { MessageManager.NotificaInfo("Non ci sono articoli da ordinare!"); return(false); } foreach (var item in listFatt.Distinct()) { ControllerFatturazione.CalcolaTotali(item); saveEnt.UnitOfWork.FatturaRepository.Update(item); } if (save) { saveEnt.SaveEntity("Generato l'ordine di scarico!"); } return(true); }
/// <summary> /// generazione fatture da ordine di scarico /// </summary> private void GeneraFatturaDaOrdineScarico() { var fatt = SelectedItem; if (SelectedItems.Count > 1) { if (!MessageManager.QuestionMessage("Vuoi generare fattura per i documenti selezionati. Vuoi proseguire?")) { return; } } if (!MessageManager.QuestionMessage(@"Generando la fattura, il documento\i di carico non sarà più modificabile. Vuoi proseguire?")) { return; } List <Fattura> list = new List <Fattura>(); if (SelectedItems.Count > 1) { list = SelectedItems.Select(a => a.Entity).ToList(); } else { list.Add(fatt); } list = list.Where(a => !a.ChiusaSpedita && a.TipoDocumento == EnTipoDocumento.OrdineDiScarico).ToList(); if (list.Where(a => !a.ChiusaSpedita).Select(a => a.ClienteFornitoreID).Distinct().Count() > 0) { if (!MessageManager.QuestionMessage("Vuoi generare fattura per i clienti selezionati. " + "I documenti chiusi e non del tipo 'Ordine di carico' non saranno presi in considerazione. Vuoi proseguire?")) { return; } } if (list.Count() == 0) { return; } using (var saveEnt = new SaveEntityManager()) { bool save = false; var listFatt = new List <Library.Entity.Fattura>(); foreach (var ordScaricoListFornitore in list.GroupBy(a => a.ClienteFornitoreID).Select(a => new { a.Key, Fatture = a })) { var fattExt = new Library.Entity.Fattura(); fattExt.ClienteFornitoreID = ordScaricoListFornitore.Key; fattExt.TipoDocumento = Library.Entity.EnTipoDocumento.FatturaDiCortesia; fattExt.Data = DateTime.Now; fattExt.Codice = ControllerFatturazione.CalcolaCodice(fattExt); var fornitore = saveEnt.UnitOfWork.SoggettiRepository.Find(a => a.ID == fattExt.ClienteFornitoreID).Select(a => new { a.RagioneSociale, a.CodiceFiscale, a.PIVA }).FirstOrDefault(); fattExt.RagioneSociale = fornitore.RagioneSociale; fattExt.PIVA = fornitore.PIVA; saveEnt.UnitOfWork.FatturaRepository.Add(fattExt); saveEnt.SaveEntity(""); listFatt.Add(fattExt); foreach (var ordScarico in ordScaricoListFornitore.Fatture) { var righeOrdScarico = saveEnt.UnitOfWork.FattureRigheRepository.Find(a => a.FatturaID == ordScarico.ID); foreach (var itemRigaScarico in righeOrdScarico) { var riga = (new Library.Entity.FatturaRiga() { ArticoloID = itemRigaScarico.ArticoloID, Descrizione = itemRigaScarico.Descrizione, Qta = itemRigaScarico.Qta, Fattura = fattExt, PrezzoUnitario = itemRigaScarico.PrezzoUnitario, IvaApplicata = itemRigaScarico.IvaApplicata, }); saveEnt.UnitOfWork.FattureRigheRepository.Add(riga); } save = true; /*chiudo l'ordine di scarico originale*/ var ordScarDb = saveEnt.UnitOfWork.FatturaRepository.Find(a => a.ID == ordScarico.ID).First(); ordScarDb.ChiusaSpedita = true; saveEnt.UnitOfWork.FatturaRepository.Update(ordScarDb); } if (save) { saveEnt.SaveEntity(""); } } foreach (var item in listFatt.Distinct()) { ControllerFatturazione.CalcolaTotali(item); saveEnt.UnitOfWork.FatturaRepository.Update(item); } if (save) { saveEnt.SaveEntity("Generati gli ordini di acquisto!"); } } }