private void CaricaArticoloFrm_Load(object sender, EventArgs e)
        {
            lblEsito.Text = string.Empty;
            Spedizioni sp = new Spedizioni();

            sp.FillUbicazioni(_ds, true);
        }
        private void CreaGriglia()
        {
            _ds.SPUBICAZIONI.Clear();
            Spedizioni spedizioni = new Spedizioni();

            spedizioni.FillUbicazioni(_ds, true);

            dgvUbicazioni.DataSource = _ds;
            dgvUbicazioni.DataMember = _ds.SPUBICAZIONI.TableName;

            dgvUbicazioni.Refresh();
        }
        private void btnSalva_Click(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(txtCodiceUbicazione.Text))
                {
                    MessageBox.Show("Inserire il codice dell'ubicazione", "ATTENZIONE", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (string.IsNullOrEmpty(txtDescrizioneUbicazione.Text))
                {
                    MessageBox.Show("Inserire la descrizione dell'ubicazione", "ATTENZIONE", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                string codice      = txtCodiceUbicazione.Text.ToUpper();
                string descrizione = txtDescrizioneUbicazione.Text.ToUpper();

                Spedizioni spedizioni = new Spedizioni();

                SpedizioniDS ds = new SpedizioniDS();
                spedizioni.FillUbicazioni(ds, false);

                if (_ds.SPUBICAZIONI.Any(x => x.CODICE == codice))
                {
                    MessageBox.Show("Esiste già un'ubicazione con questo codice", "ATTENZIONE", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                spedizioni.SalvaUbicazione(codice, descrizione, _utenteConnesso);
                CreaGriglia();
                txtCodiceUbicazione.Text      = String.Empty;
                txtDescrizioneUbicazione.Text = string.Empty;
                txtCodiceUbicazione.Focus();
            }
            catch (Exception ex)
            {
                MostraEccezione("Errore nel salvataggio dell'ubicazione", ex);
            }
        }
        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;
            }
        }