private ListViewItem CriarItem(ItemProduçãoFiscal entidade)
        {
            var item = new ListViewItem(new string[lista.Columns.Count]);
            item.SubItems[colReferência.Index].Text = entidade.Mercadoria.Referência;
            item.SubItems[colQuantidade.Index].Text = entidade.Quantidade.ToString();
            item.SubItems[colDescrição.Index].Text = entidade.Mercadoria.Descrição;
            item.SubItems[colTipo.Index].Text = TipoUnidade.Obter(entidade.Mercadoria.TipoUnidadeComercial).Nome;
            item.Tag = entidade;

            return item;
        }
        public void AdicionarProdução(ItemProduçãoFiscal novoItem)
        {
            var esquema = ObterEsquemaLevantandoErroCasoNãoExista(novoItem);

            var conexão = Conexão;

            lock (conexão)
            {
                using (var transação = conexão.BeginTransaction())
                {
                    AdicionarProdução(conexão, transação, novoItem, esquema);
                    transação.Commit();
                }
            }
        }
        private void AdicionarProdução(System.Data.IDbConnection conexão, System.Data.IDbTransaction transação, ItemProduçãoFiscal novoItem, EsquemaProdução esquema)
        {
            if (novoItem.Quantidade == 0)
                return;

            var ingredientes = Ingrediente.Obter(esquema.Referência);
            decimal qtdReceitas = novoItem.Quantidade / esquema.Quantidade;

            AdicionarSaída(conexão, transação, novoItem, qtdReceitas);

            foreach (var ingrediente in ingredientes)
                AdicionarEntrada(conexão, transação, qtdReceitas, ingrediente);
        }
 private void AdicionarSaída(System.Data.IDbConnection conexão, System.Data.IDbTransaction transação, ItemProduçãoFiscal novoItem, decimal qtdReceitas)
 {
     using (var cmd = conexão.CreateCommand())
     {
         cmd.CommandText = SaídaProduçãoFiscal.ObterSqlInserçãoSaída(this, qtdReceitas, novoItem.Referência, novoItem.Quantidade);
         cmd.Transaction = transação;
         cmd.ExecuteNonQuery();
     }
 }
        private static EsquemaProdução ObterEsquemaLevantandoErroCasoNãoExista(ItemProduçãoFiscal novoItem)
        {
            EsquemaProdução esquema = EsquemaProdução.Obter(novoItem.Referência);

            if (esquema == null)
                throw new EsquemaInexistente(novoItem.Referência);

            return esquema;
        }