//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: //FinanceDocumentPayments public static FIN_DocumentFinancePayment PersistFinanceDocumentPayment() { //All Documents, usefull to Split into Invoices and CreditNotes List <Guid> listDocuments = new List <Guid>(); List <FIN_DocumentFinanceMaster> listInvoices = new List <FIN_DocumentFinanceMaster>(); List <FIN_DocumentFinanceMaster> listCreditNotes = new List <FIN_DocumentFinanceMaster>(); //listDocuments.Add(new Guid("a067b55b-09b5-4a48-a386-e9d04777540b"));//NC NCCKOQ5R5012016S001/1 //listDocuments.Add(new Guid("92c5c809-0387-4d1f-93c6-afeb6f291149"));//FT FTCKOQ5R5012016S001/1 //Used listDocuments.Add(new Guid("e00cde4c-2218-4c03-ac4b-161b2b89032b")); //NC NCCKOQ5R5012016S001/2 listDocuments.Add(new Guid("ed8e5198-f253-4198-be18-fff188a7d3b4")); //NC NCCKOQ5R5012016S001/3 listDocuments.Add(new Guid("dc4b8170-2b61-4ed4-ad8b-77aaf8a4c695")); //FT FTCKOQ5R5012016S001/3 listDocuments.Add(new Guid("36e49eb1-5e94-47e4-9467-8365ec71e099")); //FT FTCKOQ5R5012016S001/4 listDocuments.Add(new Guid("529f5d2d-4202-4207-b15f-2d58d56c4ebe")); //FT FTCKOQ5R5012016S001/6 //Force Errors : Invalid Documents listDocuments.Add(new Guid("41ba3dfa-8afa-48bd-aa56-1b51015e7c0c")); //GT GTCKOQ5R5012016S001/1 Mário Fernandes invalid document + diferent customer listDocuments.Add(new Guid("a067b55b-09b5-4a48-a386-e9d04777540b")); //NC NCCKOQ5R5012016S001/1 Carlos Fernandes Payed listDocuments.Add(new Guid("92c5c809-0387-4d1f-93c6-afeb6f291149")); //FT FTCKOQ5R5012016S001/1 Carlos Fernandes Payed listDocuments.Add(new Guid("2813d769-3065-44fb-b48f-a8f7a42a0456")); //FT FTCKOQ5R5012016S001/5 Carlos DocumentStatusStatus = A //Other Parameters //decimal paymentAmount = 28.17m;//Euro decimal paymentAmount = 517.06m;//Kwanza string paymentNotes = "$#%#$&%»»'@£§€"; //Prepare listInvoices and listCreditNotes foreach (Guid item in listDocuments) { FIN_DocumentFinanceMaster documentFinanceMaster = (FIN_DocumentFinanceMaster)GlobalFramework.SessionXpo.GetObjectByKey(typeof(FIN_DocumentFinanceMaster), item); if (documentFinanceMaster.DocumentType.Credit) { listInvoices.Add(documentFinanceMaster); } else { listCreditNotes.Add(documentFinanceMaster); } } FIN_DocumentFinancePayment documentFinancePayment = ProcessFinanceDocument.PersistFinanceDocumentPayment(listInvoices, listCreditNotes, SettingsApp.XpoOidDocumentCustomer, SettingsApp.XpoOidDocumentPaymentMethod, SettingsApp.XpoOidDocumentCurrency, paymentAmount, paymentNotes); if (documentFinancePayment != null) { Console.WriteLine(string.Format("documentFinancePayment.PaymentRefNo: [{0}]", documentFinancePayment.PaymentRefNo)); SYS_ConfigurationPrintersTemplates template = ProcessFinanceDocumentSeries.GetDocumentFinanceYearSerieTerminal(GlobalFramework.SessionXpo, documentFinancePayment.DocumentType.Oid).Template; PrintRouter.PrintFinanceDocumentPayment(GlobalFramework.LoggedTerminal.Printer, documentFinancePayment); } return(documentFinancePayment); }
//XpoMode public TreeViewConfigurationPrintersTemplates(Window pSourceWindow, XPGuidObject pDefaultValue, CriteriaOperator pXpoCriteria, Type pDialogType, GenericTreeViewMode pGenericTreeViewMode = GenericTreeViewMode.Default, GenericTreeViewNavigatorMode pGenericTreeViewNavigatorMode = GenericTreeViewNavigatorMode.Default) { //Init Vars Type xpoGuidObjectType = typeof(SYS_ConfigurationPrintersTemplates); //Override Default Value with Parameter Default Value, this way we can have diferent Default Values for GenericTreeView SYS_ConfigurationPrintersTemplates defaultValue = (pDefaultValue != null) ? pDefaultValue as SYS_ConfigurationPrintersTemplates : null; //Override Default DialogType with Parameter Dialog Type, this way we can have diferent DialogTypes for GenericTreeView Type typeDialogClass = (pDialogType != null) ? pDialogType : typeof(DialogConfigurationPrintersTemplates); //Configure columnProperties List <GenericTreeViewColumnProperty> columnProperties = new List <GenericTreeViewColumnProperty>(); columnProperties.Add(new GenericTreeViewColumnProperty("Code") { Title = Resx.global_record_code, MinWidth = 100 }); columnProperties.Add(new GenericTreeViewColumnProperty("Designation") { Title = Resx.global_designation, Expand = true }); columnProperties.Add(new GenericTreeViewColumnProperty("FileTemplate") { Title = Resx.global_files }); columnProperties.Add(new GenericTreeViewColumnProperty("FinancialTemplate") { Title = Resx.global_financialtemplate }); columnProperties.Add(new GenericTreeViewColumnProperty("UpdatedAt") { Title = Resx.global_record_date_updated, MinWidth = 150, MaxWidth = 150 }); //Configure Criteria/XPCollection/Model //CriteriaOperator.Parse("Code >= 100 and Code <= 9999"); CriteriaOperator criteria = pXpoCriteria; XPCollection xpoCollection = new XPCollection(GlobalFramework.SessionXpo, xpoGuidObjectType, criteria); //Call Base Initializer base.InitObject( pSourceWindow, //Pass parameter defaultValue, //Pass parameter pGenericTreeViewMode, //Pass parameter pGenericTreeViewNavigatorMode, //Pass parameter columnProperties, //Created Here xpoCollection, //Created Here typeDialogClass //Created Here ); }
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: //PrintCashDrawerOpenAndMoneyInOut public static bool PrintCashDrawerOpenAndMoneyInOut(Window pSourceWindow, SYS_ConfigurationPrinters pPrinter, String pTicketTitle, decimal pMovementAmount, decimal pTotalAmountInCashDrawer, string pMovementDescription) { bool result = false; SYS_ConfigurationPrintersTemplates template = (SYS_ConfigurationPrintersTemplates)FrameworkUtils.GetXPGuidObject(typeof(SYS_ConfigurationPrintersTemplates), SettingsApp.XpoOidConfigurationPrintersTemplateCashDrawerOpenAndMoneyInOut); try { if (SharedPrintTicket(pSourceWindow, pPrinter, TicketType.CashDrawer)) { result = PrintRouter.PrintCashDrawerOpenAndMoneyInOut(pPrinter, pTicketTitle, pMovementAmount, pTotalAmountInCashDrawer, pMovementDescription); } } catch (Exception ex) { Utils.ShowMessageTouchErrorPrintingTicket(pSourceWindow, pPrinter, ex); } return(result); }
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: //PrintWorkSessionMovement public static bool PrintWorkSessionMovement(Window pSourceWindow, SYS_ConfigurationPrinters pPrinter, POS_WorkSessionPeriod pWorkSessionPeriod) { bool result = false; SYS_ConfigurationPrintersTemplates template = (SYS_ConfigurationPrintersTemplates)FrameworkUtils.GetXPGuidObject(typeof(SYS_ConfigurationPrintersTemplates), SettingsApp.XpoOidConfigurationPrintersTemplateWorkSessionMovement); try { if (SharedPrintTicket(pSourceWindow, pPrinter, TicketType.WorkSession)) { //PrintWorkSessionMovement result = PrintRouter.PrintWorkSessionMovement(pPrinter, pWorkSessionPeriod); } } catch (Exception ex) { Utils.ShowMessageTouchErrorPrintingTicket(pSourceWindow, pPrinter, ex); } return(result); }
public bool PrintWorkSessionMovement(SYS_ConfigurationPrinters pPrinter, POS_WorkSessionPeriod pWorkSessionPeriod, SplitCurrentAccountMode pSplitCurrentAccountMode) { bool result = false; if (pPrinter != null) { SYS_ConfigurationPrinters printer = pPrinter; SYS_ConfigurationPrintersTemplates template = (SYS_ConfigurationPrintersTemplates)FrameworkUtils.GetXPGuidObject(typeof(SYS_ConfigurationPrintersTemplates), SettingsApp.XpoOidConfigurationPrintersTemplateWorkSessionMovement); string splitCurrentAccountFilter = string.Empty; string fileTicket = template.FileTemplate; switch (pSplitCurrentAccountMode) { case SplitCurrentAccountMode.All: break; case SplitCurrentAccountMode.NonCurrentAcount: //Diferent from DocumentType CC splitCurrentAccountFilter = string.Format("AND DocumentType <> '{0}'", SettingsApp.XpoOidDocumentFinanceTypeCurrentAccountInput); break; case SplitCurrentAccountMode.CurrentAcount: //Only DocumentType CC splitCurrentAccountFilter = string.Format("AND DocumentType = '{0}'", SettingsApp.XpoOidDocumentFinanceTypeCurrentAccountInput); break; } try { //Shared Where for details and totals Queries string sqlWhere = string.Empty; if (pWorkSessionPeriod.PeriodType == WorkSessionPeriodType.Day) { sqlWhere = string.Format("PeriodParent = '{0}'{1}", pWorkSessionPeriod.Oid, splitCurrentAccountFilter); } else { sqlWhere = string.Format("Period = '{0}'{1}", pWorkSessionPeriod.Oid, splitCurrentAccountFilter); } //Shared for Both Modes if (sqlWhere != string.Empty) { sqlWhere = string.Format(" AND {0}", sqlWhere); } //Format to Display Vars string dateCloseDisplay = (pWorkSessionPeriod.SessionStatus == WorkSessionPeriodStatus.Open) ? Resx.global_in_progress : pWorkSessionPeriod.DateEnd.ToString(SettingsApp.DateTimeFormat); //Get Session Period Details Hashtable resultHashTable = ProcessWorkSessionPeriod.GetSessionPeriodSummaryDetails(pWorkSessionPeriod); //Print Header Summary DataRow dataRow = null; DataTable dataTable = new DataTable(); dataTable.Columns.Add(new DataColumn("Label", typeof(string))); dataTable.Columns.Add(new DataColumn("Value", typeof(string))); //Open DateTime dataRow = dataTable.NewRow(); dataRow[0] = string.Format("{0}:", Resx.global_worksession_open_datetime); dataRow[1] = pWorkSessionPeriod.DateStart.ToString(SettingsApp.DateTimeFormat); dataTable.Rows.Add(dataRow); //Close DataTime dataRow = dataTable.NewRow(); dataRow[0] = string.Format("{0}:", Resx.global_worksession_close_datetime); dataRow[1] = dateCloseDisplay; dataTable.Rows.Add(dataRow); //Open Total CashDrawer dataRow = dataTable.NewRow(); dataRow[0] = string.Format("{0}:", Resx.global_worksession_open_total_cashdrawer); dataRow[1] = FrameworkUtils.DecimalToStringCurrency((decimal)resultHashTable["totalMoneyInCashDrawerOnOpen"]); dataTable.Rows.Add(dataRow); //Close Total CashDrawer dataRow = dataTable.NewRow(); dataRow[0] = string.Format("{0}:", Resx.global_worksession_close_total_cashdrawer); dataRow[1] = FrameworkUtils.DecimalToStringCurrency((decimal)resultHashTable["totalMoneyInCashDrawer"]); dataTable.Rows.Add(dataRow); //Total Money In dataRow = dataTable.NewRow(); dataRow[0] = string.Format("{0}:", Resx.global_worksession_total_money_in); dataRow[1] = FrameworkUtils.DecimalToStringCurrency((decimal)resultHashTable["totalMoneyIn"]); dataTable.Rows.Add(dataRow); //Total Money Out dataRow = dataTable.NewRow(); dataRow[0] = string.Format("{0}:", Resx.global_worksession_total_money_out); dataRow[1] = FrameworkUtils.DecimalToStringCurrency((decimal)resultHashTable["totalMoneyOut"]); dataTable.Rows.Add(dataRow); //Configure Ticket Column Properties List <TicketColumn> columns = new List <TicketColumn>(); columns.Add(new TicketColumn("Label", "", Convert.ToInt16(_maxCharsPerLineNormal / 2) - 2, TicketColumnsAlign.Right)); columns.Add(new TicketColumn("Value", "", Convert.ToInt16(_maxCharsPerLineNormal / 2) - 2, TicketColumnsAlign.Left)); TicketTable ticketTable = new TicketTable(dataTable, columns, _thermalPrinterGeneric.MaxCharsPerLineNormalBold); //Print Ticket Table ticketTable.Print(_thermalPrinterGeneric); //Line Feed _thermalPrinterGeneric.LineFeed(); //Get Final Rendered DataTable Groups Dictionary <DataTableGroupPropertiesType, DataTableGroupProperties> dictGroupProperties = GenDataTableWorkSessionMovementResume(pWorkSessionPeriod.PeriodType, pSplitCurrentAccountMode, sqlWhere); //Prepare Local vars for Group Loop XPSelectData xPSelectData = null; string designation = string.Empty; decimal quantity = 0.0m; decimal total = 0.0m; string unitMeasure = string.Empty; //Store Final Totals decimal summaryTotalQuantity = 0.0m; decimal summaryTotal = 0.0m; //Used to Custom Print Table Ticket Rows List <string> tableCustomPrint = new List <string>(); //Start to process Group int groupPosition = -1; //Assign Position to Print Payment Group Split Title int groupPositionTitlePayments = (pWorkSessionPeriod.PeriodType == WorkSessionPeriodType.Day) ? 9 : 8; //If CurrentAccount Mode decrease 1, it dont have PaymentMethods if (pSplitCurrentAccountMode == SplitCurrentAccountMode.CurrentAcount) { groupPositionTitlePayments--; } foreach (KeyValuePair <DataTableGroupPropertiesType, DataTableGroupProperties> item in dictGroupProperties) //foreach (DataTableGroupProperties item in dictGroupProperties.Values) { if (item.Value.Enabled) { //Increment Group Position groupPosition++; //Print Group Titles (FinanceDocuments|Payments) if (groupPosition == 0) { _thermalPrinterGeneric.WriteLine(Resx.global_worksession_resume_finance_documents, WriteLineTextMode.Big); _thermalPrinterGeneric.LineFeed(); } else if (groupPosition == groupPositionTitlePayments) { //When finish FinanceDocuemnts groups, print Last Row, the Summary Totals Row _thermalPrinterGeneric.WriteLine(tableCustomPrint[tableCustomPrint.Count - 1], WriteLineTextMode.DoubleHeight); _thermalPrinterGeneric.LineFeed(); _thermalPrinterGeneric.WriteLine(Resx.global_worksession_resume_paymens_documents, WriteLineTextMode.Big); _thermalPrinterGeneric.LineFeed(); } //Reset Totals summaryTotalQuantity = 0.0m; summaryTotal = 0.0m; //Get Group Data from group Query xPSelectData = FrameworkUtils.GetSelectedDataFromQuery(item.Value.Sql); //Generate Columns columns = new List <TicketColumn>(); columns.Add(new TicketColumn("GroupTitle", item.Value.Title, 0, TicketColumnsAlign.Left)); columns.Add(new TicketColumn("Quantity", Resx.global_quantity_acronym, 8, TicketColumnsAlign.Right, typeof(decimal), "{0:0.00}")); //columns.Add(new TicketColumn("UnitMeasure", string.Empty, 3)); columns.Add(new TicketColumn("Total", Resx.global_totalfinal_acronym, 10, TicketColumnsAlign.Right, typeof(decimal), "{0:0.00}")); //Init DataTable dataTable = new DataTable(); dataTable.Columns.Add(new DataColumn("GroupDesignation", typeof(string))); dataTable.Columns.Add(new DataColumn("Quantity", typeof(decimal))); //dataTable.Columns.Add(new DataColumn("UnitMeasure", typeof(string))); dataTable.Columns.Add(new DataColumn("Total", typeof(decimal))); //If Has data if (xPSelectData.Data.Length > 0) { foreach (SelectStatementResultRow row in xPSelectData.Data) { designation = Convert.ToString(row.Values[xPSelectData.GetFieldIndex("Designation")]); quantity = Convert.ToDecimal(row.Values[xPSelectData.GetFieldIndex("Quantity")]); unitMeasure = Convert.ToString(row.Values[xPSelectData.GetFieldIndex("UnitMeasure")]); total = Convert.ToDecimal(row.Values[xPSelectData.GetFieldIndex("Total")]); // Override Encrypted values if (GlobalFramework.PluginSoftwareVendor != null && item.Key.Equals(DataTableGroupPropertiesType.DocumentsUser) || item.Key.Equals(DataTableGroupPropertiesType.PaymentsUser)) { designation = GlobalFramework.PluginSoftwareVendor.Decrypt(designation); } //Sum Summary Totals summaryTotalQuantity += quantity; summaryTotal += total; //_log.Debug(string.Format("Designation: [{0}], quantity: [{1}], unitMeasure: [{2}], total: [{3}]", designation, quantity, unitMeasure, total)); //Create Row dataRow = dataTable.NewRow(); dataRow[0] = designation; dataRow[1] = quantity; //dataRow[2] = unitMeasure; dataRow[2] = total; dataTable.Rows.Add(dataRow); } } else { //Create Row dataRow = dataTable.NewRow(); dataRow[0] = Resx.global_cashdrawer_without_movements; dataRow[1] = 0.0m; //dataRow[2] = string.Empty;//UnitMeasure dataRow[2] = 0.0m; dataTable.Rows.Add(dataRow); } //Add Final Summary Row dataRow = dataTable.NewRow(); dataRow[0] = Resx.global_total; dataRow[1] = summaryTotalQuantity; //dataRow[2] = string.Empty; dataRow[2] = summaryTotal; dataTable.Rows.Add(dataRow); //Prepare TicketTable ticketTable = new TicketTable(dataTable, columns, _thermalPrinterGeneric.MaxCharsPerLineNormal); //Custom Print Loop, to Print all Table Rows, and Detect Rows to Print in DoubleHeight (Title and Total) tableCustomPrint = ticketTable.GetTable(); WriteLineTextMode rowTextMode; //Dynamic Print All except Last One (Totals), Double Height in Titles for (int i = 0; i < tableCustomPrint.Count - 1; i++) { //Prepare TextMode Based on Row rowTextMode = (i == 0) ? WriteLineTextMode.DoubleHeight : WriteLineTextMode.Normal; //Print Row _thermalPrinterGeneric.WriteLine(tableCustomPrint[i], rowTextMode); } //Line Feed _thermalPrinterGeneric.LineFeed(); } } //When finish all groups, print Last Row, the Summary Totals Row, Ommited in Custom Print Loop _thermalPrinterGeneric.WriteLine(tableCustomPrint[tableCustomPrint.Count - 1], WriteLineTextMode.DoubleHeight); result = true; } catch (Exception ex) { _log.Error(ex.Message, ex); throw new Exception(ex.Message); } } return(result); }