private void ricalcolaFratelli(SpedizioniDS dsAlternativo, DateTime dataRichiesta, string modello, decimal sequenza, string idmagazz) { decimal quantitaImpegnata = 0; List <SpedizioniDS.SPOPERARow> fratelli = _ds.SPOPERA.Where(x => x.MODELLO_CODICE == modello && x.DATA_RICHIESTA == dataRichiesta).ToList(); if (fratelli.Count == 0) { return; } SpedizioniDS.SPOPERARow rigaOperaGenerica = fratelli[0]; decimal quantitaDaSpedire = fratelli[0].QTANOSPE; decimal quantitaNecessaria = quantitaDaSpedire - quantitaImpegnata; for (int i = 0; i < fratelli.Count; i++) { if (fratelli[i].SEQUENZA <= sequenza) { quantitaImpegnata += fratelli[i].QTAUBIUTIL; quantitaNecessaria = quantitaDaSpedire - quantitaImpegnata; } //if (fratelli[i].SEQUENZA == sequenza && !fratelli[i].VALIDATA) //{ // SpedizioniDS.SPSALDIEXTRow saldo = _ds.SPSALDIEXT.Where(x => x.IDMAGAZZ == idmagazz && x.IDUBICAZIONE == idUbicazione).FirstOrDefault(); // if (saldo == null) return; // saldo.QUANTITA += fratelli[i].QTAUBIUTIL; // fratelli[i].QTAUBI = saldo.QUANTITA; // if (quantitaNecessaria > saldo.QUANTITA) // { // fratelli[i].QTAUBIUTIL = saldo.QUANTITA; // quantitaImpegnata += saldo.QUANTITA; // fratelli[i].QTAUBIRES = 0; // saldo.QUANTITA = 0; // } // else // { // fratelli[i].QTAUBIUTIL = quantitaNecessaria; // quantitaImpegnata += quantitaNecessaria; // fratelli[i].QTAUBIRES = saldo.QUANTITA - quantitaNecessaria; // saldo.QUANTITA = saldo.QUANTITA - quantitaNecessaria; // } //} if (fratelli[i].SEQUENZA > sequenza && !fratelli[i].VALIDATA) { SpedizioniDS.SPSALDIEXTRow saldoRiga = _ds.SPSALDIEXT.Where(x => x.IDUBICAZIONE == fratelli[i].IDUBICAZIONE && x.IDMAGAZZ == idmagazz).FirstOrDefault(); if (saldoRiga == null) { return; } saldoRiga.QUANTITA += fratelli[i].QTAUBIUTIL; fratelli[i].QTAUBI = saldoRiga.QUANTITA; if (quantitaNecessaria > saldoRiga.QUANTITA) { fratelli[i].QTAUBIUTIL = saldoRiga.QUANTITA; quantitaImpegnata += saldoRiga.QUANTITA; fratelli[i].QTAUBIRES = 0; saldoRiga.QUANTITA = 0; } else { fratelli[i].QTAUBIUTIL = quantitaNecessaria; quantitaImpegnata += quantitaNecessaria; fratelli[i].QTAUBIRES = saldoRiga.QUANTITA - quantitaNecessaria; saldoRiga.QUANTITA = saldoRiga.QUANTITA - quantitaNecessaria; } } } int sequenzaAggiuntiva = fratelli.Count; if (quantitaImpegnata < quantitaDaSpedire) { List <SpedizioniDS.SPSALDIEXTRow> saldi = _ds.SPSALDIEXT.Where(x => x.QUANTITA > 0 && x.IDMAGAZZ == idmagazz).OrderBy(x => x.QUANTITA).ToList(); while (quantitaImpegnata < quantitaDaSpedire && saldi.Count > 0) { sequenzaAggiuntiva++; SpedizioniDS.SPOPERARow nuovaRiga = dsAlternativo.SPOPERA.NewSPOPERARow(); nuovaRiga.BRAND = string.Empty; // (string)riga.Cells[0].Value; nuovaRiga.RAGIONE_SOCIALE_RIGA = string.Empty; //riga.Cells[1].Value == DBNull.Value ? string.Empty : (string)riga.Cells[1].Value; nuovaRiga.STAGIONE_DESCRIZIONE_TESTATA = string.Empty; //(string)riga.Cells[2].Value; nuovaRiga.RIFERIMENTO_TESTATA = string.Empty; //(string)riga.Cells[3].Value; nuovaRiga.NUMERO_RIGA = string.Empty; //(string)riga.Cells[4].Value; nuovaRiga.DATA_RICHIESTA = rigaOperaGenerica.DATA_RICHIESTA; nuovaRiga.DATA_CREAZIONE = rigaOperaGenerica.DATA_CREAZIONE; nuovaRiga.MODELLO_CODICE = rigaOperaGenerica.MODELLO_CODICE; nuovaRiga.DESMODELLO = rigaOperaGenerica.DESMODELLO; nuovaRiga.QTANOSPE = rigaOperaGenerica.QTANOSPE; nuovaRiga.PREZZO_UNITARIO = rigaOperaGenerica.PREZZO_UNITARIO; nuovaRiga.QTAACCESI = rigaOperaGenerica.QTAACCESI; nuovaRiga.QTAEST = rigaOperaGenerica.QTAEST; nuovaRiga.QTATOT = rigaOperaGenerica.QTATOT; nuovaRiga.QTAACCCON = rigaOperaGenerica.QTAACCCON; nuovaRiga.QTANOACC = rigaOperaGenerica.QTANOACC; nuovaRiga.QTASPE = rigaOperaGenerica.QTASPE; nuovaRiga.IDUBICAZIONE = saldi[0].IDUBICAZIONE; string codiceUbicazione = _ds.SPUBICAZIONI.Where(x => x.IDUBICAZIONE == saldi[0].IDUBICAZIONE).Select(x => x.CODICE).FirstOrDefault(); nuovaRiga.CODICE = codiceUbicazione; nuovaRiga.QTAUBI = saldi[0].QUANTITA; nuovaRiga.SEQUENZA = sequenzaAggiuntiva; nuovaRiga.VALIDATA = false; if (quantitaNecessaria > saldi[0].QUANTITA) { nuovaRiga.QTAUBIUTIL = saldi[0].QUANTITA; quantitaImpegnata += saldi[0].QUANTITA; nuovaRiga.QTAUBIRES = 0; saldi[0].QUANTITA = 0; } else { nuovaRiga.QTAUBIUTIL = quantitaNecessaria; quantitaImpegnata += quantitaNecessaria; nuovaRiga.QTAUBIRES = saldi[0].QUANTITA - quantitaNecessaria; saldi[0].QUANTITA = saldi[0].QUANTITA - quantitaNecessaria; } dsAlternativo.SPOPERA.AddSPOPERARow(nuovaRiga); saldi = _ds.SPSALDIEXT.Where(x => x.QUANTITA > 0 && x.IDMAGAZZ == idmagazz).OrderBy(x => x.QUANTITA).ToList(); //aggiungi riga } } }
private void btnSimula_Click(object sender, EventArgs e) { try { btnSimula.Enabled = false; Cursor.Current = Cursors.WaitCursor; _inSimulazione = true; if (_ds.SPOPERA.Any(x => x.IsDATA_RICHIESTANull())) { MessageBox.Show("Ci sono righe con data richiesta non valorizzata. Impossibile procedere", "ATTENZIONE", MessageBoxButtons.OK, MessageBoxIcon.Warning); btnSimula.Enabled = true; return; } Spedizioni spedizioni = new Spedizioni(); spedizioni.FillSaldi(_ds, string.Empty, string.Empty, true); spedizioni.FillUbicazioni(_ds, false); SpedizioniDS dsAlternativo = new SpedizioniDS(); int totaleRighe = dgvExcelCaricato.Rows.Count; for (int indiceRighe = 0; indiceRighe < totaleRighe; indiceRighe++) { DataGridViewRow riga = dgvExcelCaricato.Rows[indiceRighe]; string modello = (string)riga.Cells[7].Value; decimal quantitaDaSpedire = (decimal)riga.Cells[9].Value; DateTime dataRichiesta = (DateTime)riga.Cells[5].Value; int righe = dgvExcelCaricato.Rows.Count; SpedizioniDS.MAGAZZRow magazz = spedizioni.GetMagazz(_ds, modello); if (magazz == null) { continue; } SpedizioniDS.SPSALDIEXTRow saldoPerfetto = _ds.SPSALDIEXT.Where(x => x.QUANTITA == quantitaDaSpedire && x.IDMAGAZZ == magazz.IDMAGAZZ).FirstOrDefault(); if (saldoPerfetto != null) { string codiceUbicazione = _ds.SPUBICAZIONI.Where(x => x.IDUBICAZIONE == saldoPerfetto.IDUBICAZIONE).Select(x => x.CODICE).FirstOrDefault(); riga.Cells[17].Value = saldoPerfetto.IDUBICAZIONE; riga.Cells[18].Value = codiceUbicazione; riga.Cells[19].Value = saldoPerfetto.QUANTITA; riga.Cells[20].Value = saldoPerfetto.QUANTITA; riga.Cells[21].Value = 0; saldoPerfetto.QUANTITA = 0; } else { bool primariga = true; decimal quantitaImpegnata = 0; decimal sequenza = 0; List <SpedizioniDS.SPSALDIEXTRow> saldi = _ds.SPSALDIEXT.Where(x => x.QUANTITA > 0 && x.IDMAGAZZ == magazz.IDMAGAZZ).OrderBy(x => x.QUANTITA).ToList(); //if (saldi == 0) //riga.Cells[24].Value = "Nessun articolo in giacenza"; while (quantitaImpegnata < quantitaDaSpedire && saldi.Count > 0) { sequenza++; SpedizioniDS.SPSALDIEXTRow saldo = saldi[0]; string codiceUbicazione = _ds.SPUBICAZIONI.Where(x => x.IDUBICAZIONE == saldo.IDUBICAZIONE).Select(x => x.CODICE).FirstOrDefault(); decimal quantitaNecessaria = quantitaDaSpedire - quantitaImpegnata; if (!primariga) { SpedizioniDS.SPOPERARow nuovaRiga = dsAlternativo.SPOPERA.NewSPOPERARow(); nuovaRiga.BRAND = string.Empty; // (string)riga.Cells[0].Value; nuovaRiga.RAGIONE_SOCIALE_RIGA = string.Empty; //riga.Cells[1].Value == DBNull.Value ? string.Empty : (string)riga.Cells[1].Value; nuovaRiga.STAGIONE_DESCRIZIONE_TESTATA = string.Empty; //(string)riga.Cells[2].Value; nuovaRiga.RIFERIMENTO_TESTATA = string.Empty; //(string)riga.Cells[3].Value; nuovaRiga.NUMERO_RIGA = string.Empty; //(string)riga.Cells[4].Value; nuovaRiga.DATA_RICHIESTA = (DateTime)riga.Cells[5].Value; nuovaRiga.DATA_CREAZIONE = (DateTime)riga.Cells[6].Value; nuovaRiga.MODELLO_CODICE = (string)riga.Cells[7].Value; nuovaRiga.DESMODELLO = (string)riga.Cells[8].Value; nuovaRiga.QTANOSPE = (decimal)riga.Cells[9].Value; nuovaRiga.PREZZO_UNITARIO = (decimal)riga.Cells[10].Value; nuovaRiga.QTAACCESI = (decimal)riga.Cells[11].Value; nuovaRiga.QTAEST = (decimal)riga.Cells[12].Value; nuovaRiga.QTATOT = (decimal)riga.Cells[13].Value; nuovaRiga.QTAACCCON = (decimal)riga.Cells[14].Value; nuovaRiga.QTANOACC = (decimal)riga.Cells[15].Value; nuovaRiga.QTASPE = (decimal)riga.Cells[16].Value; nuovaRiga.IDUBICAZIONE = saldo.IDUBICAZIONE; nuovaRiga.CODICE = codiceUbicazione; nuovaRiga.QTAUBI = saldo.QUANTITA; nuovaRiga.SEQUENZA = sequenza; nuovaRiga.VALIDATA = false; if (quantitaNecessaria > saldo.QUANTITA) { nuovaRiga.QTAUBIUTIL = saldo.QUANTITA; quantitaImpegnata += saldo.QUANTITA; nuovaRiga.QTAUBIRES = 0; saldo.QUANTITA = 0; } else { nuovaRiga.QTAUBIUTIL = quantitaNecessaria; quantitaImpegnata += quantitaNecessaria; nuovaRiga.QTAUBIRES = saldo.QUANTITA - quantitaNecessaria; saldo.QUANTITA = saldo.QUANTITA - quantitaNecessaria; } dsAlternativo.SPOPERA.AddSPOPERARow(nuovaRiga); //aggiungi riga } else { primariga = false; riga.Cells[17].Value = saldo.IDUBICAZIONE; riga.Cells[18].Value = codiceUbicazione; riga.Cells[19].Value = saldo.QUANTITA; if (quantitaNecessaria > saldo.QUANTITA) { riga.Cells[20].Value = saldo.QUANTITA; quantitaImpegnata += saldo.QUANTITA; riga.Cells[21].Value = 0; saldo.QUANTITA = 0; } else { riga.Cells[20].Value = quantitaNecessaria; quantitaImpegnata += quantitaNecessaria; riga.Cells[21].Value = saldo.QUANTITA - quantitaNecessaria; saldo.QUANTITA = saldo.QUANTITA - quantitaNecessaria; } } saldi = _ds.SPSALDIEXT.Where(x => x.QUANTITA > 0 && x.IDMAGAZZ == magazz.IDMAGAZZ).OrderBy(x => x.QUANTITA).ToList(); } } } foreach (SpedizioniDS.SPOPERARow riga in dsAlternativo.SPOPERA) { _ds.SPOPERA.ImportRow(riga); } caricaGriglia(); } catch (Exception ex) { ExceptionFrm frm = new ExceptionFrm(ex); frm.ShowDialog(); btnSimula.Enabled = true; } finally { Cursor.Current = Cursors.Default; _inSimulazione = false; } }