public Models.TransferResponse CreateTransfer(Models.TransferRequest body)
        {
            Task <Models.TransferResponse> t = CreateTransferAsync(body);

            APIHelper.RunTaskSynchronously(t);
            return(t.Result);
        }
        public async Task <Models.TransferResponse> CreateTransferAsync(Models.TransferRequest body)
        {
            string _baseUri = Configuration.GetBaseURI();

            StringBuilder _queryBuilder = new StringBuilder(_baseUri);

            _queryBuilder.Append("/transfer");

            string _queryUrl = APIHelper.CleanUrl(_queryBuilder);

            var _headers = Utilities.APIHelper.GetHeader();

            var _body = APIHelper.JsonSerialize(body);

            HttpRequest _request = ClientInstance.PostBody(_queryUrl, _headers, _body);

            HttpStringResponse _response = (HttpStringResponse)await ClientInstance.ExecuteAsStringAsync(_request).ConfigureAwait(false);

            HttpContext _context = new HttpContext(_request, _response);

            base.ValidateResponse(_response, _context);

            try
            {
                return(APIHelper.JsonDeserialize <Models.TransferResponse>(_response.Body));
            }
            catch (Exception _ex)
            {
                throw new APIException("Failed to parse the response: " + _ex.Message, _context);
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                selectedTransferID = listViewTransferProducts.SelectedItems[0].SubItems[0].Text;
                Models.TransferRequest myTransfer = transfers.Find(item => item.Id == selectedTransferID);


                PopulateProducts(myTransfer.ProductList);
            }
            catch (Exception ec)
            {
                MessageBox.Show("Select a request");
            }
        }
        public IActionResult TransferBulkMeters(TransferBulkRequest tRequest)
        {
            // getting MeterID[], MeterStatus, Name, company, Comment, Transaction Date

            // send the success message with list of meters
            ArrayList transferMeterList = new ArrayList();

            // check is this request is for Pickup
            if (!(tRequest.MeterStatus.Equals(MeterStatus.Transfer)))
            {
                ModelState.AddModelError("Error", "Invalid request type for transfer meters: " + tRequest.MeterStatus);
                return(NotFound());
            }
            if (tRequest.Name.Equals(null))
            {
                ModelState.AddModelError("Error", "Transferee Name is required");
                return(NotFound());
            }
            if (tRequest.Company.Equals(null))
            {
                ModelState.AddModelError("Error", "Transferee Company is required");
                return(NotFound());
            }

            // validate Meter ID before create a model
            var metersList = tRequest.MIRN;

            for (var i = 0; i < metersList.Length; i++)
            {
                var isValidMeter = _mrepo.IsValidMeter(metersList[i]);

                if (isValidMeter.Item1.Equals(false))
                {
                    ModelState.AddModelError("Error", isValidMeter.Item2);
                    return(NotFound());
                }
            }

            // transfer db model
            var transferDbModel = new DbModels.Transfer();

            transferDbModel.Name    = tRequest.Name;
            transferDbModel.Company = tRequest.Company;

            // TODO: Validate transfer model inputs Name, Company.
            var transferResult = _trepo.Add(transferDbModel);

            if (transferResult > 0)
            {
                var transferID = transferResult;
                for (var i = 0; i < metersList.Length; i++)
                {
                    var meter = _mrepo.Get(metersList[i]);
                    if (meter != null)
                    {
                        var viewModel = new Models.TransferRequest();
                        viewModel.MIRN            = meter.MIRN;
                        viewModel.PayRollID       = tRequest.PayRollID;
                        viewModel.MeterStatus     = tRequest.MeterStatus;
                        viewModel.Comment         = tRequest.Comment;
                        viewModel.TransactionDate = tRequest.TransactionDate;

                        var transferId = Convert.ToString(transferID);

                        // creating meter transaction in meter history table
                        var result = _repo.CreateTransferHistory(transferId, viewModel);

                        // checking the result from repo
                        // if returns true then update meter status in Meter Table
                        if (result.Item1 == true)
                        {
                            var meterStatusUpdateResult = _mrepo.UpdateMeterStatus(meter.MIRN, tRequest.MeterStatus);

                            if (meterStatusUpdateResult == true)
                            {
                                transferMeterList.Add(metersList[i]);
                            }
                            else
                            {
                                ModelState.AddModelError("Error", "Unable to update meter status");
                                return(NotFound());
                            }
                        }
                        else
                        {
                            //if returns false the show the model state error
                            ModelState.AddModelError("Error", result.Item2);
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("Error", "Meter ID " + metersList[i] + " is not found");
                    }
                }
            }

            String message = " ";

            if (transferMeterList.Count > 0)
            {
                message = "Total number of Meter: " + transferMeterList.Count + "\nTransfered Meter List: \n";
                foreach (String transferedMeter in transferMeterList)
                {
                    message += transferedMeter + "\n";
                }
            }
            return(Ok(message));
        }