private decimal GetUltimoSaldo(int IdPrezioso, string Cassaforte, PreziosiDS ds)
        {
            if (!ds.RW_MOVIMENTI_PREZIOSI.Any(x => x.IDPREZIOSO == IdPrezioso && x.CASSAFORTE == Cassaforte))
            {
                return(0);
            }
            DateTime data = ds.RW_MOVIMENTI_PREZIOSI.Where(x => x.IDPREZIOSO == IdPrezioso && x.CASSAFORTE == Cassaforte).Max(x => x.DATA);

            if (data != null)
            {
                PreziosiDS.RW_MOVIMENTI_PREZIOSIRow riga = ds.RW_MOVIMENTI_PREZIOSI.Where(x => x.IDPREZIOSO == IdPrezioso && x.DATA == data && x.CASSAFORTE == Cassaforte).FirstOrDefault();
                if (riga != null)
                {
                    return(riga.SALDOFINALE);
                }
            }
            return(0);
        }
        public bool SalvaMovimentoPreziosoCassaforteB(int IdPrezioso, string Operazione, decimal Quantita, string Causale, string ConnectedUser)
        {
            try
            {
                PreziosiDS ds = new PreziosiDS();
                using (PreziosiBusiness bPreziosi = new PreziosiBusiness())
                {
                    bPreziosi.FillRW_MOVIMENTI_PREZIOSI(ds);
                    bPreziosi.FillRW_PREZIOSI(ds);

                    decimal saldoA   = GetUltimoSaldo(IdPrezioso, "A", ds);
                    decimal saldoB   = GetUltimoSaldo(IdPrezioso, "B", ds);
                    string  prezioso = ds.RW_PREZIOSI.Where(x => x.IDPREZIOSO == IdPrezioso).Select(x => x.MATERIALE).FirstOrDefault();

                    if (Operazione == "P")
                    {
                        if (saldoB < Quantita)
                        {
                            return(false);
                        }
                        decimal nuovoSaldoB = saldoB - Quantita;

                        PreziosiDS.RW_MOVIMENTI_PREZIOSIRow movimentoB = ds.RW_MOVIMENTI_PREZIOSI.NewRW_MOVIMENTI_PREZIOSIRow();
                        movimentoB.CASSAFORTE    = "B";
                        movimentoB.DATA          = DateTime.Now;
                        movimentoB.IDPREZIOSO    = IdPrezioso;
                        movimentoB.NOTA          = Causale;
                        movimentoB.QUANTITA      = -1 * Quantita;
                        movimentoB.SALDOFINALE   = nuovoSaldoB;
                        movimentoB.SALDOINIZIALE = saldoB;
                        movimentoB.UTENTE        = ConnectedUser;
                        ds.RW_MOVIMENTI_PREZIOSI.AddRW_MOVIMENTI_PREZIOSIRow(movimentoB);

                        bPreziosi.UpdatePreziosiDS(ds.RW_MOVIMENTI_PREZIOSI.TableName, ds);
                        InviaMailCassaforteB(-1 * Quantita, Causale, ConnectedUser, prezioso, saldoB, nuovoSaldoB);
                    }
                }
                return(true);
            }
            catch
            {
                return(false);
            }
        }