public ComputeChangeResponse ComputeChange(ComputeChangeRequest request) { ComputeChangeResponse response = new ComputeChangeResponse(); Logger.Log(request); try { // Verifica se os dados recebidos são válidos. if (request.IsValid == false) { response.OperationReport = request.ValidationReport; return(response); } uint change = CalculateTotalChangeAmount(request.ReceivedAmount, request.ProductAmount); uint totalChangeAmount = change; List <ChangeData> changeDataList = new List <ChangeData>(); while (change > 0) { AbstractProcessor processor = ProcessorFactory.Create(change); if (processor == null) { Report report = new Report(); report.Message = "Ocorreu um erro: Não há troco disponível"; response.OperationReport.Add(report); return(response); } Dictionary <uint, uint> changeDictionary = processor.Calculate(change); ChangeData changeData = new ChangeData() { Name = processor.GetName(), ChangeDictionary = changeDictionary }; changeDataList.Add(changeData); long totalCurrentAmount = changeDictionary.Sum(p => (p.Value * p.Key)); change -= (uint)totalCurrentAmount; } response.ChangeDataList = changeDataList; response.TotalChangeAmount = totalChangeAmount; response.Success = true; } catch (Exception e) { Logger.Log(e); Report report = new Report(); report.Message = "Ocorreu um erro: não foi possível processar sua operação."; response.OperationReport.Add(report); } Logger.Log(response); return(response); }
private void UxBtnCalculate_Click(object sender, EventArgs e) { this.UxTxtChange.Text = ""; this.UxTxtChangeDetailAmount.Text = ""; uint receivedAmount = uint.Parse(this.UxTxtReceivedAmount.Text); uint productAmount = uint.Parse(this.UxTxtProductAmount.Text); TrocofyManager manager = new TrocofyManager(); ComputeChangeRequest request = new ComputeChangeRequest(); request.ReceivedAmount = receivedAmount; request.ProductAmount = productAmount; ComputeChangeResponse response = manager.ComputeChange(request); if (response.Success == false) { string validationMessage = ""; foreach (Report error in response.OperationReport) { validationMessage += "Campo: " + error.Field + Environment.NewLine + "Mensagem: " + error.Message + "\n\n\r"; } MessageBox.Show(validationMessage, "Trocofy - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { this.UxTxtChange.Text = response.TotalChangeAmount.ToString(); foreach (ChangeData changeData in response.ChangeDataList) { this.UxTxtChangeDetailAmount.Text += changeData.Name + Environment.NewLine; foreach (KeyValuePair <uint, uint> kvPair in changeData.ChangeDictionary) { this.UxTxtChangeDetailAmount.Text += kvPair.Key.ToString() + ": " + kvPair.Value.ToString() + Environment.NewLine; } this.UxTxtChangeDetailAmount.Text += Environment.NewLine; } } }