private void btnIncluirTransferência_Click(object sender, EventArgs e) { if (lstboxMateriaisDestino.Items.Count > 0) { int codigoObraOrigem = codigoObra; int codigoLocalOrigem = int.Parse(cmbObraOrigem.SelectedValue.ToString()); string dataTransferencia = mskDataTransferencia.Text.ToString(); Boolean statusDataTransferencia = validar.Data(dataTransferencia); if (statusDataTransferencia == true) { //Obtendo a data da obra - Caso retorne "0", é que ocorreu algum erro no processo string dataObra = camadaNegocios.ConsultaDataTransferencia(codigoObraOrigem); if (dataObra != "0") { //Formatando a data - Caso retorne "0", é que ocorreu algum erro no processo dataObra = validar.AjustarData(dataObra); if (dataObra != "0") { //Comparando a data da Obra com a data da transferência //dataMenor, dataMaior Boolean statusComparaData = validar.DataMenorDataMaior(dataObra, dataTransferencia); if (statusComparaData == true) { Boolean statusAtualizacaoObra = true; int codigoMaterialObra; int quantidadeMaterialObra; //Atualizando os materiais da obra for (int i = (lstboxMateriaisObra.Items.Count) - 1; i >= 0; i--) { var array = ((lstboxMateriaisObra.Items[i]).ToString()).Split('-'); codigoMaterialObra = int.Parse(array[0]); quantidadeMaterialObra = int.Parse(array[2]); statusAtualizacaoObra = camadaNegocios.AlteraMateriaisTransferencia(codigoMaterialObra, codigoObra, quantidadeMaterialObra); if (statusAtualizacaoObra == false) { break; } } if (statusAtualizacaoObra == true) { //Incluindo uma nova transferência, tendo como origem a obra, e como destino o local int codigoMaterialDestino; int quantidadeMaterialDestino; int codigoLocalObra = int.Parse(cmbObraOrigem.SelectedValue.ToString()); int codigoLocalDestino = int.Parse(cmbLocalDestino.SelectedValue.ToString()); int codigoTipoTransferencia = int.Parse(cmbTipoTransferencia.SelectedValue.ToString()); Boolean statusInsercaoMaterial = true; //Criando a requisição e obtendo o código da mesma - Caso retorne 0, indica que não foi possível criar a requisição int codigoTransferecia = camadaNegocios.InserirTransferencia(codigoLocalObra, codigoLocalDestino, codigoTipoTransferencia, dataTransferencia); if (codigoTransferecia != 0) { //Inserindo todos os materiais, um a um for (int index = (lstboxMateriaisDestino.Items.Count) - 1; index >= 0; index--) { var array = ((lstboxMateriaisDestino.Items[index]).ToString()).Split('-'); codigoMaterialDestino = int.Parse(array[0]); quantidadeMaterialDestino = int.Parse(array[2]); statusInsercaoMaterial = camadaNegocios.InserirMateriaisTransferenciaSaida(codigoTransferecia, codigoMaterialDestino, quantidadeMaterialDestino); if (statusInsercaoMaterial == false) { MessageBox.Show("Erro inesperado ao inserir a transferencia. Contate o suporte"); break; } } if (statusInsercaoMaterial == true) { //Retirando do estoque DataSet oDsMateriais = new DataSet(); oDsMateriais = camadaNegocios.ConsultaCodigoMateriaisTransferencia(codigoTransferecia); int tamanhoDataSet = 0; //Obtendo o tamanho do dataset para alocar o vetor foreach (DataRow rows in oDsMateriais.Tables[0].Rows) { tamanhoDataSet++; } //Vetores onde ficarão os ids de material e a quantidade int[] codigoMateriais = new int[tamanhoDataSet + 1]; int[] codigoQuantidades = new int[tamanhoDataSet + 1]; int contador = 0; foreach (DataRow rows in oDsMateriais.Tables[0].Rows) { codigoMateriais[contador] = int.Parse((rows["Material"]).ToString()); codigoQuantidades[contador] = int.Parse((rows["Quantidade"]).ToString()); contador++; } Boolean statusAtualizarEstoque = true; //Diminuindo o estoque da obra de origem for (int i = 0; i < tamanhoDataSet; i++) { statusAtualizarEstoque = camadaNegocios.DiminuiEstoque(codigoMateriais[i], codigoLocalOrigem, codigoQuantidades[i]); if (statusAtualizarEstoque == false) { break; } } if (statusAtualizarEstoque == true) { DataSet oDsMateriaisDestino = new DataSet(); oDsMateriaisDestino = camadaNegocios.ConsultaCodigoMateriaisTransferencia(codigoTransferecia); int tamanhoDataSetDestino = 0; //Obtendo o tamanho do dataset para alocar o vetor foreach (DataRow rows in oDsMateriaisDestino.Tables[0].Rows) { tamanhoDataSetDestino++; } //Vetores onde ficarão os ids de material e a quantidade int[] codigoMateriaisDestino = new int[tamanhoDataSetDestino + 1]; int[] codigoQuantidadesDestino = new int[tamanhoDataSetDestino + 1]; int contadorDestino = 0; foreach (DataRow rows in oDsMateriaisDestino.Tables[0].Rows) { codigoMateriaisDestino[contadorDestino] = int.Parse((rows["Material"]).ToString()); codigoQuantidadesDestino[contadorDestino] = int.Parse((rows["Quantidade"]).ToString()); contadorDestino++; } Boolean statusAtualizarEstoqueDestino = true; //Aumentando o estoque do local destino for (int i = 0; i < tamanhoDataSetDestino; i++) { statusAtualizarEstoque = camadaNegocios.AumentaEstoque(codigoMateriaisDestino[i], codigoLocalDestino, codigoQuantidadesDestino[i]); if (statusAtualizarEstoqueDestino == false) { break; } } if (statusAtualizarEstoqueDestino == true) { Boolean statusValidarObra = camadaNegocios.ValidarObra(codigoLocalDestino); if (statusValidarObra == true) { MessageBox.Show("Transferência incluída com sucesso"); } else { MessageBox.Show("Transferência incluída com sucesso. No entanto, não foi possível atualizar o status da obra"); } //Recarregando a página Point posicaoForm = new Point(100, 100); posicaoForm = this.Location; Form formIncluirRequisicaoSaida = new IncluirTransferenciaSaida(formAnterior, posicaoForm.X, posicaoForm.Y, permissaoUsuario); xClicked = false; this.Close(); formIncluirRequisicaoSaida.Show(); } else { MessageBox.Show("Erro ao incluir a transferência"); } } else { MessageBox.Show("Erro ao incluir a transferência"); } } } else { MessageBox.Show("Não foi possível criar a transferência"); } } else { MessageBox.Show("Não foi possível atualizar os materiais da obra. Contate o suporte"); } } else { MessageBox.Show("A data de transferência não pode ser menor do que a data da obra"); } } else { MessageBox.Show("Erro ao converter a data da obra"); } } else { MessageBox.Show("Erro ao consultar a data da obra"); } } else { MessageBox.Show("Data de transferência inválida"); } } else { MessageBox.Show("Transfira pelo menos um material para o local destino"); } }