Beispiel #1
0
        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));
            }
        }