Пример #1
0
        public DefaultApiResponse ImportTimeregistration(TimeregistrationCreateModel timeregistration, string token, out BusinessRulesApiResponse businessRulesApiResponse)
        {
            var _data = JsonConvert.SerializeObject(timeregistration, Newtonsoft.Json.Formatting.None,
                                                    new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            });
            var _address = ApiHelper.Instance.SiteUrl + ApiHelper.Instance.TimeregistrationCreateEndpoint;

            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 Timeregistration", 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_timeregistration != null && dataGridView_timeregistration.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_timeregistrationSelectFile.Enabled = false));

                Invoke((MethodInvoker)(() => textBox_timeregistrationImportMessages.AppendText("Start time: " + DateTime.Now)));

                try
                {
                    foreach (DataGridViewRow _row in dataGridView_timeregistration.Rows)
                    {
                        if (WorkerFetcher.CancellationPending)
                        {
                            break;
                        }

                        _isMappingFieldValueToIDCorrect = true;
                        _isFirstTimeInvalidMapping      = true;

                        if (_row.DataBoundItem != null)
                        {
                            TimeregistrationCreateModel _newTimeregistration = new TimeregistrationCreateModel
                            {
                                TaskID            = (int)MapFieldValueToID(_taskNo, _row, false),
                                ProjectID         = (int)MapFieldValueToID(_projectNo, _row, false),
                                ContractID        = (int)MapFieldValueToID(_contractName, _row, false),
                                UserID            = (int)MapFieldValueToID(_userInitials, _row, false),
                                Date              = TimeregistrationHandler.Instance.CheckAndGetDate(dataGridView_timeregistration, _date, _row),
                                Hours             = TimeregistrationHandler.Instance.CheckAndGetDouble(dataGridView_timeregistration, _hours, _row),
                                GroupType         = (int)MapFieldValueToID(_groupType, _row, false),
                                AbsenceCodeID     = (int)MapFieldValueToID(_absenceCode, _row, false),
                                Billable          = TimeregistrationHandler.Instance.CheckAndGetBoolean(dataGridView_timeregistration, _isBillable, _row),
                                BillableHours     = TimeregistrationHandler.Instance.CheckAndGetDouble(dataGridView_timeregistration, _billableHours, _row),
                                HourlyRate        = TimeregistrationHandler.Instance.CheckAndGetDouble(dataGridView_timeregistration, _hourlyRate, _row),
                                HourlyRateName    = TimeregistrationHandler.Instance.CheckAndGetString(dataGridView_timeregistration, _hourlyRateName, _row),
                                CostPrice         = TimeregistrationHandler.Instance.CheckAndGetDouble(dataGridView_timeregistration, _costPrice, _row),
                                CostPriceName     = TimeregistrationHandler.Instance.CheckAndGetString(dataGridView_timeregistration, _costPriceName, _row),
                                Comment           = TimeregistrationHandler.Instance.CheckAndGetString(dataGridView_timeregistration, _comment, _row),
                                AdditionalComment = TimeregistrationHandler.Instance.CheckAndGetString(dataGridView_timeregistration, _additionalComment, _row),
                                MonthlyPeriod     = TimeregistrationHandler.Instance.CheckAndGetString(dataGridView_timeregistration, _monthlyPeriod, _row),
                            };

                            if (_isMappingFieldValueToIDCorrect)
                            {
                                if (_senderButton.Name == button_validate.Name)
                                {
                                    var _defaultApiResponse = TimeregistrationHandler.Instance.ValidateTimeregistration(_newTimeregistration,
                                                                                                                        AuthenticationHandler.Instance.Token, out var _businessRulesApiResponse);

                                    _errorRowCount = ApiHelper.Instance.HandleApiResponse(_defaultApiResponse, _row, _businessRulesApiResponse,
                                                                                          textBox_timeregistrationImportMessages, _errorRowCount, WorkerFetcher, this);
                                }
                                else
                                {
                                    var _defaultApiResponse = TimeregistrationHandler.Instance.ImportTimeregistration(_newTimeregistration,
                                                                                                                      AuthenticationHandler.Instance.Token, out var _businessRulesApiResponse);

                                    _errorRowCount = ApiHelper.Instance.HandleApiResponse(_defaultApiResponse, _row, _businessRulesApiResponse,
                                                                                          textBox_timeregistrationImportMessages, _errorRowCount, WorkerFetcher, this);
                                }
                            }
                        }
                    }

                    TimeregistrationHandler.Instance.DisplayErrorRowCountAndSuccessMessage(_errorRowCount, button_import, button_validate, _senderButton, textBox_timeregistrationImportMessages, 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_timeregistrationSelectFile.Enabled = true));
            }
        }