using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Systems; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.Versioning; using System.Text.RegularExpressions; namespace OnlineSalesAutoCrop.CoreAPI.Models.Global { public static class GlobalFunctions { #region Menu Related Functions /// /// /// /// /// private static void MakeHierarchy(GroupPermission parent, List srcData) { try { IEnumerable children = srcData.Where(x => x.ParentId == parent.ModuleId); parent.Children.AddRange(children); foreach (GroupPermission child in parent.Children) { MakeHierarchy(parent: child, srcData: srcData); } } catch (Exception e) { throw new InvalidOperationException(e.Message, e); } } /// /// /// /// public static Menu HierarchicalMenu() { Menu menu = []; Menu flatMenu = BuildMenu(); IEnumerable data = flatMenu.Where(x => string.IsNullOrEmpty(x.ParentId) || string.IsNullOrWhiteSpace(x.ParentId)); menu.AddRange(data); foreach (GroupPermission parent in menu) { MakeHierarchy(parent: parent, srcData: flatMenu); } return menu; } /// /// /// /// public static Menu BuildMenu() { Menu menu = []; #region System Setup menu.BeginGroup("ELIT.1", "System Setup", "fa fa-sun-o"); menu.MenuItem("ELIT.1.3", "Label Setting", "fa fa-sliders", "labelsetting", true); menu.MenuItem("ELIT.1.1", "System Information", "fa fa-cog", "thissystem", true); menu.MenuItem("ELIT.1.1A", "Sales Dashboard", false); menu.MenuItem("ELIT.1.1B", "Accounting Dashboard", false); menu.MenuItem("ELIT.1.1C", "Purchase Dashboard", false); menu.MenuItem("ELIT.1.1D", "Fixed Assets Dashboard", false); menu.BeginGroup("ELIT.1.2", "User Management", "fa fa-users"); menu.MenuItem("ELIT.1.2.1", "Groups", "fa fa-address-book-o", "groups", true); menu.MenuItem("ELIT.1.2.2", "Users", "fa fa-address-card-o", "users", true); menu.MenuItem("ELIT.1.2.3", "Reset Password", false); menu.MenuItem("ELIT.1.2.4", "Force Logout", "fa fa-address-card-o", "forcelogout", true); menu.MenuItem("ELIT.1.2.5", "View Other's Access log", false); menu.EndGroup(); menu.MenuItem("ELIT.1.3A", "Lookup Data", "fa fa-sliders", "lookupdata", true); menu.MenuItem("ELIT.1.4", "Custom Report Setup", "fa fa-table", "customreports", true); menu.BeginGroup("ELIT.1.5", "Basic Setup", "fa fa-wrench"); menu.MenuItem("ELIT.1.5.1", "Clients", "fa fa-address-card-o", "clients", true); menu.MenuItem("ELIT.1.5.2", "Suppliers", "fa fa-credit-card", "suppliers", true); menu.MenuItem("ELIT.1.5.2A", "Allow to Set Cash Purchase Suppliers", false); menu.MenuItem("ELIT.1.5.3", "Employees", "fa fa-user-plus", "employees", true); menu.MenuItem("ELIT.1.5.4", "Project Leads", "fa fa-user-circle-o", "projectleads", true); menu.MenuItem("ELIT.1.5.5", "Project Managers", "fa fa-user-circle-o", "projectmgts", true); menu.MenuItem("ELIT.1.5.6", "Projects", "fa fa-product-hunt", "projects", true); menu.MenuItem("ELIT.1.5.7", "Stores", "fa fa-pencil-square", "stores", true); menu.MenuItem("ELIT.1.5.7A", "Allow to Set Central Store", false); menu.MenuItem("ELIT.1.5.8", "Banks & Branches", "fa fa-university", "bankbranches", true); menu.MenuItem("ELIT.1.5.9", "Bank Accounts", "fa fa-credit-card", "bankaccounts", true); menu.MenuItem("ELIT.1.5.10", "GL Codes", "fa fa-book", "glcodes", true); menu.MenuItem("ELIT.1.5.11", "User Clients & Projects", "fa fa-product-hunt", "userprojects", true); menu.MenuItem("ELIT.1.5.12", "User Suppliers", "fa fa-product-hunt", "usersuppliers", true); menu.MenuItem("ELIT.1.5.15", "Edit Code (All Setups)", false); menu.EndGroup(); menu.EndGroup(); #endregion #region Athentication Process menu.BeginGroup("ELIT.2", "Authentication Process", "fa fa-cogs"); menu.MenuItem("ELIT.2.1", "Authentication", "fa fa-check", "authentications", true); menu.MenuItem("ELIT.2.2", "Authorization", "fa fa-check-square-o", "authorizations", true); menu.MenuItem("ELIT.2.3", "Deactivation", "fa fa-window-close-o", "deactivations", true); menu.MenuItem("ELIT.2.4", "Pending Authentication", string.Empty, "pendingauth", false); menu.EndGroup(); #endregion #region General Ledger menu.BeginGroup("ELIT.3", "General Ledger", "fa fa-university"); menu.BeginGroup("ELIT.3.1", "Basic Setup", "fa fa-wrench"); menu.MenuItem("ELIT.3.1.1", "Chart of Accounts", "fa fa-th-list", "chartofaccounts", true); menu.MenuItem("ELIT.3.1.2", "Fix GL Balance", "fa fa-wrench", "fixBalance", true); menu.MenuItem("ELIT.3.1.3", "GL Head Identification", "fa fa-cog", "identifyglhead", true); menu.EndGroup(); menu.BeginGroup("ELIT.3.2", "Transactions", "fa fa-building"); menu.MenuItem("ELIT.3.2.1", "GL Transactions", "fa fa-archive", "gltrans", true); menu.MenuItem("ELIT.3.2.2", "Upload Auto Voucher", "fa fa-upload", "gltranav", true); menu.MenuItem("ELIT.3.2.3", "Year End Process", "fa fa-cog", "yearendprocess", true); menu.MenuItem("ELIT.3.2.4", "Undo Year End", "fa fa-undo", "undoyearend", true); menu.MenuItem("ELIT.3.2.5", "Authorize Transactions", "fa fa-check-square", "authgltrans", true); menu.MenuItem("ELIT.3.2.6", "Special Delete of GL Transaction", false); menu.MenuItem("ELIT.3.2.7", "Rollback Transactions", "fa fa-undo", "rollbackgltrans", true); menu.MenuItem("ELIT.3.2.8", "Dashboard Processor", "fa fa-cog", "dbprocessor", true); menu.EndGroup(); menu.BeginGroup("ELIT.3.3", "Reports", "fa fa-newspaper-o"); menu.MenuItem("ELIT.3.3.1", "Ledger", "fa fa-file-text-o", "glledger", true); menu.MenuItem("ELIT.3.3.2", "Monthly Turnover", "fa fa-file-text-o", "turnover", true); menu.MenuItem("ELIT.3.3.3", "Trial Balance", "fa fa-file-text-o", "trialbalance", true); menu.MenuItem("ELIT.3.3.8", "Income & Expenditure", "fa fa-file-text-o", "incomeexpense", true); menu.MenuItem("ELIT.3.3.4", "Day Book", "fa fa-file-text-o", "daybook", true); menu.MenuItem("ELIT.3.3.5", "Bank/Cash Book", "fa fa-file-text-o", "bankcashbook", true); menu.MenuItem("ELIT.3.3.6", "Schedule", "fa fa-file-text-o", "glschedule", true); menu.MenuItem("ELIT.3.3.7", "Previous Final Reports", "fa fa-file-text-o", "prvfinalreports", true); menu.EndGroup(); menu.EndGroup(); #endregion #region Order To Cash menu.BeginGroup("ELIT.4", "Order To Cash", "fa fa-money"); menu.BeginGroup("ELIT.4.1", "Basic Setup", "fa fa-wrench"); menu.MenuItem("ELIT.4.1.1", "Income GL Codes", "fa fa-pencil-square-o", "incomeglcodes", true); menu.MenuItem("ELIT.4.1.2", "VAT Liability GL Codes", "fa fa-pencil-square", "vatglcodes", true); menu.MenuItem("ELIT.4.1.3", "AIT GL Codes", "fa fa-book", "aitglcodes", true); menu.MenuItem("ELIT.4.1.10", "Edit Code (All Setups)", false); menu.EndGroup(); menu.BeginGroup("ELIT.4.2", "Regular Activities", "fa fa-building"); menu.MenuItem("ELIT.4.2.1", "Purchase Orders", "fa fa-smile-o", "purchaseorders", true); menu.MenuItem("ELIT.4.2.2", "Invoices", "fa fa-share-square", "invoices", true); menu.MenuItem("ELIT.4.2.3", "Payments", "fa fa-money", "payments", true); menu.MenuItem("ELIT.4.2.4", "Freeze PO/Invoice", "fa fa-archive", "archivepoinvs", true); menu.MenuItem("ELIT.4.2.5", "PO Attachment", false); menu.MenuItem("ELIT.4.2.6", "Payment Confirmation", false); menu.MenuItem("ELIT.4.2.7", "Special Edit of PO/Invoice", false); menu.MenuItem("ELIT.4.2.8", "VAT Challan Update", "fa fa-sliders", "updvatchlano2c", true); menu.EndGroup(); menu.BeginGroup("ELIT.4.3", "Reports", "fa fa-newspaper-o"); menu.MenuItem("ELIT.4.3.1", "GL Vouchers", "fa fa-th-list", "glvouchers", true); menu.MenuItem("ELIT.4.3.2", "Transactional Reports", "fa fa-file-text-o", "txnreports", true); menu.MenuItem("ELIT.4.3.3", "Contract Expiry Report", "fa fa-file-text-o", "contexpryreports", true); menu.MenuItem("ELIT.4.3.4", "Customized Report", "fa fa-file-text-o", "customreporto2c", true); menu.MenuItem("ELIT.4.3.5", "Client Ledger", "fa fa-file-text-o", "clientledgero2c", true); menu.MenuItem("ELIT.4.3.6", "Monthly Trends", "fa fa-file-text-o", "monthlytrendso2c", true); menu.EndGroup(); menu.EndGroup(); #endregion #region Sales menu.BeginGroup("ELIT.9", "Sales System", "fa fa-sitemap"); menu.BeginGroup("ELIT.9.1", "Basic Setup", "fa fa-wrench"); menu.MenuItem("ELIT.9.1.1", "Market Hierarchies", "fa fa-pencil-square", "markethierarchies", true); menu.MenuItem("ELIT.9.1.2", "Sales Points", "fa fa-pencil-square", "salespoints", true); menu.MenuItem("ELIT.9.1.2A", "Allow to Set Central Warehouse", false); menu.MenuItem("ELIT.9.1.3", "Product Hierarchies", "fa fa-pencil-square", "producthierarchies", true); menu.MenuItem("ELIT.9.1.4", "Brands", "fa fa-pencil-square", "brands", true); menu.MenuItem("ELIT.9.1.5", "SKUs", "fa fa-pencil-square", "skus", true); menu.MenuItem("ELIT.9.1.6", "Channel Hierarchies", "fa fa-pencil-square", "channelhierarchies", true); menu.MenuItem("ELIT.9.1.7", "Customers", "fa fa-pencil-square", "customers", true); menu.MenuItem("ELIT.9.1.8", "Sales Officers", "fa fa-pencil-square", "salesofficers", true); menu.MenuItem("ELIT.9.1.9", "Product Prices", "fa fa-pencil-square", "skupricess", true); menu.MenuItem("ELIT.9.1.10", "Product VAT-SD-Comm", "fa fa-pencil-square", "skuvattaxes", true); menu.MenuItem("ELIT.9.1.11", "Customer Credit", "fa fa-pencil-square", "customercredit", true); menu.MenuItem("ELIT.9.1.12", "External Products", "fa fa-pencil-square", "extnlproducts", true); menu.MenuItem("ELIT.9.1.13", "Sales Promotions", "fa fa-pencil-square", "salespromotions", true); menu.MenuItem("ELIT.9.1.14", "Order Authorization Limit", "fa fa-pencil-square", "ordrauthlimit", true); menu.MenuItem("ELIT.9.1.30", "Edit Code (All Setups)", false); menu.EndGroup(); menu.BeginGroup("ELIT.9.2", "Regular Activities", "fa fa-building"); menu.MenuItem("ELIT.9.2.1", "Customer Opening Balance", "fa fa-puzzle-piece", "slscustsopnbal", true); menu.MenuItem("ELIT.9.2.1A", "Authorize Customer Opening Balance", false); menu.MenuItem("ELIT.9.2.2", "Customer Adjustment", "fa fa-pencil-square", "slscustsadjustment", true); menu.MenuItem("ELIT.9.2.2A", "Authorize Customer Adjustment", false); menu.MenuItem("ELIT.9.2.3", "Initial Stock", "fa fa-puzzle-piece", "slsinitstocks", true); menu.MenuItem("ELIT.9.2.3A", "Authorize Initial Stock", false); menu.MenuItem("ELIT.9.2.4", "Receive Stocks", "fa fa-reply-all", "slsrcvstocks", true); menu.MenuItem("ELIT.9.2.4A", "Authorize Receive Stocks", false); menu.MenuItem("ELIT.9.2.5", "Sales Orders", "fa fa-pencil-square", "slsorders", true); menu.MenuItem("ELIT.9.2.5A", "Authorize Sales Order", false); menu.MenuItem("ELIT.9.2.6", "Spot Sales", "fa fa-pencil-square", "slsdirectinvoices", true); menu.MenuItem("ELIT.9.2.6A", "Authorize Spot Sales", false); menu.MenuItem("ELIT.9.2.7", "Sales Invoices", "fa fa-pencil-square", "slsinvoices", true); menu.MenuItem("ELIT.9.2.7A", "Authorize Sales Invoice", false); menu.MenuItem("ELIT.9.2.8", "Payment Against Invoices", "fa fa-archive", "slsinvpayments", true); menu.MenuItem("ELIT.9.2.8A", "Authorize Payment Against Invoice", false); menu.MenuItem("ELIT.9.2.9", "Stock Transfers", "fa fa-archive", "slsstockxfers", true); menu.MenuItem("ELIT.9.2.9A", "Authorize Stock Transfer", false); menu.MenuItem("ELIT.9.2.10", "Receive Transferred Stocks", "fa fa-archive", "slsstockxferrcvs", true); menu.MenuItem("ELIT.9.2.10A", "Authorize Transferred Stock", false); menu.MenuItem("ELIT.9.2.11", "Fix Transfer Anomalies", "fa fa-archive", "slsstockxferanmls", true); menu.MenuItem("ELIT.9.2.11A", "Authorize Transfer Anomaly", false); menu.MenuItem("ELIT.9.2.12", "Sales Return", "fa fa-archive", "slsrtnstocks", true); menu.MenuItem("ELIT.9.2.12A", "Authorize Return Stock", false); menu.MenuItem("ELIT.9.2.13", "Damage Stocks", "fa fa-archive", "slsdmgstocks", true); menu.MenuItem("ELIT.9.2.13A", "Authorize Damage Stock", false); menu.MenuItem("ELIT.9.2.14", "Stock Take", "fa fa-archive", "slsstocktakes", true); menu.MenuItem("ELIT.9.2.14A", "Authorize Stock Take", false); menu.EndGroup(); menu.BeginGroup("ELIT.9.3", "Reports", "fa fa-newspaper-o"); menu.MenuItem("ELIT.9.3.1", "Customer Balance", "fa fa-th-list", "salescustbalance", true); menu.MenuItem("ELIT.9.3.2", "Customer Ledger", "fa fa-th-list", "salescustledger", true); menu.MenuItem("ELIT.9.3.3", "Current Stock", "fa fa-file-text-o", "salescurrentstock", true); menu.MenuItem("ELIT.9.3.4", "Stock Ledger", "fa fa-th-list", "salesstockledger", true); menu.EndGroup(); menu.EndGroup(); #endregion #region Purchase To Pay menu.BeginGroup("ELIT.5", "Purchase To Pay", "fa fa-shopping-cart"); menu.BeginGroup("ELIT.5.1", "Basic Setup", "fa fa-wrench"); menu.MenuItem("ELIT.5.1.1", "Product Types", "fa fa-address-card-o", "prodtypes", true); menu.MenuItem("ELIT.5.1.2", "Products", "fa fa-university", "products", true); menu.MenuItem("ELIT.5.1.3", "WO Terms & Conditions", "fa fa-pencil-square-o", "woterms", true); menu.MenuItem("ELIT.5.1.4", "VAT & AIT Rates", "fa fa-user-circle-o", "aitvatratep2p", true); menu.MenuItem("ELIT.5.1.10", "Edit Code (Basic Setup)", false); menu.EndGroup(); menu.BeginGroup("ELIT.5.2", "Regular Activities", "fa fa-building"); menu.MenuItem("ELIT.5.2.0", "Initial Stock", "fa fa-puzzle-piece", "initstocksp2p", true); menu.MenuItem("ELIT.5.2.0B", "Authorize Initial Stock", false); menu.MenuItem("ELIT.5.2.13", "Purchase Requisitions", "fa fa-puzzle-piece", "purchrequisitionsp2p", true); menu.MenuItem("ELIT.5.2.13A", "Authorize Purchase Requisition", false); menu.MenuItem("ELIT.5.2.1", "Issue Work Orders", "fa fa-smile-o", "workordersp2p", true); menu.MenuItem("ELIT.5.2.1A", "Work Order Attachment", false); menu.MenuItem("ELIT.5.2.1B", "Authorize Work Order", false); menu.MenuItem("ELIT.5.2.1C", "Freeze Work Order", false); menu.MenuItem("ELIT.5.2.12", "Advance Payments", "fa fa-money", "advpaymntsp2p", true); menu.MenuItem("ELIT.5.2.12A", "Authorize Advance Payment", false); menu.MenuItem("ELIT.5.2.2", "Receive Items at CS", "fa fa-reply-all", "stksrcvdatcsp2p", true); menu.MenuItem("ELIT.5.2.2A", "Authorize Receive Items at CS", false); menu.MenuItem("ELIT.5.2.3", "Receive Invoices", "fa fa-money", "invoicesp2p", true); menu.MenuItem("ELIT.5.2.3A", "Invoice Attachment", false); menu.MenuItem("ELIT.5.2.3B", "Authorize Invoice", false); menu.MenuItem("ELIT.5.2.4", "Cash Purchase", "fa fa-archive", "cashpurchases", true); menu.MenuItem("ELIT.5.2.4A", "Invoice Attachment", false); menu.MenuItem("ELIT.5.2.4B", "Authorize Cash Purchase", false); menu.MenuItem("ELIT.5.2.5", "Payment Against Invoice", "fa fa-archive", "paymentsp2p", true); menu.MenuItem("ELIT.5.2.5A", "Authorize Payment Against Invoice", false); menu.MenuItem("ELIT.5.2.6", "Goods Transfer", "fa fa-archive", "gdstransfers", true); menu.MenuItem("ELIT.5.2.6A", "Authorize Goods Transfer", false); menu.MenuItem("ELIT.5.2.7", "Receive Goods Transfer", "fa fa-archive", "gdsreceives", true); menu.MenuItem("ELIT.5.2.7A", "Authorize Receive Goods Transfer", false); menu.MenuItem("ELIT.5.2.8", "Fix Transfer Anomalies", "fa fa-archive", "transferanomalies", true); menu.MenuItem("ELIT.5.2.8A", "Authorize Transfer Anomalies", false); menu.MenuItem("ELIT.5.2.9", "Consumption of Goods", "fa fa-archive", "gdscnsmpnsp2p", true); menu.MenuItem("ELIT.5.2.9A", "Authorize Consumption of Goods", false); menu.MenuItem("ELIT.5.2.10", "Damage of Goods", "fa fa-archive", "gdsdamagesp2p", true); menu.MenuItem("ELIT.5.2.10A", "Authorize Damage of Goods", false); menu.MenuItem("ELIT.5.2.11", "Stock Take of Goods", "fa fa-archive", "stocktakes", true); menu.MenuItem("ELIT.5.2.11A", "Authorize Stock Take of Goods", false); menu.EndGroup(); menu.BeginGroup("ELIT.5.3", "Reports", "fa fa-newspaper-o"); menu.MenuItem("ELIT.5.3.1", "GL Vouchers", "fa fa-th-list", "glvouchersp2p", true); menu.MenuItem("ELIT.5.3.2", "Current Stock", "fa fa-file-text-o", "currentstockp2p", true); menu.MenuItem("ELIT.5.3.3", "Stock Ledger", "fa fa-file-text-o", "stockledgerp2p", true); menu.MenuItem("ELIT.5.3.4", "Supplier Ledger", "fa fa-file-text-o", "supplierledgerp2p", true); menu.EndGroup(); menu.EndGroup(); #endregion #region Fixed Assets menu.BeginGroup("ELIT.6", "Fixed Assets", "fa fa-sitemap"); menu.BeginGroup("ELIT.6.1", "Basic Setup", "fa fa-wrench"); menu.MenuItem("ELIT.6.1.1", "Asset Types", "fa fa-address-card-o", "assettypes", true); menu.MenuItem("ELIT.6.1.2", "Asset Categories", "fa fa-university", "assetcategories", true); menu.MenuItem("ELIT.6.1.3", "Asset Items", "fa fa-credit-card", "assetitems", true); menu.MenuItem("ELIT.6.1.6", "Asset Hierarchies", "fa fa-credit-card", "assethierarchies", true); menu.MenuItem("ELIT.6.1.4", "Locations", "fa fa-pencil-square", "locations", true); menu.MenuItem("ELIT.6.1.5", "VAT & AIT Rates", "fa fa-user-circle-o", "aitvatratefa", true); menu.MenuItem("ELIT.6.1.10", "Edit Code (Basic Setup)", false); menu.EndGroup(); menu.BeginGroup("ELIT.6.2", "Regular Activities", "fa fa-building"); menu.MenuItem("ELIT.6.2.0", "Initial Fixed Assets", "fa fa-puzzle-piece", "initstocksfa", true); menu.MenuItem("ELIT.6.2.0B", "Authorize Initial Fixed Assets", false); menu.MenuItem("ELIT.6.2.15", "Purchase Requisitions", "fa fa-puzzle-piece", "purchrequisitionsfa", true); menu.MenuItem("ELIT.6.2.15A", "Authorize Purchase Requisition", false); menu.MenuItem("ELIT.6.2.1", "Issue Work Orders", "fa fa-smile-o", "workordersfa", true); menu.MenuItem("ELIT.6.2.1A", "Work Order Attachment", false); menu.MenuItem("ELIT.6.2.1B", "Authorize Work Order", false); menu.MenuItem("ELIT.6.2.1C", "Freeze Work Order", false); menu.MenuItem("ELIT.6.2.14", "Advance Payments", "fa fa-money", "advpaymntsfa", true); menu.MenuItem("ELIT.6.2.14A", "Authorize Advance Payment", false); menu.MenuItem("ELIT.6.2.2", "Received Items At CS", "fa fa-reply-all", "stksrcvdatcsfa", true); menu.MenuItem("ELIT.6.2.2A", "Authorize Receive Items at CS", false); menu.MenuItem("ELIT.6.2.3", "Receive Invoices", "fa fa-money", "invoicesfa", true); menu.MenuItem("ELIT.6.2.3A", "Invoice Attachment", false); menu.MenuItem("ELIT.6.2.3B", "Authorize Invoice", false); menu.MenuItem("ELIT.6.2.4", "Payment Against Invoice", "fa fa-archive", "paymentsfa", true); menu.MenuItem("ELIT.6.2.4A", "Authorize Payment Against Invoice", false); menu.MenuItem("ELIT.6.2.5", "Item Acquisition", "fa fa-smile-o", "itemsacquisition", true); menu.MenuItem("ELIT.6.2.5A", "Update Item Data", "fa fa-smile-o", "updfaitmdescription", true); menu.MenuItem("ELIT.6.2.6", "Item Installation", "fa fa-share-square", "astinstalns", true); menu.MenuItem("ELIT.6.2.6A", "Authorize Item Installation", false); menu.MenuItem("ELIT.6.2.7", "Transfer Fixed Asset", "fa fa-money", "assetxfers", true); menu.MenuItem("ELIT.6.2.7A", "Authorize Transfer Fixed Asset", false); menu.MenuItem("ELIT.6.2.8", "Write Off", "fa fa-archive", "astwriteoffs", true); menu.MenuItem("ELIT.6.2.8A", "Authorize Write Off", false); menu.MenuItem("ELIT.6.2.9", "Asset Sales", "fa fa-archive", "astsales", true); menu.MenuItem("ELIT.6.2.9A", "Authorize Asset Sales", false); menu.MenuItem("ELIT.6.2.10", "Add Asset Value", "fa fa-archive", "astaddvalues", true); menu.MenuItem("ELIT.6.2.10A", "Authorize Add Asset Value", false); menu.MenuItem("ELIT.6.2.11", "Reduce Asset Value", "fa fa-archive", "assetreducesvalue", true); menu.MenuItem("ELIT.6.2.11A", "Authorize Reduce Asset Value", false); menu.MenuItem("ELIT.6.2.12", "No Depreciation Mark", "fa fa-user-circle-o", "nodeprnmark", true); menu.MenuItem("ELIT.6.2.13", "Depreciation Calculation", "fa fa-user-circle-o", "calcdepreciation", true); menu.EndGroup(); menu.BeginGroup("ELIT.6.3", "Reports", "fa fa-newspaper-o"); menu.MenuItem("ELIT.6.3.1", "GL Vouchers", "fa fa-th-list", "glvouchersfa", true); menu.MenuItem("ELIT.6.3.2", "Current Stock", "fa fa-file-text-o", "currentstockfa", true); menu.MenuItem("ELIT.6.3.3", "Stock Ledger", "fa fa-file-text-o", "stockledgerfa", true); menu.MenuItem("ELIT.6.3.4", "Item Details", "fa fa-file-text-o", "faitemdetail", true); menu.MenuItem("ELIT.6.3.5", "Fixed Asset List", "fa fa-file-text-o", "faitemsatglance", true); menu.MenuItem("ELIT.6.3.6", "Waiting Acquisition", "fa fa-file-text-o", "faitemswtngaqstn", true); menu.MenuItem("ELIT.6.3.7", "Acquired Assets", "fa fa-file-text-o", "faitemsacquire", true); menu.MenuItem("ELIT.6.3.8", "Waiting Installation", "fa fa-file-text-o", "faitemswtnginstall", true); menu.MenuItem("ELIT.6.3.9", "No Depreciation Marked", "fa fa-file-text-o", "faitemsnodprn", true); menu.MenuItem("ELIT.6.3.10", "Depreciation Report", "fa fa-file-text-o", "faitemsdprnrpt", true); menu.MenuItem("ELIT.6.3.11", "Supplier Ledger", "fa fa-file-text-o", "fasupplierledger", true); menu.EndGroup(); menu.EndGroup(); #endregion #region Project Management menu.BeginGroup("ELIT.7", "Task Management", "fa fa-users"); menu.BeginGroup("ELIT.7.1", "Basic Setup", "fa fa-wrench"); menu.MenuItem("ELIT.7.1.1", "Developers", "fa fa-user-circle-o", "developers", true); menu.MenuItem("ELIT.7.1.2", "Support Teams", "fa fa-user-circle-o", "supportteams", true); menu.MenuItem("ELIT.7.1.2A", "QA Teams", "fa fa-user-circle-o", "qateams", true); menu.MenuItem("ELIT.7.1.3", "Priorities", "fa fa-check-square-o", "priorities", true); menu.MenuItem("ELIT.7.1.4", "Task Statuses", "fa fa-pencil-square", "taskstatuses", true); menu.MenuItem("ELIT.7.1.5", "Task Categories", "fa fa-check-square-o", "taskcategories", true); menu.MenuItem("ELIT.7.1.6", "Task Types", "fa fa-check-square-o", "tasktypes", true); menu.MenuItem("ELIT.7.1.7", "Team Spaces", "fa fa-user-circle-o", "teamspaces", true); menu.MenuItem("ELIT.7.1.8", "Team Spaces Attributes", false); menu.MenuItem("ELIT.7.1.9", "User Projects", "fa fa-product-hunt", "tsuserprojects", true); menu.MenuItem("ELIT.7.1.10", "Edit Code (All Setups)", false); menu.EndGroup(); menu.BeginGroup("ELIT.7.2", "Regular Activities", "fa fa-building"); menu.MenuItem("ELIT.7.2.1", "Tasks", "fa fa-smile-o", "tasks", true); menu.MenuItem("ELIT.7.2.1A", "Complete Task", false); menu.MenuItem("ELIT.7.2.2", "My Tasks", "fa fa-tasks", "mytasks", true); menu.MenuItem("ELIT.7.2.2A", "Allow Edit Task Time", false); menu.EndGroup(); menu.BeginGroup("ELIT.7.3", "Reports", "fa fa-newspaper-o"); menu.MenuItem("ELIT.7.3.1", "Task Reports", "fa fa-file-text-o", "taskreport", true); menu.EndGroup(); menu.EndGroup(); #endregion #region Attendance System menu.BeginGroup("ELIT.8", "Attendance System", "fa fa-calendar"); menu.BeginGroup("ELIT.8.1", "Basic Setup", "fa fa-wrench"); menu.MenuItem("ELIT.8.1.1", "Ip/Mac Entries", "fa fa-user-circle-o", "ipmacentries", true); menu.MenuItem("ELIT.8.1.1A", "Authorize Ip/Mac", false); menu.MenuItem("ELIT.8.1.2", "Holiday Calendar", "fa fa-calendar", "calendar", true); menu.MenuItem("ELIT.8.1.3", "Ramadan Calendar", "fa fa-calendar", "ramadan", true); menu.MenuItem("ELIT.8.1.15", "Special Edit/Delete", false); menu.EndGroup(); menu.BeginGroup("ELIT.8.2", "Regular Activities", "fa fa-building"); menu.MenuItem("ELIT.8.2.1", "Employee Leaves", "fa fa-smile-o", "empleaves", true); menu.MenuItem("ELIT.8.2.1A", "Authorize Leave", false); menu.MenuItem("ELIT.8.2.2", "Late Entries", "fa fa-tasks", "emplates", true); menu.MenuItem("ELIT.8.2.3", "Client Visits", "fa fa-tasks", "empclntvsts", true); menu.MenuItem("ELIT.8.2.4", "Home Offices", "fa fa-tasks", "emphmofcs", true); menu.MenuItem("ELIT.8.2.4A", "Authorize Home Office", false); menu.MenuItem("ELIT.8.2.5", "View All Employees Absent", false); menu.MenuItem("ELIT.8.2.6", "Asset Bookings", "fa fa-tasks", "assetbookings", true); menu.EndGroup(); menu.BeginGroup("ELIT.8.3", "Reports", "fa fa-newspaper-o"); menu.MenuItem("ELIT.8.3.1", "Login History", "fa fa-tasks", "loginhistory", true); menu.MenuItem("ELIT.8.3.2", "Attendance Reports", "fa fa-file-text-o", "atnreports", true); menu.EndGroup(); menu.EndGroup(); #endregion return menu; } #endregion #region Miscellaneous functions /// /// /// /// /// /// [SupportedOSPlatform("windows")] private static float GetHeight(string text, float width) { Font subFont = new(familyName: "Arial", emSize: 8f, style: FontStyle.Regular); StringFormat sf = new(); int sysWidth = Convert.ToInt32(width * 100f); Graphics g = Graphics.FromHwnd(IntPtr.Zero); SizeF newSz = g.MeasureString(text, subFont, sysWidth, sf); return (newSz.Height / 100f); } /// /// /// /// /// /// /// internal static string GetReportFileName(short reportType, bool rdlc, bool compare) { string fileName; if (rdlc) { fileName = reportType switch { 3 => "rptCashflow{0}.rdlc", 2 => "rptBalanceSheet{0}.rdlc", _ => "rptProfitLoss{0}.rdlc", }; fileName = string.Format(fileName, compare ? "Compare" : ""); } else { fileName = reportType switch { 3 => "Cashflow", 2 => "BalanceSheet", _ => "ProfitLoss", }; } return fileName; } /// /// Determines the number of rows to exclude from a given based on the calculated height /// of values in specified fields. /// /// This method calculates the height of values in the specified fields for each row in /// the . If the calculated height exceeds 0.18, the excess height is accumulated. The /// final result is determined by dividing the accumulated height by 0.18. /// The containing the rows to evaluate. /// The name of the first field used to calculate height. Can be or empty. /// The width parameter used to calculate the height for . /// The name of the second field used to calculate height. Can be or empty. /// The width parameter used to calculate the height for . /// The number of rows to exclude, calculated as the total adjusted height divided by 0.18. Returns 0 if no rows /// meet the criteria. [SupportedOSPlatform("windows")] public static int GetRowToExclude(DataTable table, string field1, float width1, string field2, float width2) { float height = 0; if (!string.IsNullOrEmpty(field1) || !string.IsNullOrEmpty(field2)) { foreach (DataRow row in table.Rows) { float height1 = 0; if (!string.IsNullOrEmpty(field1)) { string value = Convert.ToString(row[field1]); height1 = GetHeight(value, width1); } float height2 = 0; if (!string.IsNullOrEmpty(field2)) { string value = Convert.ToString(row[field2]); height2 = GetHeight(value, width2); } height1 = Math.Max(height2, height1); if (height1 > 0.18f) height += (height1 - 0.18f); } } return Convert.ToInt32(height / 0.18); } /// /// /// /// /// public static string ConvertToHourMinutes(int minutes) { string s = string.Empty; if (minutes >= 60) { int rem = minutes % 60; s = $"{(minutes - rem) / 60}h"; minutes = rem; } if (minutes > 0) { if (s.Length > 0) s += " "; s += $"{minutes}m"; } return s; } /// /// /// /// /// public static string ConvertFromBase64String(string base64String) { ArgumentNullException.ThrowIfNull(base64String); if (string.IsNullOrEmpty(base64String)) return string.Empty; byte[] data = Convert.FromBase64String(base64String); return System.Text.Encoding.UTF8.GetString(data); } /// /// /// /// /// public static void LogError(this ILogger logger, string message) { logger.LogError(message: message, args: null); } /// /// /// /// /// /// public static string MakeCleanString(this string s, int length, bool removeComma = false) { string sd = $"{s}"; sd = sd.Replace(oldValue: Environment.NewLine, newValue: " "); sd = sd.Replace(oldValue: "\n", newValue: " "); sd = sd.Replace(oldValue: "\r", newValue: " "); sd = Regex.Replace(sd, @"\s+", " "); sd = Ease.NetCore.Utility.Global.StringFunctions.Left(inputString: sd, length: length); if (removeComma) sd = sd.Replace(oldChar: ',', newChar: ' '); return sd; } /// /// /// /// /// /// public static string LineData(this DataRow row, string delimiter) { return string.Join(delimiter, row.ItemArray); } /// /// /// /// /// /// public static string GetDescription(this T enumValue) where T : struct, IConvertible { if (!typeof(T).IsEnum) return null; string description = enumValue.ToString(); System.Reflection.FieldInfo fieldInfo = enumValue.GetType().GetField(enumValue.ToString()); if (fieldInfo != null) { object[] attributes = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), true); if (attributes != null && attributes.Length > 0) description = ((DescriptionAttribute)attributes[0]).Description; } return description; } /// /// /// /// /// public static string GetLastDescription(this T enumValue) where T : struct, IConvertible { string[] values = enumValue.ToString().Split(separator: [","], options: StringSplitOptions.TrimEntries); if (values?.Length <= 0) return string.Empty; object lastNumericValue = Enum.Parse(enumType: enumValue.GetType(), value: values[^1]); T value = (T)Convert.ChangeType(lastNumericValue, typeof(T)); return GetDescription(value); } #endregion } }