public DefaultApiResponse ImportProjectExpense(ProjectExpenseCreateModel projectExpense, string token, out BusinessRulesApiResponse businessRulesApiResponse) { var _data = JsonConvert.SerializeObject(projectExpense, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); var _address = ApiHelper.Instance.SiteUrl + ApiHelper.Instance.ProjectExpenseCreateEndpoint; businessRulesApiResponse = null; try { var _jsonResult = ApiHelper.Instance.WebClient(token).UploadString(_address, "POST", _data); if (_jsonResult != "null") { return(new DefaultApiResponse(200, "OK", new string[] { })); } return(new DefaultApiResponse(500, "Internal Application Error: Fail to Import Project Expense", new string[] { })); } catch (WebException _webEx) { using StreamReader _r = new StreamReader(_webEx.Response.GetResponseStream()); string _responseContent = _r.ReadToEnd(); return(ApiHelper.Instance.ProcessApiResponseContent(_webEx, _responseContent, out businessRulesApiResponse)); } }
private void WorkerFetcherDoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { if (dataGridView_projectExpense != null && dataGridView_projectExpense.RowCount > 1) { _errorRowCount = 0; //while validating, deactivate other buttons Invoke((MethodInvoker)(() => button_validate.Enabled = false)); Invoke((MethodInvoker)(() => button_import.Enabled = false)); Invoke((MethodInvoker)(() => button_clear.Enabled = false)); Invoke((MethodInvoker)(() => button_projectExpenseSelectFile.Enabled = false)); Invoke((MethodInvoker)(() => textBox_projectExpenseImportMessages.AppendText("Start time: " + DateTime.Now))); try { foreach (DataGridViewRow _row in dataGridView_projectExpense.Rows) { if (WorkerFetcher.CancellationPending) { break; } _isMappingFieldValueToIDCorrect = true; _isFirstTimeInvalidMapping = true; if (_row.DataBoundItem != null) { ProjectExpenseCreateModel _newProjectExpense = new ProjectExpenseCreateModel { ProjectID = (int)MapFieldValueToID(ProjectNo, _row, false), Comment = ProjectExpenseHandler.Instance.CheckAndGetString(dataGridView_projectExpense, Comment, _row), PurchaseDate = ProjectExpenseHandler.Instance.CheckAndGetDate(dataGridView_projectExpense, PurchaseDate, _row), PaymentMethodID = (int)MapFieldValueToID(PaymentMethod, _row, false), ExpenseTypeID = (int)MapFieldValueToID(ExpenseType, _row, false), AmountIncludingVatExpenseCurrency = ProjectExpenseHandler.Instance.CheckAndGetDouble(dataGridView_projectExpense, AmountIncludingVAT, _row), SalesPriceAmountProjectCurrency = ProjectExpenseHandler.Instance.CheckAndGetDouble(dataGridView_projectExpense, SalesPriceAmount, _row), IsBillable = ProjectExpenseHandler.Instance.CheckAndGetBoolean(dataGridView_projectExpense, IsBillable, _row), ExpenseNo = ProjectExpenseHandler.Instance.CheckAndGetString(dataGridView_projectExpense, ExpenseNo, _row), VatAmountExpenseCurrency = ProjectExpenseHandler.Instance.CheckAndGetDouble(dataGridView_projectExpense, VATAmount, _row), ExpenseCurrencyISO = ProjectExpenseHandler.Instance.CheckAndGetString(dataGridView_projectExpense, ExpenseCurrencyISO, _row), ExternalID = ProjectExpenseHandler.Instance.CheckAndGetString(dataGridView_projectExpense, ExternalID, _row), ProjectSubContractID = (int)MapFieldValueToID(ContractName, _row, false), ProjectExpenseExchangeRate = ProjectExpenseHandler.Instance.CheckAndGetDouble(dataGridView_projectExpense, ExchangeRate, _row), SupplierID = MapFieldValueToID(SupplierNo, _row, true), SupplierInvoiceNo = ProjectExpenseHandler.Instance.CheckAndGetString(dataGridView_projectExpense, SupplierInvoiceNo, _row), ProfitRatio = ProjectExpenseHandler.Instance.CheckAndGetDouble(dataGridView_projectExpense, ProfitRatio, _row) }; if (_isMappingFieldValueToIDCorrect) { if (_senderButton.Name == button_validate.Name) { var _defaultApiResponse = ProjectExpenseHandler.Instance.ValidateProjectExpense(_newProjectExpense, AuthenticationHandler.Instance.Token, out var _businessRulesApiResponse); _errorRowCount = ApiHelper.Instance.HandleApiResponse(_defaultApiResponse, _row, _businessRulesApiResponse, textBox_projectExpenseImportMessages, _errorRowCount, WorkerFetcher, this); } else { var _defaultApiResponse = ProjectExpenseHandler.Instance.ImportProjectExpense(_newProjectExpense, AuthenticationHandler.Instance.Token, out var _businessRulesApiResponse); _errorRowCount = ApiHelper.Instance.HandleApiResponse(_defaultApiResponse, _row, _businessRulesApiResponse, textBox_projectExpenseImportMessages, _errorRowCount, WorkerFetcher, this); } } } } ProjectExpenseHandler.Instance.DisplayErrorRowCountAndSuccessMessage(_errorRowCount, button_import, button_validate, _senderButton, textBox_projectExpenseImportMessages, this); } catch (FormatException _ex) { MessageBox.Show(_ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); } catch (Exception _ex) { MessageBox.Show(_ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); } //reactivate buttons after work is done Invoke((MethodInvoker)(() => button_validate.Enabled = true)); Invoke((MethodInvoker)(() => button_clear.Enabled = true)); Invoke((MethodInvoker)(() => button_projectExpenseSelectFile.Enabled = true)); } }