// /// <summary> /// Performs the auto cash dispense. /// </summary> /// <returns>True if succeeded; otherwise false.</returns> public bool AutoCashDispense(string fieldName, string fieldValue, decimal value) { DispenserWorkerResult result = DispenserWorkerResult.None; string message = string.Empty; this.EnsureDecksAreLoaded(); IDictionary <string, DeckDenomValue> pairs = new SortedDictionary <string, DeckDenomValue>(StringComparer.InvariantCultureIgnoreCase); string keyLower = "LOWER"; string keyUpper = "UPPER"; decimal upperCount = 0; decimal lowerCount = 0; decimal receiptAmount = 0; try { // Determine the number of counts from lower and upper deck decimal upperAvailAmount = this.UpperDeck.RemainingValueCalculated; decimal lowerAvailAmount = this.LowerDeck.RemainingValueCalculated; // denominations decimal upperDenom = this.UpperDeck.Denimination; decimal lowerDenom = this.LowerDeck.Denimination; if (lowerDenom > upperDenom) { // denom decimal tempDenom = lowerDenom; lowerDenom = upperDenom; upperDenom = tempDenom; // total amount decimal tempAmount = lowerAvailAmount; lowerAvailAmount = upperAvailAmount; upperAvailAmount = tempAmount; keyLower = "UPPER"; keyUpper = "LOWER"; } // mapping for upper and lower deck pairs.Add(keyLower, new DeckDenomValue() { Denomination = lowerDenom, Value = lowerAvailAmount }); pairs.Add(keyUpper, new DeckDenomValue() { Denomination = upperDenom, Value = upperAvailAmount }); // if valid amount is passed if (value > 0) { decimal inputValue = value; // upper count upperCount = Math.Floor(inputValue / pairs[keyUpper].Denomination); if (upperCount > pairs[keyUpper].TotalCount) { upperCount = pairs[keyUpper].TotalCount; } inputValue -= (upperCount * pairs[keyUpper].Denomination); // lower count lowerCount = Math.Floor(inputValue / pairs[keyLower].Denomination); if (lowerCount > pairs[keyLower].TotalCount) { lowerCount = pairs[keyLower].TotalCount; } inputValue -= (lowerCount * pairs[keyLower].Denomination); // updated values pairs[keyUpper].Value = upperCount; pairs[keyLower].Value = lowerCount; receiptAmount = inputValue; } // dispense result = this.Dispense(pairs["UPPER"].Value, pairs["LOWER"].Value, out message); if (result != (DispenserWorkerResult.Success | DispenserWorkerResult.LowerDeckOK | DispenserWorkerResult.UpperDeckOK)) { LogManager.WriteLog(message, LogManager.enumLogLevel.Error); } else { LogManager.WriteLog(message, LogManager.enumLogLevel.Info); } // try to print the remaing amount as receipt if (receiptAmount > 0) { try { using (CReportViewer objReportViewer = new CReportViewer()) { objReportViewer.PrintCashDispenserReceipt(System.Environment.MachineName, fieldName, fieldValue, Convert.ToDecimal(receiptAmount)); } } catch (Exception ex) { ExceptionManager.Publish(ex); } } WriteAuditLog(this.UpperDeck, this.LowerDeck, upperCount, lowerCount, "Receipt", receiptAmount); } catch (Exception ex) { ExceptionManager.Publish(ex); } return(result == (DispenserWorkerResult.Success | DispenserWorkerResult.LowerDeckOK | DispenserWorkerResult.UpperDeckOK)); }
/// <summary> /// Dispenses the specified show message box. /// </summary> /// <param name="showMessageBox">if set to <c>true</c> [show message box].</param> public DispenserWorkerResult Dispense(decimal cd1Value, decimal cd2Value, out string outputString) { CDC.CashDispenserItem.DispenseResult result1 = null; CDC.CashDispenserItem.DispenseResult result2 = null; string cd1 = string.Empty; string cd2 = string.Empty; DispenserWorkerResult result = DispenserWorkerResult.None; outputString = string.Empty; this.EnsureDecksAreLoaded(); try { if (cd1Value > 0) { try { CDC.CashDispenserItem item1 = this.UpperDeck; cd1 = item1.CassetteAlias; result1 = item1.Dispense(cd1Value); } catch (Exception ex) { ExceptionManager.Publish(ex); } } else { result1 = new BMC.CashDispenser.Core.CashDispenserItem.DispenseResult() { Result = true }; } if (cd2Value > 0) { try { CDC.CashDispenserItem item2 = this.LowerDeck; cd2 = item2.CassetteAlias; result2 = item2.Dispense(cd2Value); } catch (Exception ex) { ExceptionManager.Publish(ex); } } else { result2 = new BMC.CashDispenser.Core.CashDispenserItem.DispenseResult() { Result = true }; } } catch (Exception ex) { ExceptionManager.Publish(ex); } finally { string currencySymbol = ExtensionMethods.GetCurrencySymbol(string.Empty); StringBuilder sb = new StringBuilder(); if (result1 != null) { sb.Append(result1.IssuedValue.ToString() + " " + currencySymbol); sb.Append(" issued, "); sb.Append(result1.RejectedValue.ToString() + " " + currencySymbol); sb.Append(" rejected from " + cd1); sb.Append(" (" + result1.ErrorDescription + ")"); // Upper Deck if (result1.Result) { result |= DispenserWorkerResult.UpperDeckOK; } else { result |= DispenserWorkerResult.UpperDeckFail; } } // Lower Deck if (result2 != null) { if (sb.Length > 0) { sb.Append(Environment.NewLine); } sb.Append(result2.IssuedValue.ToString() + " " + currencySymbol); sb.Append(" issued, "); sb.Append(result2.RejectedValue.ToString() + " " + currencySymbol); sb.Append(" rejected from " + cd2); sb.Append(" (" + result2.ErrorDescription + ")"); if (result2.Result) { result |= DispenserWorkerResult.LowerDeckOK; } else { result |= DispenserWorkerResult.LowerDeckFail; } } outputString = sb.ToString(); } // Final Condition if (((result & DispenserWorkerResult.LowerDeckOK) == DispenserWorkerResult.LowerDeckOK) && ((result & DispenserWorkerResult.UpperDeckOK) == DispenserWorkerResult.UpperDeckOK)) { result = DispenserWorkerResult.Success | DispenserWorkerResult.LowerDeckOK | DispenserWorkerResult.UpperDeckOK; } else { result &= ~DispenserWorkerResult.None; result |= DispenserWorkerResult.Failed; } return(result); }