first commit

This commit is contained in:
Nahyan Ebn Hashem 2026-06-14 12:46:29 +06:00
commit 1f74791394
525 changed files with 306199 additions and 0 deletions

30
Api/Docker/.dockerignore Normal file
View File

@ -0,0 +1,30 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
!**/.gitignore
!.git/HEAD
!.git/config
!.git/packed-refs
!.git/refs/heads/**

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk">
<PropertyGroup Label="Globals">
<ProjectVersion>2.1</ProjectVersion>
<DockerTargetOS>Windows</DockerTargetOS>
<DockerPublishLocally>False</DockerPublishLocally>
<ProjectGuid>76c0f8bd-cfb9-410b-91fb-6277ccd70521</ProjectGuid>
<DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
<DockerServiceUrl>{Scheme}://{ServiceIPAddress}{ServicePort}</DockerServiceUrl>
<DockerServiceName>OnlineSalesAutoCrop.coreapi</DockerServiceName>
</PropertyGroup>
<ItemGroup>
<None Include="docker-compose.override.yml">
<DependentUpon>docker-compose.yml</DependentUpon>
</None>
<None Include="docker-compose.yml" />
<None Include=".dockerignore" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,10 @@
services:
OnlineSalesAutoCrop.coreapi:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_HTTP_PORTS=8080
ports:
- "8080"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:C:\Users\ContainerUser\AppData\Roaming\Microsoft\UserSecrets:ro
- ${APPDATA}/Microsoft/UserSecrets:C:\Users\ContainerAdministrator\AppData\Roaming\Microsoft\UserSecrets:ro

View File

@ -0,0 +1,6 @@
services:
OnlineSalesAutoCrop.coreapi:
image: ${DOCKER_REGISTRY-}OnlineSalesAutoCropcoreapi
build:
context: .
dockerfile: Api\OnlineSalesAutoCrop.CoreAPI\Dockerfile

View File

@ -0,0 +1,11 @@
{
"profiles": {
"Docker Compose": {
"commandName": "DockerCompose",
"commandVersion": "1.0",
"serviceActions": {
"OnlineSalesAutoCrop.coreapi": "StartDebugging"
}
}
}
}

View File

@ -0,0 +1 @@
[{"ContainerToolsException.ErrorCode":"","ContainerToolsException.HResult":"-2146233088"},{"ContainerToolsException.ErrorCode":"","ContainerToolsException.HResult":"-2146233088"},{"ContainerToolsException.ErrorCode":"","ContainerToolsException.HResult":"-2146233088"},{"ContainerToolsException.ErrorCode":"","ContainerToolsException.HResult":"-2146233088"},{"ContainerToolsException.ErrorCode":"","ContainerToolsException.HResult":"-2146233088"},{"ContainerToolsException.ErrorCode":"","ContainerToolsException.HResult":"-2146233088"},{"ContainerToolsException.ErrorCode":"","ContainerToolsException.HResult":"-2146233088"}]

View File

@ -0,0 +1 @@
{"PrerequisiteCheckName":"Microsoft.Docker.Prerequisites.DockerForWindowsInstalledPrerequisite","HasWarning":false,"HasError":true,"Properties":null}

View File

@ -0,0 +1,13 @@
namespace OnlineSalesAutoCrop.CoreAPI.Models
{
public static class Constants
{
public const string TranSideDecrease = "D";
public const string TranSideIncrease = "C";
public const string UserId = "UserId";
public const string LoginId = "LoginId";
public const string BatchEnabled = "BatchEnabled";
public const string ParamCantBeNull = "Parameter value is null.";
}
}

View File

@ -0,0 +1,703 @@
using System;
using System.ComponentModel;
namespace OnlineSalesAutoCrop.CoreAPI.Models
{
public enum EnumBonusType : short
{
[Description("Discount")]
Discount = 1,
[Description("Product")]
Product = 2,
[Description("Gift Item")]
GiftItem = 3,
[Description("Discount On Value")]
DiscountOnValue = 4
}
public enum EnumSPCalcMethod : short
{
[Description("One Slab Only")]
OneSlabOnly = 1,
[Description("Remaining")]
Remaining = 2
}
public enum EnumOfferBasis : short
{
[Description("Invoice Value")]
InvoiceValue = 1,
[Description("Product Combination")]
ProductCombination = 2,
[Description("ProductBundle")]
ProductBundle = 3,
}
public enum EnumSalesUnit : short
{
[Description("Piece")]
Pcs = 1,
[Description("Value")]
Value = 2,
[Description("Weight")]
Weight = 3,
[Description("Carton")]
Ctn = 4,
[Description("Volume")]
Volume = 5,
[Description("Line Count")]
LineCount = 6
}
public enum EnumBmProcessType : short
{
[Description("Batch Disabled")]
None = 0,
[Description("Manually Selected")]
Manual = 1,
[Description("FIFO Method (First in First out")]
FIFO = 2,
[Description("LIFO Method (Last in First out")]
LIFO = 3
}
public enum EnumSalesPromotionType : short
{
[Description("Invoice value")]
InvoiceValue = 1,
[Description("SKU purchase")]
SkuPurchase = 2
}
public enum EnumAbsentType : short
{
[Description("Leave")]
LeaveEntry = 1,
[Description("Late")]
Late = 2,
[Description("Client Visit")]
ClientVisit = 3,
[Description("Home Office")]
HomeOffice = 4
}
public enum EnumFaMovementType : short
{
[Description("Fixed Asset Installation")]
Installation = 1,
[Description("Fixed Asset Transfer")]
Transfer = 2
}
public enum EnumDepreciationCalcMode : short
{
[Description("Yearly")]
Yearly = 0,
[Description("Monthly")]
Monthly = 1
}
public enum EnumFaTranType : short
{
[Description("Fixed Asset Write Off")]
WriteOff = 1,
[Description("Fixed Asset Sales")]
Sales = 2,
[Description("Add Value to Fixed Asset")]
AddValue = 3,
[Description("Reduce Value from Fixed Asset")]
ReduceValue = 4
}
public enum EnumStockType : short
{
[Description("Sound Stock")]
Sound = 1,
[Description("Damage Stock")]
Damage = 2,
[Description("Expired Stock")]
Expired = 3,
[Description("Booked Stock")]
Booked = 4
}
public enum EnumItemType : short
{
[Description("Services")]
Service = 1,
[Description("Consumables")]
Consumables = 2,
[Description("Goods")]
Goods = 3,
[Description("Fixed Assets")]
FixedAssets = 4
}
public enum EnumGLSpecialHead : short
{
//Controls
Assets = 1,
Liabilities = 2,
Income = 3,
Expenditure = 4,
//Groups
CashAccountGroup = 5,
BankAccountGroup = 6,
PurchaseAccount = 7,
ProfitBroughtForwardGroup = 8,
LossBroughtForwardGroup = 9,
//Sub groups
ProfitBroughtForwardSubGroup = 10,
LossBroughtForwardSubGroup = 11,
//Posting
ProfitBroughtForward = 12,
LossBroughtForward = 13,
}
public enum EnumAitVatRateOf : short
{
[Description("Product Type")]
ProductType = 1,
[Description("Fixed Asset Category")]
FixedAssetCategory = 2
}
public enum EnumSkuPriceType : short
{
[Description("Cost/Purchase Price")]
CostPrice = 1,
[Description("Selling Price")]
SellingPrice = 2,
[Description("Maximum Retail Price (MRP)")]
MRP = 3
}
public enum EnumSkuParamType : short
{
[Description("VAT")]
Vat = 1,
[Description("SD")]
Sd = 2,
[Description("Commission")]
Commission = 3
}
public enum EnumWOStatus : short
{
[Description("Draft")]
Draft = 1,
[Description("Authorized")]
Authorized = 2,
[Description("Partial Received")]
Partial = 3,
[Description("Full Received")]
Full = 4,
[Description("Frozen")]
Frozen = 5
}
public enum EnumDepreciationType : short
{
[Description("None")]
None = 0,
[Description("Straight Line")]
StraightLine = 1,
[Description("Recursive")]
Recursive = 2
}
public enum EnumClientType : short
{
[Description("Client")]
Client = 1,
[Description("Supplier")]
Supplier = 2,
[Description("Client & Supplier")]
Both = 3
}
public enum EnumGLReportLevel : short
{
[Description("Top")]
Top = 1,
[Description("Group")]
Group = 2,
[Description("Sub Group")]
SubGroup = 3,
[Description("Sub Total")]
SubTotal = 4
}
public enum EnumLookupType : short
{
[Description("Order Type")]
OrderType = 1,
[Description("Job Type")]
JobType = 2,
[Description("Voucher Type")]
VoucherType = 3,
[Description("Inventory Type")]
InventoryType = 4,
[Description("Goods Type")]
GoodsType = 5,
[Description("Unit of Measure")]
UoM = 6,
[Description("Anomaly Reason")]
AnomalyReason = 7,
[Description("Designation")]
Designation = 8,
[Description("Stock Take Reason")]
StockTakeReason = 9,
[Description("Department")]
Department = 10,
[Description("Leave Type")]
LeaveType = 11,
[Description("Asset Type")]
AssetType = 12,
[Description("Login Remarks")]
LoginRemarks = 13,
[Description("Logout Remarks")]
LogoutRemarks = 14,
[Description("Security Categories")]
SecurityCategories = 15,
[Description("SalesPoint Type")]
SalesPointType = 16,
[Description("Blood Group")]
BloodGroup = 17,
[Description("Unit Type")]
UnitType = 18,
[Description("Product Hierarchy Level")]
ProductHierarchyLevel = 19,
[Description("Channel Hierarchy Level")]
ChannelHierarchyLevel = 20,
[Description("Market Hierarchy Level")]
MarketHierarchyLevel = 21,
[Description("Customer Grade")]
CustomerGrade = 22,
[Description("Price Type")]
PriceType = 23,
[Description("Product VAT SD Commission")]
ProductVatSdCommission = 24,
[Description("External Product Level")]
ExternalProductLevel = 25,
[Description("Ideal Working Hours")]
IdealWorkingHours = 26,
[Description("Ramadan Working Hours")]
RamadanWorkingHours = 27,
}
public enum EnumInstrumentType : short
{
[Description("Cheque")]
Cheque = 1,
[Description("EFT")]
EFT = 2,
[Description("Cash Deposit")]
CashDeposit = 3
}
public enum EnumSalesInstrumentType : short
{
[Description("None")]
None = 0,
[Description("Cash")]
CashDeposit = 1,
[Description("EFT")]
EFT = 2,
[Description("Cheque")]
Cheque = 3,
[Description("PO/DD")]
POorDD = 4,
[Description("MFS")]
MFS = 5,
[Description("Online Transfer")]
OnlineTransfer = 6,
[Description("Card/Debit Card")]
CreditOrDebitCard = 7
}
public enum EnumPurchaseType : short
{
[Description("Cash Purchase")]
Cash = 1,
[Description("Purchase to Pay")]
P2P = 2,
[Description("Fixed Asset")]
FixedAssets = 3
}
public enum EnumInvoiceStatus : short
{
[Description("New Invoice")]
New = 1,
[Description("Partial Payment Received")]
Partial = 2,
[Description("Full Payment Received")]
Full = 3,
[Description("Frozen")]
Frozen = 4
}
public enum EnumInvoiceP2PStatus : short
{
[Description("New Invoice")]
New = 1,
[Description("Invoice Authorized")]
Authorised = 2,
[Description("Partial Payment Received")]
Partial = 3,
[Description("Full Payment Received")]
Full = 4,
[Description("Frozen")]
Frozen = 5
}
public enum EnumPOStatus : short
{
[Description("New Purchase Order")]
New = 1,
[Description("Partial Bill Submitted")]
Partial = 2,
[Description("Full Bill Submitted")]
Full = 3,
[Description("Frozen")]
Frozen = 4
}
public enum EnumOrderType : short
{
[Description("PO")]
PO = 1,
[Description("WO")]
WO = 2,
[Description("Contract")]
Contract = 3,
[Description("E-mail")]
EMail = 4,
[Description("Verbal")]
Verbal = 5
}
public enum EnumJobType : short
{
[Description("New Development")]
NewDevelopment = 1,
[Description("CR")]
CR = 2,
[Description("AMC/MMC")]
AMC_MMC = 3,
[Description("Product Sales")]
Product_Sales = 4,
[Description("SAAS")]
SAAS = 5,
[Description("Server Rental")]
Server_Rental = 6,
[Description("PAAS Support")]
PAAS_Support = 7,
[Description("Rollout")]
Rollout = 8,
[Description("Training")]
Training = 9,
[Description("BPO")]
BPO = 10,
[Description("Commission")]
Commission = 11,
[Description("Consultation")]
Consultation = 12,
[Description("Other")]
Other = 13
}
public enum EnumLoginStatus : short
{
[Description("Success")]
Success = 0,
[Description("Error")]
Error = 1,
[Description("Unsuccessful")]
Unsuccessful = 2,
[Description("Version Mismatch")]
VersionMismatch = 3
}
public enum EnumEmployeeType : short
{
[Description("Employee")]
Employee = 1,
[Description("Project Leader")]
ProjectLeader = 2,
[Description("Project Manager")]
ProjectManager = 4,
[Description("Developer")]
Developer = 8,
[Description("Support Manager")]
Support = 16,
[Description("QA Manager")]
QA = 32
}
public enum EnumGlCodeType : short
{
[Description("Bank Account")]
BankAccount = 1,
[Description("Income Account")]
Income = 2,
[Description("VAT Account")]
Vat = 3,
[Description("AIT Account")]
Ait = 4,
[Description("Purchase VAT Account")]
PurchaseVat = 5,
[Description("VAT Payable Account")]
VatPayable = 6,
[Description("AIT Payable Account")]
AitPayable = 7,
[Description("Cash in Hand Account")]
CashInHand = 8,
[Description("Damage Goods Expense Account")]
DamageExpense = 9,
[Description("Fixed Asset Sales Account")]
FixedAssetSales = 10,
[Description("Accumulated Depreciation Account")]
AccumulatedDepreciation = 11
}
public enum EnumGlAccountType : short
{
[Description("Not Applicable")]
None = 0,
[Description("Income Account")]
Income = 1,
[Description("Liability Account")]
Liability = 2
}
public enum EnumAuthenticationMethod : short
{
[Description("Not Applicable")]
None = 0,
[Description("Via Email")]
Email = 1,
[Description("Via Mobile SMS")]
MobileSMS = 2,
[Description("Third Party Authenticator")]
ThirdPartyAuthenticator = 3
}
[Flags]
public enum EnumStatus : short
{
[Description("Initiated")]
Initiated = 1,
[Description("Rejected")]
Rejected = 2,
[Description("Authenticated")]
Authenticated = 4,
[Description("Authorized")]
Authorized = 8,
[Description("Inactive")]
Inactive = 16
}
public enum EnumAccessStatus : short
{
[Description("First Time")]
FirstTime = 1,
[Description("Logged In")]
LoggedIn = 2,
[Description("Logged Out")]
LoggedOut = 3
}
public enum EnumCOALevelId : short
{
[Description("Control")]
Control = 1,
[Description("Group")]
Group = 2,
[Description("Subgroup")]
Subgroup = 3,
[Description("Posting")]
Posting = 4
}
public enum EnumCacheType
{
[Description("None")]
None = 0,
[Description("In Memory")]
InMemory = 1,
[Description("Sql Server")]
SqlServer = 2,
[Description("Redis")]
Redis = 3,
}
public enum EnumSalesType : short
{
[Description("Direct Sales")]
DirectSales = 1,
[Description("Order Sales")]
OrderSales = 2
}
public enum EnumInvoiceSource : short
{
[Description("From Application")]
FromApplication = 1,
[Description("From Mobile")]
FromMobile = 2,
[Description("From Others")]
FromOthers = 3,
}
}

View File

@ -0,0 +1,363 @@
using Ease.NetCore.DataAccess;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Global
{
/// <summary>
/// AppSettings
/// </summary>
public class AppSettings
{
/// <summary>
/// Default Database Connection to be used
/// </summary>
[Required]
public string DefaultDB { get; set; }
/// <summary>
/// Used to dec from User info got over http
/// </summary>
public string CipherSecretKey { get; set; }
/// <summary>
/// Gets or sets a value that indicates whether a cookie is inaccessible by client-side script.
/// </summary>
public bool CookieHttpOnly { get; set; }
/// <summary>
/// Gets or sets a value that indicates whether to transmit the cookie using Secure Sockets Layer (SSL)--that is, over HTTPS only.
/// </summary>
public bool CookieSecure { get; set; }
/// <summary>
/// Gets or sets the max-age for the cookie in minutes.
/// </summary>
public int CookieLifeTime { get; set; } = 360;
/// <summary>
/// Gets or sets the value for the SameSite attribute of the cookie.
/// -1: No SameSite field will be set, the client should follow its default cookie policy.
/// 0: Indicates the client should disable same-site restrictions.
/// 1: Indicates the client should send the cookie with "same-site" requests, and with "cross-site" top-level navigations.
/// 2: Indicates the client should only send the cookie with "same-site" requests.
/// </summary>
public int CookieSameSite { get; set; }
/// <summary>
/// For Jwt Token
/// </summary>
public string JwtCryptoKey { get; set; }
public string JwtIssuer { get; set; }
public string JwtAudience { get; set; }
public bool JwtValidateIssuer { get; set; }
public bool JwtValidateAudience { get; set; }
/// <summary>
/// Folder management
/// </summary>
public string UploadFolder { get; set; }
public string ProfileImageFolder { get; set; }
public string ReportFolder { get; set; }
public string FileProcessFolder { get; set; }
/// <summary>
/// For user password
/// </summary>
[Required]
public string PwdSecretKey { get; set; }
/// <summary>
/// For SMS Management
/// </summary>
public string SmsSecretKey { get; set; }
public string SmsApiUrl { get; set; }
public string SmsAccessInfo { get; set; }
/// <summary>
/// Email management
/// </summary>
public int EmailPort { get; set; }
public bool EmailEnableSsl { get; set; }
public string EmailHost { get; set; }
public string EmailSenderName { get; set; }
public string EmailSenderIp { get; set; }
public string EmailSenderId { get; set; }
private string _emailSenderPwd;
public string EmailSenderPwd
{
get
{
if (string.IsNullOrEmpty(_emailSenderPwd) || string.IsNullOrEmpty(PwdSecretKey))
return string.Empty;
string secretKey = GlobalFunctions.ConvertFromBase64String(PwdSecretKey);
return Ease.NetCore.Utility.Global.CipherFunctions.DecryptByAES(privateKey: secretKey, publicKey: secretKey, data: _emailSenderPwd, input: 2);
}
set { _emailSenderPwd = value; }
}
public string EmailBcc { get; set; }
public string EmailErrorLogPath { get; set; }
public bool EmailUseDefaultCredentials { get; set; }
public int EmailTlsVersion { get; set; }
/// <summary>
/// CORS CorsHeaders
/// </summary>
public string CorsHeaders { get; set; }
/// <summary>
/// CORS CorsMethods
/// </summary>
public string CorsMethods { get; set; }
/// <summary>
/// CORS CorsOrigins
/// </summary>
public string CorsOrigins { get; set; }
/// <summary>
/// Logger enabled if the is there is value
/// </summary>
public string LoggerPath { get; set; }
public int LoggerMinLevel { get; set; }
/// <summary>
/// Database connection Hangfire
/// </summary>
private string _hangfireDb;
public string HangfireDb
{
get
{
if (string.IsNullOrEmpty(_hangfireDb) || string.IsNullOrEmpty(PwdSecretKey))
return string.Empty;
string secretKey = GlobalFunctions.ConvertFromBase64String(PwdSecretKey);
return Ease.NetCore.Utility.Global.CipherFunctions.DecryptByAES(privateKey: secretKey, publicKey: secretKey, data: _hangfireDb, input: 2);
}
set { _hangfireDb = value; }
}
// <summary>
/// Use for caching
/// </summary>
public EnumCacheType CacheType { get; set; } = EnumCacheType.InMemory;
public string CacheUrl { get; set; }
public string CacheSchemaName { get; set; }
public string CacheTableName { get; set; }
/// <summary>
/// What's app messaging
/// </summary>
public string WaSenderId { get; set; }
public string WaAuthToken { get; set; }
public string WaAccountSid { get; set; }
public string WaMsgSvcSid { get; set; }
/// <summary>
/// Rabbit MQ Information
/// </summary>
public string RabbitMQHost { get; set; }
public string RabbitMQUser { get; set; }
private string _rabbitMQPwd;
public string RabbitMQPwd
{
get
{
if (string.IsNullOrEmpty(_rabbitMQPwd) || string.IsNullOrEmpty(PwdSecretKey))
return string.Empty;
string secretKey = GlobalFunctions.ConvertFromBase64String(PwdSecretKey);
return Ease.NetCore.Utility.Global.CipherFunctions.DecryptByAES(privateKey: secretKey, publicKey: secretKey, data: _rabbitMQPwd, input: 2);
}
set { _rabbitMQPwd = value; }
}
public int RabbitMQPort { get; set; }
/// <summary>
/// Rate Limit by Ip Address
/// </summary>
public string RLName { get; set; }
public int RLQueueLimit { get; set; }
public int RLPermitLimit { get; set; }
public int RLWindowInSecond { get; set; }
public bool RLAutoReplenishment { get; set; }
public int RLQueueProcessingOrder { get; set; }
/// <summary>
/// AI Service Information
/// </summary>
private string _apiKeyOpenAI;
public string ApiKeyOpenAI
{
get
{
if (string.IsNullOrEmpty(_apiKeyOpenAI) || string.IsNullOrEmpty(PwdSecretKey))
return string.Empty;
string secretKey = GlobalFunctions.ConvertFromBase64String(PwdSecretKey);
return Ease.NetCore.Utility.Global.CipherFunctions.DecryptByAES(privateKey: secretKey, publicKey: secretKey, data: _apiKeyOpenAI, input: 2);
}
set { _apiKeyOpenAI = value; }
}
public string AIModel { get; set; }
public string AICustomBaseUrl { get; set; }
/// <summary>
/// Google API Key
/// </summary>
private string _apiKeyGoogle;
public string ApiKeyGoogle
{
get
{
if (string.IsNullOrEmpty(_apiKeyGoogle) || string.IsNullOrEmpty(PwdSecretKey))
return string.Empty;
string secretKey = GlobalFunctions.ConvertFromBase64String(PwdSecretKey);
return Ease.NetCore.Utility.Global.CipherFunctions.DecryptByAES(privateKey: secretKey, publicKey: secretKey, data: _apiKeyGoogle, input: 2);
}
set { _apiKeyGoogle = value; }
}
/// <summary>
/// Product Hierarchy Maximum Level
/// </summary>
public int PHMaxLevel { get; set; }
/// <summary>
/// Channel Hierarchy Maximum Level
/// </summary>
public int CHMaxLevel { get; set; }
/// <summary>
/// Market Hierarchy Maximum Level
/// </summary>
public int MHMaxLevel { get; set; }
/// <summary>
/// Market Hierarchy Maximum Level
/// </summary>
public int EPMaxLevel { get; set; }
/// <summary>
/// Use to view payslip
/// </summary>
public string PayslipPath { get; set; }
/// <summary>
/// AD ie Active Domain Settings
/// </summary>
public ADSettings ADConfig { get; set; }
/// <summary>
/// Api Settings
/// </summary>
[Required]
public ApiSettings API { get; set; }
/// <summary>
/// Swagger Setting
/// </summary>
[Required]
public Swagger Swagger { get; set; }
/// <summary>
/// DB Connection Node
/// </summary>
[Required]
public List<DbConnectionNode> DbConfig { get; set; }
/// <summary>
/// Default DB Connection Node
/// </summary>
public DbConnectionNode DefaultConnection => GetConnectionNode(DefaultDB);
/// <summary>
/// DB Connection Node by name
/// </summary>
/// <param name="key">Connection node name</param>
/// <returns></returns>
public DbConnectionNode GetConnectionNode(string key)
{
if (string.IsNullOrEmpty(key))
key = DefaultDB;
if (DbConfig == null || DbConfig.Count <= 0 || string.IsNullOrEmpty(key))
return null;
return DbConfig.FirstOrDefault(x => x.ConnectionNode.Key == key);
}
}
/// <summary>
///
/// </summary>
public class DbConnectionNode
{
public ConnectionNode ConnectionNode { get; set; }
}
/// <summary>
///
/// </summary>
public class ADSettings
{
public bool Enabled { get; set; }
public string Domain { get; set; }
public string Path { get; set; }
}
/// <summary>
///
/// </summary>
public class ApiSettings
{
[Required]
public string Title { get; set; }
public string Description { get; set; }
public ApiContact Contact { get; set; }
public string TermsOfServiceUrl { get; set; }
public ApiLicense License { get; set; }
}
/// <summary>
///
/// </summary>
public class ApiContact
{
public string Name { get; set; }
public string Email { get; set; }
public string Url { get; set; }
}
/// <summary>
///
/// </summary>
public class ApiLicense
{
public string Name { get; set; }
public string Url { get; set; }
}
/// <summary>
///
/// </summary>
public class Swagger
{
[Required]
public bool Enabled { get; set; }
}
}

View File

@ -0,0 +1,52 @@
using ExcelDataReader;
using System;
using System.Data;
using System.IO;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Global
{
/// <summary>
///
/// </summary>
public static class ExcelReader
{
/// <summary>
///
/// </summary>
/// <param name="fileSpec"></param>
/// <param name="firstRowColumnHeader"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static DataSet GetDataSetFromFile(string fileSpec, bool firstRowColumnHeader)
{
try
{
DataSet ds;
using FileStream stream = File.Open(fileSpec, FileMode.Open, FileAccess.Read);
using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
{
ds = reader.AsDataSet();
foreach (DataTable table in ds.Tables)
{
if (firstRowColumnHeader && table.Rows.Count > 0)
{
object[] columns = table.Rows[0].ItemArray;
table.Rows.RemoveAt(0);
for (int colIdx = 0; colIdx < columns.Length; colIdx++)
{
table.Columns[colIdx].ColumnName = $"{columns[colIdx]}";
}
}
}
}
stream.Close();
return ds;
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
}
}
}

View File

@ -0,0 +1,110 @@
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using A = DocumentFormat.OpenXml.Drawing;
using Xdr = DocumentFormat.OpenXml.Drawing.Spreadsheet;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Global
{
internal static class ExcelTools
{
private static PartTypeInfo GetImagePartTypeByBitmap(byte[] bytes)
{
byte[] tiff = "II*"u8.ToArray(); // TIFF
byte[] tiff2 = "MM*"u8.ToArray(); // TIFF
byte[] jpeg = [255, 216, 255]; // jpeg
byte[] bmp = Encoding.ASCII.GetBytes("BM"); // BMP
byte[] gif = Encoding.ASCII.GetBytes("GIF"); // GIF
byte[] png = [137, 80, 78, 71]; // PNG
if (bmp.SequenceEqual(bytes.Take(bmp.Length)))
return ImagePartType.Bmp;
else if (gif.SequenceEqual(bytes.Take(gif.Length)))
return ImagePartType.Gif;
else if (png.SequenceEqual(bytes.Take(png.Length)))
return ImagePartType.Png;
else if (tiff.SequenceEqual(bytes.Take(tiff.Length)))
return ImagePartType.Tiff;
else if (tiff2.SequenceEqual(bytes.Take(tiff2.Length)))
return ImagePartType.Tiff;
else if (jpeg.SequenceEqual(bytes.Take(jpeg.Length)))
return ImagePartType.Jpeg;
throw new InvalidOperationException("Image type could not be determined.");
}
/// <summary>
///
/// </summary>
/// <param name="worksheetPart"></param>
/// <param name="stream"></param>
/// <param name="imgDescription"></param>
/// <param name="colNumber"></param>
/// <param name="rowNumber"></param>
public static void AddImage(WorksheetPart worksheetPart, Stream stream, string imgDescription, int colNumber, int rowNumber)
{
var drawingsPart = worksheetPart.DrawingsPart;
drawingsPart ??= worksheetPart.AddNewPart<DrawingsPart>();
if (!worksheetPart.Worksheet.ChildElements.OfType<Drawing>().Any())
worksheetPart.Worksheet.AppendChild(new Drawing { Id = worksheetPart.GetIdOfPart(drawingsPart) });
drawingsPart.WorksheetDrawing ??= new Xdr.WorksheetDrawing();
var worksheetDrawing = drawingsPart.WorksheetDrawing;
ImagePart imagePart;
long extentsCx = 0, extentsCy = 0;
using (MemoryStream ms = new())
{
stream.Position = 0;
stream.CopyTo(ms);
stream.Position = 0;
#pragma warning disable CA1416 // Validate platform compatibility
using Bitmap bmp = new(ms);
imagePart = drawingsPart.AddImagePart(GetImagePartTypeByBitmap(ms.ToArray()));
imagePart.FeedData(stream);
extentsCx = bmp.Width * (long)(914400 / bmp.HorizontalResolution);
extentsCy = bmp.Height * (long)(914400 / bmp.VerticalResolution);
#pragma warning restore CA1416 // Validate platform compatibility
}
uint nvpId = worksheetDrawing.Descendants<Xdr.NonVisualDrawingProperties>().Any() ? (UInt32Value)worksheetDrawing.Descendants<Xdr.NonVisualDrawingProperties>().Max(p => p.Id.Value) + 1 : 1U;
Xdr.OneCellAnchor oneCellAnchor = new(
new Xdr.FromMarker
{
ColumnId = new Xdr.ColumnId((colNumber - 1).ToString()),
RowId = new Xdr.RowId((rowNumber - 1).ToString()),
ColumnOffset = new Xdr.ColumnOffset("0"),
RowOffset = new Xdr.RowOffset("0")
},
new Xdr.Extent { Cx = extentsCx, Cy = extentsCy },
new Xdr.Picture(
new Xdr.NonVisualPictureProperties(
new Xdr.NonVisualDrawingProperties { Id = nvpId, Name = "Picture " + nvpId, Description = imgDescription },
new Xdr.NonVisualPictureDrawingProperties(new A.PictureLocks { NoChangeAspect = true })
),
new Xdr.BlipFill(
new A.Blip { Embed = drawingsPart.GetIdOfPart(imagePart), CompressionState = A.BlipCompressionValues.Print },
new A.Stretch(new A.FillRectangle())
),
new Xdr.ShapeProperties(
new A.Transform2D(
new A.Offset { X = 0, Y = 0 },
new A.Extents { Cx = extentsCx, Cy = extentsCy }
),
new A.PresetGeometry { Preset = A.ShapeTypeValues.Rectangle }
)
),
new Xdr.ClientData()
);
worksheetDrawing.Append(oneCellAnchor);
}
}
}

View File

@ -0,0 +1,48 @@
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Net;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Global
{
public class ErrorHandlingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
{
private readonly RequestDelegate _next = next;
private readonly ILogger _logger = loggerFactory.CreateLogger<ErrorHandlingMiddleware>();
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
private Task HandleExceptionAsync(HttpContext context, Exception exception)
{
var code = HttpStatusCode.InternalServerError; // 500 if unexpected
if (exception is ArgumentNullException)
code = HttpStatusCode.BadRequest;
else if (exception is ArgumentException)
code = HttpStatusCode.BadRequest;
else if (exception is UnauthorizedAccessException)
code = HttpStatusCode.Unauthorized;
_logger.LogError($"GLOBAL ERROR HANDLER::HTTP:{code}::{exception.Message}");
var result = JsonConvert.SerializeObject(exception, Formatting.Indented);
context.Response.Clear();
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;
return context.Response.WriteAsync(result);
}
}
}

View File

@ -0,0 +1,678 @@
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
/// <summary>
///
/// </summary>
/// <param name="parent"></param>
/// <param name="srcData"></param>
private static void MakeHierarchy(GroupPermission parent, List<GroupPermission> srcData)
{
try
{
IEnumerable<GroupPermission> 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);
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public static Menu HierarchicalMenu()
{
Menu menu = [];
Menu flatMenu = BuildMenu();
IEnumerable<GroupPermission> 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;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
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
/// <summary>
///
/// </summary>
/// <param name="text"></param>
/// <param name="width"></param>
/// <returns></returns>
[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);
}
/// <summary>
///
/// </summary>
/// <param name="reportType"></param>
/// <param name="rdlc"></param>
/// <param name="compare"></param>
/// <returns></returns>
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;
}
/// <summary>
/// Determines the number of rows to exclude from a given <see cref="DataTable"/> based on the calculated height
/// of values in specified fields.
/// </summary>
/// <remarks>This method calculates the height of values in the specified fields for each row in
/// the <paramref name="table"/>. 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.</remarks>
/// <param name="table">The <see cref="DataTable"/> containing the rows to evaluate.</param>
/// <param name="field1">The name of the first field used to calculate height. Can be <see langword="null"/> or empty.</param>
/// <param name="width1">The width parameter used to calculate the height for <paramref name="field1"/>.</param>
/// <param name="field2">The name of the second field used to calculate height. Can be <see langword="null"/> or empty.</param>
/// <param name="width2">The width parameter used to calculate the height for <paramref name="field2"/>.</param>
/// <returns>The number of rows to exclude, calculated as the total adjusted height divided by 0.18. Returns 0 if no rows
/// meet the criteria.</returns>
[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);
}
/// <summary>
///
/// </summary>
/// <param name="minutes"></param>
/// <returns></returns>
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;
}
/// <summary>
///
/// </summary>
/// <param name="base64String"></param>
/// <returns></returns>
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);
}
/// <summary>
///
/// </summary>
/// <param name="logger"></param>
/// <param name="message"></param>
public static void LogError(this ILogger logger, string message)
{
logger.LogError(message: message, args: null);
}
/// <summary>
///
/// </summary>
/// <param name="s"></param>
/// <param name="length"></param>
/// <returns></returns>
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;
}
/// <summary>
///
/// </summary>
/// <param name="row"></param>
/// <param name="delimiter"></param>
/// <returns></returns>
public static string LineData(this DataRow row, string delimiter)
{
return string.Join(delimiter, row.ItemArray);
}
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="enumValue"></param>
/// <returns></returns>
public static string GetDescription<T>(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;
}
/// <summary>
///
/// </summary>
/// <param name="enumValue"></param>
/// <returns></returns>
public static string GetLastDescription<T>(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
}
}

View File

@ -0,0 +1,457 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Global
{
public sealed class ImportHelper : IDisposable
{
#region Declaration
private DataTable _table;
#endregion
#region Constructor & Desctructor
public ImportHelper()
{
Delimiter = '\0';
_table = null;
}
~ImportHelper()
{
_table?.Dispose();
}
#endregion
#region Properties
#region Property Delimiter: char
public static char Delimiter { get; set; }
#endregion
#endregion
#region Formats Class
public sealed class Formats
{
public static readonly IFormatter Text = new TextFormatter();
public static readonly IFormatter Excel = new ExcelFormatter();
private Formats() { }
}
#endregion
#region IFormater Interface
public interface IFormatter
{
/// <summary>
/// Return the DataTable after successful operation.
/// </summary>
/// <param name="fileSpec">Valid name of the file.</param>
/// <param name="firstRowColumnHeader">Used the first line as header.</param>
/// <returns>DataTable if successful.</returns>
DataTable Import(string fileSpec, bool firstRowColumnHeader);
}
#endregion
#region Excel Formatter Implementation
public class ExcelFormatter : IFormatter
{
#region Declaration & Constructor
public ExcelFormatter()
{
}
#endregion
#region Functions
public DataTable Import(string fileSpec, bool firstRowColumnHeader)
{
try
{
return ExcelReader.GetDataSetFromFile(fileSpec: fileSpec, firstRowColumnHeader: firstRowColumnHeader).Tables[0];
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
}
#endregion
}
#endregion
#region Text Formatter Implementation
public class TextFormatter : IFormatter
{
#region Declaration & Construct
private DataTable _dt;
private readonly char CharQlfr = '"';
private readonly string StringQlfr = "\"";
private readonly string ReplacingQlfr = "\"\"";
private readonly string ReplacedChar = ((char)1).ToString();
public TextFormatter()
{
_dt = null;
}
#endregion
#region Properties
private int EndColumnIndex { get; set; }
#endregion
#region Functions
private void MakeColumn(bool hasHeader, string line)
{
try
{
string[] columns = ParseData(line);
EndColumnIndex = columns.Length - 1;
if (hasHeader)
{
for (int i = 0; i <= EndColumnIndex; i++)
{
DataColumn dc = new(string.Format("Col{0}", i))
{
Caption = columns[i],
ReadOnly = true,
DataType = typeof(string)
};
_dt.Columns.Add(dc);
}
}
else
{
for (int i = 0; i <= EndColumnIndex; i++)
{
DataColumn dc = new(string.Format("Col{0}", i))
{
Caption = string.Format("Column {0}", i),
ReadOnly = true,
DataType = typeof(string)
};
_dt.Columns.Add(dc);
}
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
}
private string[] ParseData(string data)
{
List<string> cols = [];
try
{
//To be use as a temporary
List<string> tmpCols = [];
//Parse qualifier
data = ParseQualifier(tmpCols, data);
//Make actual columns data
tmpCols = [];
ParseData(tmpCols, data);
//Convert back to original value
foreach (var item in tmpCols)
{
string value = item.Replace(ReplacedChar, StringQlfr);
cols.Add(value);
}
tmpCols.Clear();
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return [.. cols];
}
private void ParseData(List<string> cols, string data)
{
try
{
//Find out position of qualifier
int pos = data.IndexOf(CharQlfr);
//If there is no qualifier in the data do nothing
if (pos == -1)
{
cols.AddRange(data.Split(Delimiter));
return;
}
//Second part of the data after qualifies
string part2 = data[pos..];
//If qualifier is beginning of the data
if (pos == 0)
{
//Remove beginning qualifier
string part1 = data[1..];
//Find out next position of the qualifier, next qualifier must exists since qualifier starts
pos = part1.IndexOf(CharQlfr);
//Read remaining data by removing the delimiter
part2 = part1[(pos + 1)..];
//Remove delimiter if still exists at the start of the data
if (part2.StartsWith(Delimiter.ToString()))
part2 = part2[1..];
//Read data just before the position
part1 = part1[..pos];
//Remove delimiter if still exists at the start of the data
if (part1.EndsWith(Delimiter.ToString()))
part1 = part1[..^1];
//Add to the column collection
cols.Add(part1);
}
else
{
//Read data just before the position
string part1 = data[..pos];
//Remove end delimiter if still exists
if (part1.EndsWith(Delimiter.ToString()))
part1 = part1[..^1];
//If this is a valid data, Add to column collection splitting by delimiter of the first part
if (part1.Length > 0)
cols.AddRange(part1.Split(Delimiter));
}
//Call recursively by using second part of the data
ParseData(cols, part2);
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
}
private string ParseQualifier(List<string> cols, string data)
{
try
{
//Find out the position of qualifier
int pos = data.IndexOf(CharQlfr);
//If there is no qualifier in the data do nothing
if (pos == -1)
{
cols.Add(data);
}
else
{
//Read left part of the data of current position need to add into collection
string remData = data[..pos];
cols.Add(remData);
//Scan each character of remaining part of the data
for (int i = pos; i < data.Length; i++)
{
//Read character at current position
string value = data.Substring(i, 1);
//Add this character into collection
if (i == pos)
{
cols.Add(value);
}
else
{
//Read two characters from current position
string pairValue = i + 1 < data.Length ? data.Substring(i, 2) : data.Substring(i, 1);
//If current character is a qualifier but is not a replaceable qualifier
if (value[0] == CharQlfr && !pairValue.Equals(ReplacingQlfr))
{
//Add this character into collection
cols.Add(value);
//If current position is the last position of the data just exit from loop
if (i + 1 >= data.Length)
break;
//Read remaining part of the data
data = data[(i + 1)..];
//Call this function recursively and exit from loop
ParseQualifier(cols, data);
break;
}
else if (pairValue.Equals(ReplacingQlfr)) //If this is a replaceable qualifier just replace the with the special character
{
value = ReplacedChar;
//Increase the current position by 1
i++;
}
//Add value into collection
cols.Add(value);
}
}
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return string.Join("", [.. cols]);
}
public DataTable Import(string fileSpec, bool firstRowColumnHeader)
{
try
{
int rowIdx = -1;
bool firstLine = true;
_dt = new DataTable("TextReader");
using StreamReader sr = new(fileSpec);
while (sr.Peek() != -1)
{
string line = sr.ReadLine();
if (line.Trim().Length <= 0)
continue;
if (firstLine)
MakeColumn(firstRowColumnHeader, line);
if (firstRowColumnHeader && firstLine)
{
firstLine = false;
continue;
}
firstLine = false;
rowIdx++;
DataRow dr = _dt.NewRow();
object[] columns = ParseData(line);
for (int i = 0; i < columns.Length; i++)
{
dr[string.Format("Col{0}", i)] = columns[i];
}
_dt.Rows.Add(dr);
}
sr.Close();
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return _dt;
}
#endregion
}
#endregion
#region Functions
public void Reset()
{
_table = new DataTable("ImportHelper");
}
/// <summary>
///
/// </summary>
/// <param name="formatter"></param>
/// <param name="fileSpec"></param>
/// <returns></returns>
public DataTable Import(IFormatter formatter, string fileSpec)
{
if (formatter == null)
throw new ArgumentException("Need to specify a formatter", nameof(formatter));
try
{
_table = Import(formatter, fileSpec, false);
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return _table;
}
/// <summary>
///
/// </summary>
/// <param name="formatter"></param>
/// <param name="fileSpec"></param>
/// <param name="firstRowColumnHeader"></param>
/// <returns></returns>
public DataTable Import(IFormatter formatter, string fileSpec, bool firstRowColumnHeader)
{
if (formatter == null)
throw new ArgumentException("Need to specify a formatter", nameof(formatter));
if (string.IsNullOrEmpty(fileSpec) || string.IsNullOrWhiteSpace(fileSpec))
throw new InvalidOperationException("Provide a valid file name to read.");
if (formatter == Formats.Text && Delimiter == '\0')
throw new InvalidOperationException("Provide a field delimiter of the file.");
try
{
_table = formatter.Import(fileSpec, firstRowColumnHeader);
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message);
}
return _table;
}
/// <summary>
///
/// </summary>
public void Dispose()
{
_table?.Dispose();
_table = null;
GC.SuppressFinalize(this);
}
#endregion
}
}

View File

@ -0,0 +1,654 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;
using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Global
{
public static class MailHelper
{
private static IPAddress _senderIp = IPAddress.None;
/// <summary>
///
/// </summary>
/// <param name="settings"></param>
/// <param name="msg"></param>
/// <param name="mobileNumber"></param>
/// <param name="subject"></param>
/// <param name="emailAddress"></param>
public static void SendSMSAndMail(AppSettings settings, string msg, string mobileNumber, string subject, string emailAddress)
{
try
{
if (!string.IsNullOrEmpty(msg) && !string.IsNullOrWhiteSpace(msg))
{
//Send SMS
SendSMSOrWhatsAppMessage(settings: settings, whatsAppMsg: false, msg: msg, mobileNumber: mobileNumber);
//Send Email
string bccEmail = settings.EmailBcc;
if (string.IsNullOrEmpty(bccEmail))
bccEmail = emailAddress;
List<string> to = [emailAddress];
List<string> bcc = [bccEmail];
SendMailMessage(settings: settings, to: to, cc: null, bcc: bcc, attachments: null, embeddedImages: null, isHtmlBody: false, priority: MailPriority.Normal, subject: subject, messageBody: msg);
}
}
catch
{
//continue working for next data
}
}
/// <summary>
///
/// </summary>
/// <param name="settings"></param>
/// <param name="whatsAppMsg"></param>
/// <param name="msg"></param>
/// <param name="mobileNumber"></param>
public static void SendSMSOrWhatsAppMessage(AppSettings settings, bool whatsAppMsg, string msg, string mobileNumber)
{
try
{
mobileNumber = mobileNumber.Replace("+", "");
if (!string.IsNullOrEmpty(settings.WaAccountSid) && !string.IsNullOrWhiteSpace(settings.WaAuthToken) && !string.IsNullOrWhiteSpace(settings.WaMsgSvcSid))
{
TwilioClient.Init(username: settings.WaAccountSid, password: settings.WaAuthToken);
if (whatsAppMsg && !string.IsNullOrEmpty(settings.WaSenderId))
{
mobileNumber = $"+88{(Ease.NetCore.Utility.Global.StringFunctions.Right(inputString: mobileNumber, length: 11))}";
_ = MessageResource.Create(body: msg, from: new PhoneNumber($"whatsapp:{settings.WaSenderId}"), to: new PhoneNumber($"whatsapp:{mobileNumber}"));
}
else if (!string.IsNullOrEmpty(settings.WaMsgSvcSid))
{
mobileNumber = $"+88{(Ease.NetCore.Utility.Global.StringFunctions.Right(inputString: mobileNumber, length: 11))}";
CreateMessageOptions messageOptions = new(to: new PhoneNumber(number: mobileNumber))
{
Body = msg,
MessagingServiceSid = settings.WaMsgSvcSid
};
_ = MessageResource.Create(messageOptions);
}
}
else if (!string.IsNullOrEmpty(settings.SmsApiUrl) && !string.IsNullOrEmpty(settings.SmsAccessInfo))
{
string url = settings.SmsApiUrl;
if (string.IsNullOrEmpty(url))
return;
string smsSecretKey = GlobalFunctions.ConvertFromBase64String(settings.SmsSecretKey);
if (string.IsNullOrEmpty(smsSecretKey))
return;
string accessInfo = Ease.NetCore.Utility.Global.CipherFunctions.Decrypt(settings.SmsSecretKey, settings.SmsAccessInfo);
if (string.IsNullOrEmpty(accessInfo))
return;
//Send SMS
string smsString = string.Format("sms[0][0]={0}&sms[0][1]={1}&sms[0][2]={2}", mobileNumber, msg, Guid.NewGuid().ToString());
using HttpClient client = new();
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Clear();
//Content
string content = accessInfo + smsString;
HttpRequestMessage request = new(HttpMethod.Post, url)
{
Content = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded")
};
var httpResponse = client.PostAsync(url, request.Content).Result;
if (httpResponse != null && httpResponse.Content != null)
{
content = httpResponse.Content.ReadAsStringAsync().Result;
}
else
{
content = "ERROR: -999";
}
}
}
catch (Exception e)
{
try
{
string text = e.Message;
Exception ie = e.InnerException;
while (ie != null)
{
text += ", " + ie.Message;
ie = ie.InnerException;
}
string path = settings.EmailErrorLogPath;
if (string.IsNullOrEmpty(path))
path = @"C:\Mail.Web\MailError";
string logFileSpec = Path.Combine(path, string.Format("{0}log.txt", DateTime.Today.ToString("yyMMdd")));
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
if (File.Exists(logFileSpec))
{
using StreamWriter sw = File.AppendText(logFileSpec);
string log = Environment.NewLine + new string('*', 40) + Environment.NewLine;
log += string.Format(" TimeStamp: {0} {1}{2}", DateTime.Today.ToShortDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine);
log += new string('*', 40);
sw.WriteLine(log);
sw.WriteLine(text);
sw.Flush();
sw.Close();
}
else
{
using StreamWriter sw = File.CreateText(logFileSpec);
string log = new string('*', 40) + Environment.NewLine;
log += string.Format(" TimeStamp: {0} {1}{2}", DateTime.Today.ToShortDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine);
log += new string('*', 40);
sw.WriteLine(log);
sw.WriteLine(text);
sw.Flush();
sw.Close();
}
}
catch { }
}
}
/// <summary>
///
/// </summary>
/// <param name="settings"></param>
/// <param name="to"></param>
/// <param name="cc"></param>
/// <param name="bcc"></param>
/// <param name="attachments"></param>
/// <param name="embeddedImages"></param>
/// <param name="isHtmlBody"></param>
/// <param name="priority"></param>
/// <param name="subject"></param>
/// <param name="messageBody"></param>
/// <returns></returns>
public static bool SendMailMessage(AppSettings settings, List<string> to, List<string> cc, List<string> bcc, List<string> attachments, List<string> embeddedImages, bool isHtmlBody, MailPriority priority, string subject, string messageBody)
{
try
{
#region Read config info
if (string.IsNullOrEmpty(settings.EmailHost))
throw new Exception("No Setting has been found for Host address [EmailHost].");
if (settings.EmailPort <= 0)
throw new Exception("No Setting has been found for Port number [EmailPort].");
if (string.IsNullOrEmpty(settings.EmailSenderId))
throw new Exception("No Setting has been found for Sender email address [EmailSenderId].");
if (string.IsNullOrEmpty(settings.EmailSenderPwd))
throw new Exception("No Setting has been found for Sender email address password [EmailSenderPwd].");
#endregion
using MailMessage message = new() { Subject = subject, Body = messageBody, IsBodyHtml = isHtmlBody, Priority = priority };
if (!string.IsNullOrEmpty(settings.EmailSenderId) && !string.IsNullOrEmpty(settings.EmailSenderName))
{
message.From = new MailAddress(settings.EmailSenderId, settings.EmailSenderName);
message.Sender = new MailAddress(settings.EmailSenderId, settings.EmailSenderName);
}
if (to != null && to.Count > 0)
{
foreach (string email in to)
message.To.Add(email);
}
if (cc != null && cc.Count > 0)
{
foreach (string email in cc)
message.CC.Add(email);
}
if (bcc != null && bcc.Count > 0)
{
foreach (string email in bcc)
message.Bcc.Add(email);
}
if (attachments != null && attachments.Count > 0)
{
foreach (string attachment in attachments)
{
Attachment item = new(attachment);
message.Attachments.Add(item);
}
}
AlternateView altView;
if (isHtmlBody)
{
message.IsBodyHtml = true;
altView = AlternateView.CreateAlternateViewFromString(content: messageBody, contentEncoding: null, mediaType: "text/html");
if (embeddedImages != null && embeddedImages.Count > 0)
{
foreach (string imbeddedImage in embeddedImages)
{
string contentId = imbeddedImage;
int indexOf = imbeddedImage.IndexOf('.');
if (indexOf > 0)
contentId = contentId[..indexOf];
LinkedResource lr = new(imbeddedImage)
{
ContentId = contentId
};
altView.LinkedResources.Add(lr);
}
}
}
else
{
message.IsBodyHtml = false;
altView = AlternateView.CreateAlternateViewFromString(content: messageBody, contentEncoding: null, mediaType: "text/plain");
}
message.AlternateViews.Add(item: altView);
using SmtpClient client = new() { Host = settings.EmailHost, Port = settings.EmailPort, EnableSsl = settings.EmailEnableSsl };
NetworkCredential nc = new(settings.EmailSenderId, settings.EmailSenderPwd);
client.UseDefaultCredentials = settings.EmailUseDefaultCredentials;
client.Credentials = nc;
client.Send(message);
return true;
}
catch (Exception e)
{
try
{
string text = e.Message;
Exception ie = e.InnerException;
while (ie != null)
{
text += ", " + ie.Message;
ie = ie.InnerException;
}
string path = settings.EmailErrorLogPath;
if (string.IsNullOrEmpty(path))
path = @"C:\Mail.Web\MailError";
string logFileSpec = Path.Combine(path, string.Format("{0}log.txt", DateTime.Today.ToString("yyMMdd")));
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
if (File.Exists(logFileSpec))
{
using StreamWriter sw = File.AppendText(logFileSpec);
string log = Environment.NewLine + new string('*', 40) + Environment.NewLine;
log += string.Format(" TimeStamp: {0} {1}{2}", DateTime.Today.ToShortDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine);
log += new string('*', 40);
sw.WriteLine(log);
sw.WriteLine(text);
sw.Flush();
sw.Close();
}
else
{
using StreamWriter sw = File.CreateText(logFileSpec);
string log = new string('*', 40) + Environment.NewLine;
log += string.Format(" TimeStamp: {0} {1}{2}", DateTime.Today.ToShortDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine);
log += new string('*', 40);
sw.WriteLine(log);
sw.WriteLine(text);
sw.Flush();
sw.Close();
}
}
catch { }
}
return false;
}
/// <summary>
///
/// </summary>
/// <param name="settings"></param>
/// <param name="to"></param>
/// <param name="cc"></param>
/// <param name="bcc"></param>
/// <param name="attachments"></param>
/// <param name="embeddedImages"></param>
/// <param name="isHtmlBody"></param>
/// <param name="priority"></param>
/// <param name="subject"></param>
/// <param name="messageBody"></param>
public static async Task SendMailMessageAsync(AppSettings settings, List<string> to, List<string> cc, List<string> bcc, List<string> attachments, List<string> embeddedImages, bool isHtmlBody, MailPriority priority, string subject, string messageBody)
{
try
{
#region Read config info
if (string.IsNullOrEmpty(settings.EmailHost))
throw new Exception("No Setting has been found for Host address [EmailHost].");
if (settings.EmailPort <= 0)
throw new Exception("No Setting has been found for Port number [EmailPort].");
if (string.IsNullOrEmpty(settings.EmailSenderId))
throw new Exception("No Setting has been found for Sender email address [EmailSenderId].");
if (string.IsNullOrEmpty(settings.EmailSenderPwd))
throw new Exception("No Setting has been found for Sender email address password [EmailSenderPwd].");
#endregion
MailMessage message = new() { Subject = subject, Body = messageBody, IsBodyHtml = isHtmlBody, Priority = priority };
if (!string.IsNullOrEmpty(settings.EmailSenderId) && !string.IsNullOrEmpty(settings.EmailSenderName))
{
message.From = new MailAddress(settings.EmailSenderId, settings.EmailSenderName);
message.Sender = new MailAddress(settings.EmailSenderId, settings.EmailSenderName);
}
if (to != null && to.Count > 0)
{
foreach (string email in to)
message.To.Add(email);
}
if (cc != null && cc.Count > 0)
{
foreach (string email in cc)
message.CC.Add(email);
}
if (bcc != null && bcc.Count > 0)
{
foreach (string email in bcc)
message.Bcc.Add(email);
}
if (attachments != null && attachments.Count > 0)
{
foreach (string attachment in attachments)
{
Attachment item = new(attachment);
message.Attachments.Add(item);
}
}
AlternateView altView;
if (isHtmlBody)
{
message.IsBodyHtml = true;
altView = AlternateView.CreateAlternateViewFromString(content: messageBody, contentEncoding: null, mediaType: "text/html");
if (embeddedImages != null && embeddedImages.Count > 0)
{
foreach (string embeddedImage in embeddedImages)
{
string contentId = embeddedImage;
int indexOf = embeddedImage.IndexOf('.');
if (indexOf > 0)
contentId = contentId[..indexOf];
LinkedResource lr = new(embeddedImage)
{
ContentId = contentId
};
altView.LinkedResources.Add(lr);
}
}
}
else
{
message.IsBodyHtml = false;
altView = AlternateView.CreateAlternateViewFromString(content: messageBody, contentEncoding: null, mediaType: "text/plain");
}
message.AlternateViews.Add(item: altView);
SmtpClient client = new() { Host = settings.EmailHost, Port = settings.EmailPort, EnableSsl = settings.EmailEnableSsl };
NetworkCredential nc = new(settings.EmailSenderId, settings.EmailSenderPwd);
client.UseDefaultCredentials = settings.EmailUseDefaultCredentials;
client.Credentials = nc;
client.SendCompleted += (s, e) =>
{
client.Dispose();
message.Dispose();
};
await client.SendMailAsync(message: message);
}
catch (Exception e)
{
try
{
string text = e.Message;
Exception ie = e.InnerException;
while (ie != null)
{
text += ", " + ie.Message;
ie = ie.InnerException;
}
string path = settings.EmailErrorLogPath;
if (string.IsNullOrEmpty(path))
path = @"C:\Mail.Web\MailError";
string logFileSpec = Path.Combine(path, string.Format("{0}log.txt", DateTime.Today.ToString("yyMMdd")));
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
if (File.Exists(logFileSpec))
{
using StreamWriter sw = File.AppendText(logFileSpec);
string log = Environment.NewLine + new string('*', 40) + Environment.NewLine;
log += string.Format(" TimeStamp: {0} {1}{2}", DateTime.Today.ToShortDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine);
log += new string('*', 40);
await sw.WriteLineAsync(log);
await sw.WriteLineAsync(text);
await sw.FlushAsync();
sw.Close();
}
else
{
using StreamWriter sw = File.CreateText(logFileSpec);
string log = new string('*', 40) + Environment.NewLine;
log += string.Format(" TimeStamp: {0} {1}{2}", DateTime.Today.ToShortDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine);
log += new string('*', 40);
await sw.WriteLineAsync(log);
await sw.WriteLineAsync(text);
await sw.FlushAsync();
sw.Close();
}
}
catch
{
//do nothing
}
}
}
/// <summary>
///
/// </summary>
/// <param name="settings"></param>
/// <param name="to"></param>
/// <param name="cc"></param>
/// <param name="bcc"></param>
/// <param name="attachments"></param>
/// <param name="embeddedImages"></param>
/// <param name="isBodyHtml"></param>
/// <param name="priority"></param>
/// <param name="subject"></param>
/// <param name="body"></param>
/// <returns></returns>
public static bool SendIpBindingMailMessage(AppSettings settings, List<string> to, List<string> cc, List<string> bcc, List<string> attachments, List<string> embeddedImages, bool isBodyHtml, MailPriority priority, string subject, string body)
{
try
{
#region Read config info
if (string.IsNullOrEmpty(settings.EmailHost))
throw new Exception("No Setting has been found for Host address [EmailHost].");
if (settings.EmailPort <= 0)
throw new Exception("No Setting has been found for Port number [EmailPort].");
if (string.IsNullOrEmpty(settings.EmailSenderIp))
throw new Exception("No Setting has been found for Email Sender ip [EmailSenderIp].");
if (string.IsNullOrEmpty(settings.EmailSenderId))
throw new Exception("No Setting has been found for Sender email address [EmailSenderId].");
#endregion
_senderIp = IPAddress.Parse(settings.EmailSenderIp);
using MailMessage message = new() { Subject = subject, Body = body, IsBodyHtml = isBodyHtml, Priority = priority };
if (!string.IsNullOrEmpty(settings.EmailSenderId) && !string.IsNullOrEmpty(settings.EmailSenderName))
{
message.From = new MailAddress(settings.EmailSenderId, settings.EmailSenderName);
message.Sender = new MailAddress(settings.EmailSenderId, settings.EmailSenderName);
}
else
{
message.From = new MailAddress(settings.EmailSenderId);
message.Sender = new MailAddress(settings.EmailSenderId);
}
//Add recipient to
foreach (string email in to)
message.To.Add(email);
//Add recipient cc
if (cc != null && cc.Count > 0)
{
foreach (string email in cc)
message.CC.Add(email);
}
//Add recipient bcc
if (bcc != null && bcc.Count > 0)
{
foreach (string email in bcc)
message.Bcc.Add(email);
}
//Add Attachment(s)
if (attachments != null && attachments.Count > 0)
{
foreach (string attachment in attachments)
{
Attachment item = new(attachment);
message.Attachments.Add(item);
}
}
AlternateView altView;
if (message.IsBodyHtml)
{
altView = AlternateView.CreateAlternateViewFromString(content: body, contentEncoding: null, mediaType: "text/html");
if (embeddedImages != null && embeddedImages.Count > 0)
{
foreach (string embeddedImage in embeddedImages)
{
string contentId = embeddedImage;
int indexOf = embeddedImage.IndexOf('.');
if (indexOf > 0)
contentId = contentId[..indexOf];
LinkedResource lr = new(embeddedImage)
{
ContentId = contentId
};
altView.LinkedResources.Add(lr);
}
}
}
else
{
altView = AlternateView.CreateAlternateViewFromString(content: body, contentEncoding: null, mediaType: "text/plain");
}
message.AlternateViews.Add(item: altView);
//Finally send mail
SmtpClient client = new() { Host = settings.EmailHost, Port = settings.EmailPort, EnableSsl = settings.EmailEnableSsl };
client.Send(message);
client.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
client.ServicePoint.ConnectionLeaseTimeout = 0;
client.Send(message);
return true;
}
catch (Exception e)
{
try
{
string text = e.Message;
Exception ie = e.InnerException;
while (ie != null)
{
text += ", " + ie.Message;
ie = ie.InnerException;
}
string path = settings.EmailErrorLogPath;
if (string.IsNullOrEmpty(path))
path = @"C:\Mail.Web\MailError";
string logFileSpec = Path.Combine(path, string.Format("{0}log.txt", DateTime.Today.ToString("yyMMdd")));
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
if (File.Exists(logFileSpec))
{
using StreamWriter sw = File.AppendText(logFileSpec);
string log = Environment.NewLine + new string('*', 40) + Environment.NewLine;
log += string.Format(" TimeStamp: {0} {1}{2}", DateTime.Today.ToShortDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine);
log += new string('*', 40);
sw.WriteLine(log);
sw.WriteLine(text);
sw.Flush();
sw.Close();
}
else
{
using StreamWriter sw = File.CreateText(logFileSpec);
string log = new string('*', 40) + Environment.NewLine;
log += string.Format(" TimeStamp: {0} {1}{2}", DateTime.Today.ToShortDateString(), DateTime.Now.ToLongTimeString(), Environment.NewLine);
log += new string('*', 40);
sw.WriteLine(log);
sw.WriteLine(text);
sw.Flush();
sw.Close();
}
}
catch
{
//do nothing
}
}
return false;
}
/// <summary>
///
/// </summary>
/// <param name="servicePoint"></param>
/// <param name="remoteEndPoint"></param>
/// <param name="retryCount"></param>
/// <returns></returns>
private static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
{
return new IPEndPoint(_senderIp, 0);
}
}
}

View File

@ -0,0 +1,27 @@
using System.Collections.Generic;
using System.Linq;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Global
{
public class MenuSettings
{
public List<MenuSettingItem> MenuItems { get; set; } = [];
public MenuSettingItem GetItem(string key, string value)
{
if (MenuItems?.Count <= 0 || string.IsNullOrEmpty(key))
return new MenuSettingItem { Key = key, Value = value };
MenuSettingItem item = MenuItems.FirstOrDefault(x => x.Key == key);
item ??= new MenuSettingItem { Key = key, Value = value };
return item;
}
}
public class MenuSettingItem
{
public string Key { get; set; }
public string Value { get; set; }
}
}

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Global
{
public static class SettingsExtensions
{
public static bool IsValid<T>(this T data)
{
ArgumentNullException.ThrowIfNull(data);
var validationResult = new List<ValidationResult>();
var result = Validator.TryValidateObject(data, new ValidationContext(data), validationResult, false);
if (!result)
{
foreach (var item in validationResult)
{
Debug.WriteLine($"ERROR::{item.MemberNames}:{item.ErrorMessage}");
}
}
return result;
}
}
}

View File

@ -0,0 +1,64 @@
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
using System;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Nodes;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Global
{
/// <summary>
/// Represents the Swagger/Swashbuckle operation filter used to document the implicit API version parameter.
/// </summary>
/// <remarks>This <see cref="IOperationFilter"/> is only required due to bugs in the <see cref="SwaggerGenerator"/>.
/// Once they are fixed and published, this class can be removed.</remarks>
public class SwaggerDefaultValues : IOperationFilter
{
/// <inheritdoc />
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
var apiDescription = context.ApiDescription;
// REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1752#issue-663991077
foreach (var responseType in context.ApiDescription.SupportedResponseTypes)
{
// REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/b7cf75e7905050305b115dd96640ddd6e74c7ac9/src/Swashbuckle.AspNetCore.SwaggerGen/SwaggerGenerator/SwaggerGenerator.cs#L383-L387
var responseKey = responseType.IsDefaultResponse ? "default" : responseType.StatusCode.ToString();
var response = operation.Responses[responseKey];
foreach (var contentType in response.Content.Keys)
{
if (!responseType.ApiResponseFormats.Any(x => x.MediaType == contentType))
{
response.Content.Remove(contentType);
}
}
}
if (operation.Parameters == null)
{
return;
}
foreach (OpenApiParameter parameter in operation.Parameters.OfType<OpenApiParameter>())
{
var description = apiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name);
parameter.Description ??= description.ModelMetadata?.Description;
if (parameter.Schema is OpenApiSchema openApiSchema)
{
if (parameter.Schema.Default == null && description.DefaultValue != null &&
description.DefaultValue is not DBNull && description.ModelMetadata is ModelMetadata modelMetadata)
{
var json = JsonSerializer.Serialize(description.DefaultValue, modelMetadata.ModelType);
var element = JsonSerializer.Deserialize<JsonElement>(json);
openApiSchema.Default = JsonValue.Create(element);
}
parameter.Required |= description.IsRequired;
}
}
}
}
}

View File

@ -0,0 +1,8 @@
namespace OnlineSalesAutoCrop.CoreAPI.Models.Objects
{
public class FoundKeywordItem
{
public string Keyword { get; set; }
public int Occurrences { get; set; }
}
}

View File

@ -0,0 +1,45 @@
using System.Collections.Generic;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups
{
public class AuthModule
{
public string ModuleName { get; set; }
public string ModuleId { get; set; }
public int PendingItems { get; set; }
}
public class PendingAuthModule : AuthModule
{
public bool BasicData { get; set; }
public string ModuleHref { get; set; }
public int PendingAuthItems { get; set; }
public int TotalPending => PendingAuthItems + PendingItems;
}
public class DynamicColumn
{
public string Field { get; set; }
public string Title { get; set; }
public int? Width { get; set; }
}
public class DynamicColumnExt : DynamicColumn
{
public string Alignment { get; set; }
public string Format { get; set; }
public bool Hidden { get; set; }
public int? FontWeight { get; set; }
public bool MakeFooter { get; set; }
public string FooterFormat { get; set; }
public int? FooterType { get; set; }
}
public class GraphSeriesItem
{
public string Type { get; set; }
public bool Visible { get; set; }
public string Name { get; set; }
public List<decimal> Data { get; set; }
}
}

View File

@ -0,0 +1,100 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Global;
using System;
using System.Collections.Generic;
using System.Linq;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups
{
public class BaseObject
{
public string Code { get; set; }
public string Name { get; set; }
public EnumStatus Status { get; set; }
public short SeqId { get; set; }
public string StatusDetail => Status.GetDescription();
public string LastStatus => Status.GetLastDescription();
}
public class LookupData
{
public int ItemId { get; set; }
public string ItemValue { get; set; }
}
public class LookupDataExt : LookupData
{
public int LookupId { get; set; }
public short ItemType { get; set; }
public string ItemCode { get; set; }
public int SeqId { get; set; }
}
public class ProdByInvType
{
public int ProductId { get; set; }
public string ProductCode { get; set; }
public string ProductName { get; set; }
public int InventoryTypeId { get; set; }
public string InventoryType { get; set; }
public string AstOrGLCode { get; set; }
public string ExpOrDepGLCode { get; set; }
public decimal Price { get; set; }
public decimal VatRate { get; set; }
public decimal AitRate { get; set; }
}
public class ProdByInvTypeExt : ProdByInvType
{
public int StoreId { get; set; }
public decimal Stock { get; set; }
}
public class SalesTxnType
{
public int TranTypeId { get; set; }
public string Description { get; set; }
public string Side { get; set; }
}
public class HierarchyBase
{
public int HierarchyId { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public int LevelId { get; set; }
public EnumStatus Status { get; set; }
public int SeqId { get; set; }
public int? ParentId { get; set; }
public string StatusDetail => Status.GetDescription();
public string LastStatus => Status.GetLastDescription();
public List<HierarchyBase> Children { get; set; } = [];
public bool HasChildren => Children != null && Children.Count > 0;
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parent"></param>
/// <param name="data"></param>
/// <exception cref="InvalidOperationException"></exception>
public static void BuildHierarchy<T>(T parent, IEnumerable<T> data)
where T : HierarchyBase
{
try
{
IEnumerable<T> children = data.Where(x => x.ParentId.HasValue && x.ParentId.Value == parent.HierarchyId);
parent.Children.AddRange(children);
foreach (T child in parent.Children.Cast<T>())
{
BuildHierarchy(parent: child, data: data);
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
}
}
}

View File

@ -0,0 +1,19 @@
namespace OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups
{
public class MarketHierarchyBasic : HierarchyBase
{
public string LevelName { get; set; }
/// <summary>
/// Do not remove following properties, uses in UI
/// </summary>
public bool Selected { get; set; }
}
public class MarketHierarchy : MarketHierarchyBasic
{
public string Code1 { get; set; }
public string ParentName { get; set; }
}
}

View File

@ -0,0 +1,18 @@
namespace OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups
{
public class ProductHierarchyBasic : HierarchyBase
{
public string LevelName { get; set; }
/// <summary>
/// Do not remove following properties, uses in UI
/// </summary>
public bool Selected { get; set; }
}
public class ProductHierarchy : ProductHierarchyBasic
{
public string Code1 { get; set; }
public string ParentName { get; set; }
}
}

View File

@ -0,0 +1,139 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups;
using System.Collections.Generic;
using System.Linq;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Objects.Systems
{
public class PermissionBase
{
public string ModuleId { get; set; }
public bool AllowSelect { get; set; }
public bool AllowAdd { get; set; }
public bool AllowEdit { get; set; }
public bool AllowDelete { get; set; }
}
public class GroupPermission : PermissionBase
{
public GroupPermission()
{
Children = [];
}
public string ModuleName { get; set; }
public string Icon { get; set; }
public string RouteUrl { get; set; }
public string ParentId { get; set; }
public bool Visible { get; set; }
public List<GroupPermission> Children { get; set; }
public bool HasChildren => Children != null && Children.Count > 0;
public MenuItem Copy()
{
return new MenuItem { ModuleId = ModuleId, Label = ModuleName, Icon = Icon, RouterLink = RouteUrl };
}
}
public class Menu : List<GroupPermission>
{
private readonly Stack<string> _keyStack;
public Menu()
{
Clear();
_keyStack = new Stack<string>();
}
private string GetCurrentParent()
{
if (_keyStack.Count > 0)
return _keyStack.Peek();
else
return null;
}
private void PushParent(string key)
{
_keyStack.Push(key);
}
private void PopParent()
{
_keyStack.Pop();
}
private GroupPermission GetItem(string moduleId)
{
return this.FirstOrDefault(gp => gp.ModuleId == moduleId);
}
private bool Exists(string moduleId)
{
return GetItem(moduleId) != null;
}
public void BeginGroup(string moduleId, string moduleName, string icon)
{
MenuItem(moduleId: moduleId, moduleName: moduleName, icon: icon, routeUrl: string.Empty, visible: true, allowSelect: false, allowAdd: false, allowEdit: false, allowDelete: false);
PushParent(moduleId);
}
public void MenuItem(string moduleId, string moduleName, bool visible)
{
MenuItem(moduleId: moduleId, moduleName: moduleName, icon: string.Empty, routeUrl: string.Empty, visible: visible, allowSelect: false, allowAdd: false, allowEdit: false, allowDelete: false);
}
public void MenuItem(string moduleId, string moduleName, string icon, string routeUrl, bool visible)
{
MenuItem(moduleId: moduleId, moduleName: moduleName, icon: icon, routeUrl: routeUrl, visible: visible, allowSelect: false, allowAdd: false, allowEdit: false, allowDelete: false);
}
public void MenuItem(string moduleId, string moduleName, string icon, string routeUrl, bool visible, bool allowSelect, bool allowAdd, bool allowEdit, bool allowDelete)
{
if (!Exists(moduleId))
{
string parentKey = this.GetCurrentParent();
if (!string.IsNullOrEmpty(parentKey))
{
GroupPermission parent = GetItem(parentKey);
if (parent != null && !parent.Visible)
visible = false;
}
GroupPermission item = new()
{
Icon = icon,
ModuleId = moduleId,
ModuleName = moduleName,
RouteUrl = routeUrl,
ParentId = parentKey,
Visible = visible,
AllowSelect = allowSelect,
AllowAdd = allowAdd,
AllowEdit = allowEdit,
AllowDelete = allowDelete,
};
Add(item);
}
}
public void EndGroup()
{
PopParent();
}
}
public class MenuItem
{
public string ModuleId { get; set; }
public string Label { get; set; }
public string RouterLink { get; set; }
public string Icon { get; set; }
public List<MenuItem> Items { get; set; }
}
public class GroupBase : BaseObject
{
public int GroupId { get; set; }
public bool ViewToAll { get; set; }
public string ViewToAllDescription => ViewToAll ? "Yes" : "No";
}
}

View File

@ -0,0 +1,129 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Global;
using System;
using System.Collections.Generic;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Objects.Systems
{
public class User
{
public const int SuperUser_Id = -9;
public const string SuperUser_LoginId = "superuser";
public int Id { get; set; }
public string LoginId { get; set; }
public int LogId { get; set; }
public DateTime? LogoutTime { get; set; }
public string UserName { get; set; }
public EnumStatus Status { get; set; }
public EnumAccessStatus AccessStatus { get; set; }
public bool NeverExpires { get; set; }
public string LastPasswords { get; set; }
public DateTime? LastPassChgDate { get; set; }
public DateTime? ExpireDate { get; set; }
public DateTime? NextLoginTime { get; set; }
public DateTime SystemDate { get; set; }
public bool DbOnStartup { get; set; }
public bool ViewOwnTaskOnly { get; set; }
public int? EmployeeId { get; set; }
public string EmployeeCode { get; set; }
public EnumLoginStatus LoginStatus { get; set; }
public EnumAuthenticationMethod AuthMethod { get; set; }
public bool AuthRequiredAtLogin { get; set; }
public List<string> ModuleIds { get; set; }
public string EmailAddress { get; set; }
public string AuthKey { get; set; }
public string AuthValue { get; set; }
public string MobileNo { get; set; }
public string UnsuccessfulMsg { get; set; }
public string ThemeName { get; set; }
public string SchemeName { get; set; }
public string MenuLayout { get; set; }
public bool IsLocked { get; set; }
public DateTime MinReportDate { get; set; }
public string AppId { get; set; }
public bool DisallowMultiLogin { get; set; }
public bool BatchEnabled { get; set; }
public int BmProcessId { get; set; }
public int PrProcessId { get; set; }
public int IdleTime { get; set; }
public int PingTime { get; set; }
public int TimeoutTime { get; set; }
public int NotificationCount { get; set; }
public List<int> TeamSpaceIds { get; set; }
}
public class LoginHistory
{
public int SlNo { get; set; }
public string LoginIp { get; set; }
public DateTime LoginTime { get; set; }
public string LogoutIp { get; set; }
public DateTime? LogoutTime { get; set; }
}
public class AccessLog
{
public string LoginId { get; set; }
public DateTime LoginTime { get; set; }
public string LoginIp { get; set; }
public DateTime? LogoutTime { get; set; }
public string LogoutIp { get; set; }
public string LoginStatus { get; set; }
}
public class DashboardItem
{
public string DivStyleCss { get; set; }
public string Title { get; set; }
public string TitleCss { get; set; }
public string Value { get; set; }
public string ValueCss { get; set; }
public int Id { get; set; }
public string Href { get; set; }
}
public class Dashboard2Item
{
public string Title { get; set; }
public decimal Value { get; set; }
public string TitleStyle { get; set; }
public string ValueStyle { get; set; }
public string ValueFormat { get; set; }
}
public class Dashboard2Data
{
public string GroupName { get; set; }
public List<Dashboard2Item> Items { get; set; }
}
public class UserForceLogout
{
public int UserId { get; set; }
public string LoginId { get; set; }
public string UserName { get; set; }
}
public class UserSearch : UserForceLogout
{
public string Designation { get; set; }
public string MobileNo { get; set; }
public string EmailAddress { get; set; }
public EnumStatus Status { get; set; }
public short SeqId { get; set; }
public bool CanUseAttendanceSystem { get; set; }
public bool IsLocked { get; set; }
public string AuthId { get; set; }
public string StatusDetail => Status.GetDescription();
}
public class UserBasicInfo
{
public int UserId { get; set; }
public string LoginId { get; set; }
public string UserName { get; set; }
public string Designation { get; set; }
}
}

View File

@ -0,0 +1,275 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Objects
{
/// <summary>
///
/// </summary>
public static class Base32Encoding
{
/// <summary>
/// The different characters allowed in Base32 encoding.
/// </summary>
/// <remarks>
/// This is a 32-character subset of the twenty-six letters AZ and six digits 27.
/// </remarks>
private const string Base32AllowedCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
/// <summary>
/// Converts a byte array into a Base32 string.
/// </summary>
/// <param name="input">The string to convert to Base32.</param>
/// <param name="addPadding">Whether or not to add RFC3548 '='-padding to the string.</param>
/// <returns>A Base32 string.</returns>
/// <remarks>
/// https://tools.ietf.org/html/rfc3548#section-2.2 indicates padding MUST be added unless the reference to the RFC tells us otherwise.
/// https://github.com/google/google-authenticator/wiki/Key-Uri-Format indicates that padding SHOULD be omitted.
/// To meet both requirements, you can omit padding when required.
/// </remarks>
public static string ToBase32String(this byte[] input, bool addPadding)
{
if (input == null || input.Length == 0)
{
return string.Empty;
}
var bits = input.Select(b => Convert.ToString(b, 2).PadLeft(8, '0')).Aggregate((a, b) => a + b).PadRight((int)(Math.Ceiling((input.Length * 8) / 5d) * 5), '0');
var result = Enumerable.Range(0, bits.Length / 5).Select(i => Base32AllowedCharacters.Substring(Convert.ToInt32(bits.Substring(i * 5, 5), 2), 1)).Aggregate((a, b) => a + b);
if (addPadding)
{
result = result.PadRight((int)(Math.Ceiling(result.Length / 8d) * 8), '=');
}
return result;
}
/// <summary>
///
/// </summary>
/// <param name="input"></param>
/// <param name="addPadding"></param>
/// <returns></returns>
public static string EncodeAsBase32String(this string input, bool addPadding)
{
if (string.IsNullOrEmpty(input))
{
return string.Empty;
}
var bytes = Encoding.UTF8.GetBytes(input);
var result = bytes.ToBase32String(addPadding);
return result;
}
/// <summary>
///
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string DecodeFromBase32String(this string input)
{
if (string.IsNullOrEmpty(input))
{
return string.Empty;
}
var bytes = input.ToByteArray();
var result = Encoding.UTF8.GetString(bytes);
return result;
}
/// <summary>
/// Converts a Base32 string into the corresponding byte array, using 5 bits per character.
/// </summary>
/// <param name="input">The Base32 String</param>
/// <returns>A byte array containing the properly encoded bytes.</returns>
public static byte[] ToByteArray(this string input)
{
if (string.IsNullOrEmpty(input))
{
return [];
}
var bits = input.TrimEnd('=').ToUpper().ToCharArray().Select(c => Convert.ToString(Base32AllowedCharacters.IndexOf(c), 2).PadLeft(5, '0')).Aggregate((a, b) => a + b);
var result = Enumerable.Range(0, bits.Length / 8).Select(i => Convert.ToByte(bits.Substring(i * 8, 8), 2)).ToArray();
return result;
}
}
/// <summary>
///
/// </summary>
public class TOtpService
{
private TimeSpan DefaultClockDriftTolerance { get; set; }
private readonly static DateTime _epoch = new(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
/// <summary>
///
/// </summary>
public TOtpService()
{
DefaultClockDriftTolerance = TimeSpan.FromMinutes(1);
}
private static string GeneratePINAtInterval(string secretKey, long counter, int digits)
{
return GenerateHashedCode(secretKey, counter, digits);
}
private static string GenerateHashedCode(string secretKey, long iterationNumber, int digits)
{
byte[] key = Base32Encoding.ToByteArray(secretKey.ToUpper());
return GenerateHashedCode(key, iterationNumber, digits);
}
private static string GenerateHashedCode(byte[] key, long iterationNumber, int digits)
{
byte[] counter = BitConverter.GetBytes(iterationNumber);
if (BitConverter.IsLittleEndian)
Array.Reverse(counter);
using HMACSHA1 hmac = new(key);
byte[] hash = hmac.ComputeHash(counter);
int offset = hash[^1] & 0xf;
//Convert the 4 bytes into an integer, ignoring the sign.
int binary = ((hash[offset] & 0x7f) << 24) | (hash[offset + 1] << 16) | (hash[offset + 2] << 8) | (hash[offset + 3]);
int password = binary % (int)Math.Pow(10, digits);
return password.ToString(new string('0', digits));
}
private static long GetCurrentCounter(DateTime now)
{
return GetCurrentCounter(now, _epoch, 30);
}
private static long GetCurrentCounter(DateTime now, DateTime epoch, int timeStep)
{
return (long)(now - epoch).TotalSeconds / timeStep;
}
/// <summary>
///
/// </summary>
/// <param name="secretKey"></param>
/// <param name="otpCode"></param>
/// <returns></returns>
public bool ValidateTwoFactorPIN(string secretKey, string otpCode)
{
return ValidateTwoFactorPIN(secretKey, otpCode, DateTime.UtcNow, DefaultClockDriftTolerance);
}
/// <summary>
///
/// </summary>
/// <param name="secretKey"></param>
/// <param name="otpCode"></param>
/// <param name="now"></param>
/// <returns></returns>
public bool ValidateTwoFactorPIN(string secretKey, string otpCode, DateTime now)
{
return ValidateTwoFactorPIN(secretKey, otpCode, now, DefaultClockDriftTolerance);
}
/// <summary>
///
/// </summary>
/// <param name="secretKey"></param>
/// <param name="otpCode"></param>
/// <param name="timeTolerance"></param>
/// <returns></returns>
public static bool ValidateTwoFactorPIN(string secretKey, string otpCode, TimeSpan timeTolerance)
{
return ValidateTwoFactorPIN(secretKey, otpCode, DateTime.UtcNow, timeTolerance);
}
/// <summary>
///
/// </summary>
/// <param name="secretKey"></param>
/// <param name="otpCode"></param>
/// <param name="now"></param>
/// <param name="timeTolerance"></param>
/// <returns></returns>
public static bool ValidateTwoFactorPIN(string secretKey, string otpCode, DateTime now, TimeSpan timeTolerance)
{
var codes = GetCurrentPINs(secretKey, now, timeTolerance);
return codes.Any(c => c == otpCode);
}
/// <summary>
///
/// </summary>
/// <param name="secretKey"></param>
/// <returns></returns>
public static string GetCurrentPIN(string secretKey)
{
return GetCurrentPIN(secretKey, DateTime.UtcNow);
}
/// <summary>
///
/// </summary>
/// <param name="secretKey"></param>
/// <param name="now"></param>
/// <returns></returns>
public static string GetCurrentPIN(string secretKey, DateTime now)
{
return GeneratePINAtInterval(secretKey, GetCurrentCounter(now, _epoch, 30), 6);
}
/// <summary>
///
/// </summary>
/// <param name="secretKey"></param>
/// <returns></returns>
public string[] GetCurrentPINs(string secretKey)
{
return GetCurrentPINs(secretKey, DateTime.UtcNow, DefaultClockDriftTolerance);
}
/// <summary>
///
/// </summary>
/// <param name="secretKey"></param>
/// <param name="now"></param>
/// <returns></returns>
public string[] GetCurrentPINs(string secretKey, DateTime now)
{
return GetCurrentPINs(secretKey, now, DefaultClockDriftTolerance);
}
/// <summary>
///
/// </summary>
/// <param name="secretKey"></param>
/// <param name="now"></param>
/// <param name="timeTolerance"></param>
/// <returns></returns>
public static string[] GetCurrentPINs(string secretKey, DateTime now, TimeSpan timeTolerance)
{
int iterationOffset = 0;
List<string> codes = [];
long iterationCounter = GetCurrentCounter(now);
if (timeTolerance.TotalSeconds > 30)
{
iterationOffset = Convert.ToInt32(timeTolerance.TotalSeconds / 30.00);
}
long iterationStart = iterationCounter - iterationOffset;
long iterationEnd = iterationCounter + iterationOffset;
for (long counter = iterationStart; counter <= iterationEnd; counter++)
{
codes.Add(GeneratePINAtInterval(secretKey, counter, 6));
}
return [.. codes];
}
}
}

View File

@ -0,0 +1,66 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Globals">
<SccProjectName></SccProjectName>
<SccProvider></SccProvider>
<SccAuxPath></SccAuxPath>
<SccLocalPath></SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Objects\obj\**" />
<Compile Remove="Properties\**" />
<EmbeddedResource Remove="Objects\obj\**" />
<EmbeddedResource Remove="Properties\**" />
<None Remove="Objects\obj\**" />
<None Remove="Properties\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Requests\AgencyLimitRequest.cs" />
<Compile Remove="Requests\AgencyRequest.cs" />
<Compile Remove="Requests\BenefsForTTIssueRequest.cs" />
<Compile Remove="Requests\CancelAuthoriseRequest.cs" />
<Compile Remove="Requests\CancelRequest.cs" />
<Compile Remove="Requests\ComplainRequest.cs" />
<Compile Remove="Requests\ComplainSearchRequest.cs" />
<Compile Remove="Requests\LogoutRequest.cs" />
<Compile Remove="Requests\RemitterAuthRequest.cs" />
<Compile Remove="Responses\AgencyLimitResponse .cs" />
<Compile Remove="Responses\CancelAppliedResponse.cs" />
<Compile Remove="Responses\ComplainResponse.cs" />
<Compile Remove="Responses\ComplainTypeResponse.cs" />
<Compile Remove="Responses\DashboardResponse.cs" />
<Compile Remove="Responses\UserSearchResponse.cs" />
</ItemGroup>
<ItemGroup>
<Content Remove="C:\Users\HP\.nuget\packages\dotnetcore.npoi\1.2.3\contentFiles\any\netstandard2.0\NOTICE.TXT" />
<Content Remove="C:\Users\Russel\.nuget\packages\dotnetcore.npoi\1.2.3\contentFiles\any\netstandard2.0\NOTICE.TXT" />
<Content Remove="C:\Users\SMRussel\.nuget\packages\dotnetcore.npoi\1.2.3\contentFiles\any\netstandard2.0\NOTICE.TXT" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="DocumentFormat.OpenXml" Version="3.5.1" />
<PackageReference Include="Ease.NetCore" Version="2.1.4" />
<PackageReference Include="ExcelDataReader" Version="3.8.0" />
<PackageReference Include="ExcelDataReader.DataSet" Version="3.8.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="10.0.8" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="10.2.1" />
<PackageReference Include="System.Data.SqlClient" Version="4.9.1" />
<PackageReference Include="System.Drawing.Common" Version="10.0.8" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.18.0" />
<PackageReference Include="Twilio.AspNet.Core" Version="8.1.2" />
</ItemGroup>
<ItemGroup>
<Folder Include="Objects\Activities\" />
<Folder Include="Requests\Activities\" />
<Folder Include="Responses\Activities\" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,30 @@
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests
{
public class BaseRequest
{
[Required, NotNull, StringLength(20, MinimumLength = 1, ErrorMessage = "Code must be between 1 to 20 characters.")]
public string Code { get; set; }
[Required, NotNull, StringLength(100, MinimumLength = 1, ErrorMessage = "Name must be between 1 to 100 characters.")]
public string Name { get; set; }
[Required, NotNull, Range(minimum: 1, maximum: 16, ErrorMessage = "Status must be between 1 and 16")]
public EnumStatus Status { get; set; }
[Required, NotNull, Range(minimum: 0, maximum: 999999, ErrorMessage = "Seq Id must be between 0 and 999999")]
public int SeqId { get; set; }
}
public class NoContentRequest
{
public int NoParameter { get; set; }
}
public class LoginRemarksRequest
{
public string AuthenticationId { get; set; }
}
}

View File

@ -0,0 +1,20 @@
using System.Collections.Generic;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Setups
{
public class AuthSummaryRequest
{
public short Status { get; set; }
}
public class AuthDetailRequest : AuthSummaryRequest
{
public string ModuleId { get; set; }
}
public class AuthUpdateRequest : AuthDetailRequest
{
public string Remarks { get; set; }
public List<int> Ids { get; set; }
}
}

View File

@ -0,0 +1,33 @@
using Microsoft.AspNetCore.Http;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Setups
{
public class FileViewRequest
{
[Required, NotNull]
public string FileName { get; set; }
}
public class FileUploadRequest : FileViewRequest
{
[Required, NotNull]
public IFormFile FileData { get; set; }
}
public class QRCodeUploadRequest : FileUploadRequest
{
[Required, NotNull]
public string EmailAddress { get; set; }
}
public class UploadDocumentRequest : FileUploadRequest
{
[Required, NotNull]
public int Id { get; set; }
[Required, NotNull]
public int DocumentOf { get; set; }
}
}

View File

@ -0,0 +1,17 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Systems;
using System.Collections.Generic;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Systems
{
public class ByGroupIdRequest
{
public int GroupId { get; set; }
}
public class GroupRequest : BaseRequest
{
public int GroupId { get; set; }
public bool ViewToAll { get; set; }
public List<PermissionBase> Permissions { get; set; }
}
}

View File

@ -0,0 +1,166 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Systems
{
public class ProdByInvTypeId
{
[Required, NotNull, Range(minimum: 1, maximum: 20, ConvertValueInInvariantCulture = true, ErrorMessage = "InventoryTypeId must be 1 to 20")]
public int InventoryTypeId { get; set; }
public string Criteria { get; set; }
}
public class ProdByInvTypeIds
{
public bool MaterialOnly { get; set; }
public List<int> InventoryTypeIds { get; set; }
public string Criteria { get; set; }
}
public class ProdStockByInvTypeIds : ProdByInvTypeIds
{
public int StoreId { get; set; }
public int StockOf { get; set; }
public bool HaveStockOnly { get; set; }
}
public class SalesTxnTypeRequest
{
public int TranType { get; set; }
public int TypeOfTran { get; set; }
}
public class ProdByInvTypeIdAndCode
{
[Required, NotNull, Range(minimum: 1, maximum: 20, ConvertValueInInvariantCulture = true, ErrorMessage = "InventoryTypeId must be 1 to 20")]
public int InventoryTypeId { get; set; }
[Required, NotNull, StringLength(20, MinimumLength = 4, ErrorMessage = "ProductCode must be between 4 to 20 characters.")]
public string ProductCode { get; set; }
}
public class LookupDataBaseRequest
{
public EnumLookupType LookupType { get; set; }
}
public class LookupDataRequest : LookupDataBaseRequest
{
public int ExcludeItemId { get; set; } = -1;
}
public class LookupDataEntryRequest
{
public List<LookupDataExt> Items { get; set; }
}
public class LookupDataByIdRequest
{
[Range(minimum: 1, maximum: int.MaxValue, ConvertValueInInvariantCulture = true, ErrorMessage = "Lookup Id is required")]
public int LookupId { get; set; }
}
public class LabelSettingByIdRequest
{
[Range(minimum: 1, maximum: int.MaxValue, ConvertValueInInvariantCulture = true, ErrorMessage = "Setting Id is required")]
public int SettingId { get; set; }
}
public class LabelSettingRequest
{
public int SettingId { get; set; }
public string Label01 { get; set; }
public int Label01Req { get; set; }
public string Label01RegExp { get; set; }
public string Label02 { get; set; }
public int Label02Req { get; set; }
public string Label02RegExp { get; set; }
public string Label03 { get; set; }
public int Label03Req { get; set; }
public string Label03RegExp { get; set; }
public string Label04 { get; set; }
public int Label04Req { get; set; }
public string Label04RegExp { get; set; }
public string Label05 { get; set; }
public int Label05Req { get; set; }
public string Label05RegExp { get; set; }
public string Label06 { get; set; }
public int Label06Req { get; set; }
public string Label06RegExp { get; set; }
public string Label07 { get; set; }
public int Label07Req { get; set; }
public string Label07RegExp { get; set; }
public string Label08 { get; set; }
public int Label08Req { get; set; }
public string Label08RegExp { get; set; }
public string Label09 { get; set; }
public int Label09Req { get; set; }
public string Label09RegExp { get; set; }
public string Label10 { get; set; }
public int Label10Req { get; set; }
public string Label10RegExp { get; set; }
public string Label11 { get; set; }
public int Label11Req { get; set; }
public string Label11RegExp { get; set; }
public string Label12 { get; set; }
public int Label12Req { get; set; }
public string Label12RegExp { get; set; }
public string Label13 { get; set; }
public int Label13Req { get; set; }
public string Label13RegExp { get; set; }
public string Label14 { get; set; }
public int Label14Req { get; set; }
public string Label14RegExp { get; set; }
public string Label15 { get; set; }
public int Label15Req { get; set; }
public string Label15RegExp { get; set; }
public string Label16 { get; set; }
public int Label16Req { get; set; }
public string Label16RegExp { get; set; }
public string Label17 { get; set; }
public int Label17Req { get; set; }
public string Label17RegExp { get; set; }
public string Label18 { get; set; }
public int Label18Req { get; set; }
public string Label18RegExp { get; set; }
public string Label19 { get; set; }
public int Label19Req { get; set; }
public string Label19RegExp { get; set; }
public string Label20 { get; set; }
public int Label20Req { get; set; }
public string Label20RegExp { get; set; }
public string Label21 { get; set; }
public int Label21Req { get; set; }
public string Label21RegExp { get; set; }
public string Label22 { get; set; }
public int Label22Req { get; set; }
public string Label22RegExp { get; set; }
public string Label23 { get; set; }
public int Label23Req { get; set; }
public string Label23RegExp { get; set; }
public string Label24 { get; set; }
public int Label24Req { get; set; }
public string Label24RegExp { get; set; }
public string Label25 { get; set; }
public int Label25Req { get; set; }
public string Label25RegExp { get; set; }
public string Label26 { get; set; }
public int Label26Req { get; set; }
public string Label26RegExp { get; set; }
public string Label27 { get; set; }
public int Label27Req { get; set; }
public string Label27RegExp { get; set; }
public string Label28 { get; set; }
public int Label28Req { get; set; }
public string Label28RegExp { get; set; }
public string Label29 { get; set; }
public int Label29Req { get; set; }
public string Label29RegExp { get; set; }
public string Label30 { get; set; }
public int Label30Req { get; set; }
public string Label30RegExp { get; set; }
}
}

View File

@ -0,0 +1,78 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Systems
{
public class ThisSystemRequest
{
[Required, NotNull, StringLength(15, MinimumLength = 1, ErrorMessage = "Code must be between 1 to 15 characters.")]
public string Code { get; set; }
[Required, NotNull, StringLength(100, MinimumLength = 1, ErrorMessage = "Name must be between 1 to 100 characters.")]
public string Name { get; set; }
[Required, NotNull, StringLength(maximumLength: 50, MinimumLength = 3, ErrorMessage = "Bangla Name must be between 5 and 50 characters.")]
public string BanglaName { get; set; }
[Required, NotNull, StringLength(maximumLength: 150, MinimumLength = 3, ErrorMessage = "Address must be between 3 and 150 characters.")]
public string Address { get; set; }
[Required, NotNull, StringLength(maximumLength: 150, MinimumLength = 3, ErrorMessage = "Bangla Address must be between 3 and 150 characters.")]
public string BanglaAddress { get; set; }
[Required, NotNull, StringLength(maximumLength: 50, MinimumLength = 7, ErrorMessage = "Phone no must be between 7 and 50 characters.")]
public string PhoneNo { get; set; }
[Required, NotNull, StringLength(maximumLength: 50, MinimumLength = 11, ErrorMessage = "Mobile no must be between 11 and 50 characters.")]
public string MobileNo { get; set; }
[NotNull, EmailAddress, StringLength(50, MinimumLength = 0, ErrorMessage = "EmailAddress be between 0 to 50 characters.")]
public string EmailAddress { get; set; }
public string Website { get; set; }
public string VatRegNo { get; set; }
[Range(minimum: 0, maximum: 100, ConvertValueInInvariantCulture = true, ErrorMessage = "VAT rate must be between 0 to 100")]
public decimal VatRate { get; set; }
public bool EnfStgPwd { get; set; }
[Range(minimum: 1, maximum: 30, ConvertValueInInvariantCulture = true, ErrorMessage = "Minimum length must be between 1 to 30")]
public short PwdMinLen { get; set; }
[Range(minimum: 1, maximum: 30, ConvertValueInInvariantCulture = true, ErrorMessage = "Maximum length must be between 1 to 30")]
public short PwdMaxLen { get; set; }
[Range(minimum: 0, maximum: 10, ConvertValueInInvariantCulture = true, ErrorMessage = "Disallowed password must be 0 to 10")]
public short DisallowLastPwds { get; set; }
[Range(minimum: 0, maximum: 365, ConvertValueInInvariantCulture = true, ErrorMessage = "Password life must be 0 to 365")]
public short ExpiryDays { get; set; }
[Range(minimum: 0, maximum: 20, ConvertValueInInvariantCulture = true, ErrorMessage = "Unsuccessful attempts must be 0 to 20")]
public short MaxTryCount { get; set; }
[Range(minimum: 0, maximum: 1440, ConvertValueInInvariantCulture = true, ErrorMessage = "Lock Time must be 0 to 1440")]
public short LockTime { get; set; }
[Required, NotNull, StringLength(maximumLength: 8, MinimumLength = 5, ErrorMessage = "Version must be 5 and 8 digits (Example: 0.0.0 or 99.99.99)")]
public string AppVersion { get; set; }
[Required, NotNull, StringLength(maximumLength: 15, MinimumLength = 5, ErrorMessage = "Comma delimited Auto Logout times (Example: 9999,9999,9999)")]
public string AutoLogoutParams { get; set; }
public string PwdReserveWords { get; set; }
public bool LoginIdCantBePassword { get; set; }
public bool PreventAttackPasswordReuse { get; set; }
public bool BatchEnabled { get; set; }
public int BmProcessId { get; set; }
public int PrProcessId { get; set; }
}
public class WOTermsRequest
{
[Required, NotNull, StringLength(maximumLength: 2000, MinimumLength = 5, ErrorMessage = "Payment Terms must be between 5 and 2000 characters.")]
public string PaymentTerms { get; set; }
[Required, NotNull, StringLength(maximumLength: 2000, MinimumLength = 5, ErrorMessage = "Terms & Conditions must be between 5 and 2000 characters.")]
public string TermsAndConditions { get; set; }
}
}

View File

@ -0,0 +1,221 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Systems
{
public class FindAccountRequest
{
[Required, NotNull, StringLength(maximumLength: 200, MinimumLength = 4, ErrorMessage = "Login Id or Email address or Mobile number must be between 4 and 100 characters.")]
public string AccountId { get; set; }
}
public class LoginRequest
{
[Required, NotNull, StringLength(maximumLength: 150, MinimumLength = 4, ErrorMessage = "Login Id must be between 4 and 30 characters.")]
public string LoginId { get; set; }
[Required, NotNull, StringLength(maximumLength: 150, MinimumLength = 1, ErrorMessage = "Password must be between 1 and 30 characters.")]
public string Password { get; set; }
public string AppId { get; set; }
[Required, NotNull, StringLength(maximumLength: 8, MinimumLength = 5, ErrorMessage = "Version must be 5 and 8 digits (Example: 0.0.0 or 99.99.99)")]
public string AppVersion { get; set; }
public bool AttendanceLogin { get; set; }
public string HostName { get; set; }
public string IpAddress { get; set; }
public string MacAddress { get; set; }
public string LoginRemarks { get; set; }
}
public class OtpValidationRequest
{
public int UserId { get; set; }
public EnumAuthenticationMethod AuthMethod { get; set; }
[Required, NotNull, StringLength(6, MinimumLength = 6, ErrorMessage = "Otp must be 6 digit number.")]
public string OtpCode { get; set; }
}
public class ByUserIdRequest
{
public int UserId { get; set; }
}
public class SendPasswordRequest
{
[Required, NotNull, StringLength(maximumLength: 300, MinimumLength = 1, ErrorMessage = "User Id is required.")]
public string UserId { get; set; }
public string MobileNo { get; set; }
public string EmailAddress { get; set; }
}
public class UserUnlockRequest : ByUserIdRequest
{
[Required, NotNull, StringLength(maximumLength: 30, MinimumLength = 1, ErrorMessage = "Login Id must be between 1 and 30 characters.")]
public string LoginId { get; set; }
}
public class ResetPasswordRequest : ByUserIdRequest
{
[Required, NotNull, StringLength(maximumLength: 30, MinimumLength = 1, ErrorMessage = "Password must be between 1 and 30 characters.")]
public string Password { get; set; }
[Required, NotNull, StringLength(maximumLength: 30, MinimumLength = 1, ErrorMessage = "Confirm Password must be between 1 and 30 characters.")]
public string ConfirmPassword { get; set; }
}
public class PasswordChangeRequest : ResetPasswordRequest
{
[Required, NotNull, StringLength(maximumLength: 30, MinimumLength = 1, ErrorMessage = "Old Password must be between 1 and 30 characters.")]
public string OldPassword { get; set; }
}
public class LogoutRequest
{
public int LogId { get; set; }
public bool AttendanceLogout { get; set; }
public string IpAddress { get; set; }
public string MacAddress { get; set; }
public string HostName { get; set; }
public string LogoutRemarks { get; set; }
}
public class UserThemeRequest
{
[Required, NotNull, StringLength(15, MinimumLength = 1, ErrorMessage = "Menu Layout must be between 1 to 15 characters.")]
public string MenuLayout { get; set; }
[Required, NotNull, StringLength(15, MinimumLength = 1, ErrorMessage = "Theme Name must be between 1 to 15 characters.")]
public string ThemeName { get; set; }
[Required, NotNull, StringLength(10, MinimumLength = 1, ErrorMessage = "Scheme Name must be between 1 to 10 characters.")]
public string SchemeName { get; set; }
}
public class UserRequestBase
{
[Required, NotNull, StringLength(30, MinimumLength = 3, ErrorMessage = "Login Id must be between 3 to 30 characters.")]
public string LoginId { get; set; }
[Required, NotNull, StringLength(75, MinimumLength = 3, ErrorMessage = "User Name must be between 3 to 75 characters.")]
public string UserName { get; set; }
[Required, NotNull, StringLength(50, MinimumLength = 0, ErrorMessage = "Designation must be between 0 to 50 characters.")]
public string Designation { get; set; }
[StringLength(15, MinimumLength = 11, ErrorMessage = "Mobile number must be 11 characters.")]
[RegularExpression(@"^[01]{2}[123456789]{1}[0-9]{8}$", ErrorMessage = "Mobile number is invalid.")]
public string MobileNo { get; set; }
[Required, NotNull, StringLength(100, MinimumLength = 5, ErrorMessage = "Email address must be between 5 to 100 characters.")]
[RegularExpression(@"^(([a-zA-Z0-9_\-\.]+)\@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)(\s*;\s*|\s*$))*$", ErrorMessage = "Email address is invalid.")]
public string EmailAddress { get; set; } = string.Empty;
public bool AuthReqAtlogin { get; set; }
public bool NeverExpire { get; set; }
public bool DbOnStartup { get; set; }
public bool DisallowMultiLogin { get; set; }
public EnumStatus Status { get; set; }
public short SeqId { get; set; }
public bool ViewToAll { get; set; }
public bool CanUseAttendanceSystem { get; set; }
public EnumAuthenticationMethod AuthMethod { get; set; }
public EnumAccessStatus AccessStatus { get; set; }
public List<int> GroupIds { get; set; }
}
public class UserRequest : UserRequestBase
{
[Required, Range(minimum: 1, maximum: int.MaxValue, ConvertValueInInvariantCulture = true, ErrorMessage = "Select valid user (1 to 99999999).")]
public int UserId { get; set; }
public string AuthKey { get; set; }
}
public class NewUserRequest : UserRequestBase
{
public int? EmployeeId { get; set; }
public string EmployeeCode { get; set; }
[Required, NotNull, StringLength(30, MinimumLength = 1, ErrorMessage = "User Name must be between 1 to 30 characters.")]
public string Password { get; set; }
}
public class UserSearchRequest : ValueStatusAndPageAndSortSearchRequest
{
public bool CheckOwner { get; set; }
}
public class ForceUserLogoutRequest
{
public List<int> UserIds { get; set; }
}
public class ByUserAttributesRequest : ByUserIdRequest
{
[Required, Range(minimum: 1, maximum: 3, ConvertValueInInvariantCulture = true, ErrorMessage = "Client type must be 1 to 3")]
public int ClientType { get; set; }
}
public class UpdateMyInfoRequest
{
[Required, Range(minimum: 1, maximum: int.MaxValue, ConvertValueInInvariantCulture = true, ErrorMessage = "Employee Id must be 1 to 2147483647")]
public int EmployeeId { get; set; }
[NotNull, StringLength(120, MinimumLength = 0, ErrorMessage = "Address be between 0 to 120 characters.")]
public string Address { get; set; }
public string ContactNo { get; set; }
}
public class UserAttributesRequest
{
[Required, Range(minimum: 1, maximum: int.MaxValue, ConvertValueInInvariantCulture = true, ErrorMessage = "Select valid user")]
public int UserId { get; set; }
[Required, Range(minimum: 1, maximum: 3, ConvertValueInInvariantCulture = true, ErrorMessage = "Client type must be 1 to 3")]
public int ClientType { get; set; }
public List<string> UkIds { get; set; }
}
public class AccessLogSearchRequest
{
public int AccessType { get; set; }
public string LoginId { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
public class ByTeamSpaceAndBasicUserRequest
{
public int TeamSpaceId { get; set; }
public int ProjectId { get; set; }
}
public class BasicUserByTeamSpaceRequest : ByTeamSpaceAndBasicUserRequest
{
public int UserId { get; set; }
}
public class BasicUserSearchRequest : BasicUserByTeamSpaceRequest
{
public bool ApplyFilter { get; set; }
}
public class UserLimitAuthorizeRequest
{
[Required, Range(minimum: 1, maximum: int.MaxValue, ConvertValueInInvariantCulture = true, ErrorMessage = "Select valid user (1 to 99999999).")]
public int UserId { get; set; }
public decimal MaxAuthorizeAmount { get; set; }
}
public class PayslipRequest
{
[Required, NotNull]
public DateTime YearMonth { get; set; }
}
}

View File

@ -0,0 +1,29 @@
namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests
{
public class ValueSearchRequest
{
public string Criteria { get; set; }
}
public class ValueAndPageSearchRequest : ValueSearchRequest
{
public int Skip { get; set; }
public int PageSize { get; set; }
}
public class ValueAndStatusSearchRequest : ValueSearchRequest
{
public short Status { get; set; }
}
public class ValueStatusAndPageSearchRequest : ValueAndPageSearchRequest
{
public short Status { get; set; }
}
public class ValueStatusAndPageAndSortSearchRequest : ValueStatusAndPageSearchRequest
{
public string SortField { get; set; }
public string SortOrder { get; set; }
}
}

View File

@ -0,0 +1,53 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Global;
using OnlineSalesAutoCrop.CoreAPI.Models.Objects;
using System.Collections;
using System.Collections.Generic;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Responses
{
public abstract class ResponseBase
{
public int ReturnStatus { get; set; }
public List<string> ReturnMessage { get; set; } = [];
}
public abstract class TotalRowsResponseBase : ResponseBase
{
public int TotalRows { get; set; }
}
public abstract class ResponseBase1 : ResponseBase
{
public Hashtable ValidationErrors { get; set; } = [];
}
public abstract class BaseObjectResponse : ResponseBase
{
public string Code { get; set; }
public string Name { get; set; }
public EnumStatus Status { get; set; }
public int SeqId { get; set; }
public string StatusDetail => Status.GetDescription();
}
public class BooleanResponse : ResponseBase
{
public bool Value { get; set; }
}
public class StringResponse : ResponseBase
{
public string Value { get; set; }
}
public class IntResponse : ResponseBase
{
public int Value { get; set; }
}
public class KeywordsFromAudioResponse : ResponseBase
{
public List<FoundKeywordItem> FoundKeywords { get; set; }
}
}

View File

@ -0,0 +1,23 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups;
using System.Collections.Generic;
using System.Linq;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Responses.Setups
{
public class AuthSummariesResponse : ResponseBase
{
public List<AuthModule> Value { get; set; } = [];
}
public class PendingAuthResponse : ResponseBase
{
public List<PendingAuthModule> Value { get; set; } = [];
public bool HasBoth => Value.Any(x => x.PendingAuthItems > 0 && x.PendingItems > 0);
}
public class AuthDetailsResponse : ResponseBase
{
public List<DynamicColumn> Columns { get; set; } = [];
public List<Dictionary<string, object>> Data { get; set; } = [];
}
}

View File

@ -0,0 +1,17 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Systems;
using System.Collections.Generic;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Responses.Systems
{
public class GroupSearchResponse : ResponseBase
{
public List<GroupBase> Value { get; set; } = [];
}
public class GroupByIdResponse : BaseObjectResponse
{
public int GroupId { get; set; }
public bool ViewToAll { get; set; }
public List<PermissionBase> Value { get; set; } = [];
}
}

View File

@ -0,0 +1,139 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups;
using System.Collections.Generic;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Responses.Systems
{
public class LabelSettingResponse : ResponseBase
{
public string Label01 { get; set; }
public int Label01Req { get; set; }
public string Label01RegExp { get; set; }
public string Label02 { get; set; }
public int Label02Req { get; set; }
public string Label02RegExp { get; set; }
public string Label03 { get; set; }
public int Label03Req { get; set; }
public string Label03RegExp { get; set; }
public string Label04 { get; set; }
public int Label04Req { get; set; }
public string Label04RegExp { get; set; }
public string Label05 { get; set; }
public int Label05Req { get; set; }
public string Label05RegExp { get; set; }
public string Label06 { get; set; }
public int Label06Req { get; set; }
public string Label06RegExp { get; set; }
public string Label07 { get; set; }
public int Label07Req { get; set; }
public string Label07RegExp { get; set; }
public string Label08 { get; set; }
public int Label08Req { get; set; }
public string Label08RegExp { get; set; }
public string Label09 { get; set; }
public int Label09Req { get; set; }
public string Label09RegExp { get; set; }
public string Label10 { get; set; }
public int Label10Req { get; set; }
public string Label10RegExp { get; set; }
public string Label11 { get; set; }
public int Label11Req { get; set; }
public string Label11RegExp { get; set; }
public string Label12 { get; set; }
public int Label12Req { get; set; }
public string Label12RegExp { get; set; }
public string Label13 { get; set; }
public int Label13Req { get; set; }
public string Label13RegExp { get; set; }
public string Label14 { get; set; }
public int Label14Req { get; set; }
public string Label14RegExp { get; set; }
public string Label15 { get; set; }
public int Label15Req { get; set; }
public string Label15RegExp { get; set; }
public string Label16 { get; set; }
public int Label16Req { get; set; }
public string Label16RegExp { get; set; }
public string Label17 { get; set; }
public int Label17Req { get; set; }
public string Label17RegExp { get; set; }
public string Label18 { get; set; }
public int Label18Req { get; set; }
public string Label18RegExp { get; set; }
public string Label19 { get; set; }
public int Label19Req { get; set; }
public string Label19RegExp { get; set; }
public string Label20 { get; set; }
public int Label20Req { get; set; }
public string Label20RegExp { get; set; }
public string Label21 { get; set; }
public int Label21Req { get; set; }
public string Label21RegExp { get; set; }
public string Label22 { get; set; }
public int Label22Req { get; set; }
public string Label22RegExp { get; set; }
public string Label23 { get; set; }
public int Label23Req { get; set; }
public string Label23RegExp { get; set; }
public string Label24 { get; set; }
public int Label24Req { get; set; }
public string Label24RegExp { get; set; }
public string Label25 { get; set; }
public int Label25Req { get; set; }
public string Label25RegExp { get; set; }
public string Label26 { get; set; }
public int Label26Req { get; set; }
public string Label26RegExp { get; set; }
public string Label27 { get; set; }
public int Label27Req { get; set; }
public string Label27RegExp { get; set; }
public string Label28 { get; set; }
public int Label28Req { get; set; }
public string Label28RegExp { get; set; }
public string Label29 { get; set; }
public int Label29Req { get; set; }
public string Label29RegExp { get; set; }
public string Label30 { get; set; }
public int Label30Req { get; set; }
public string Label30RegExp { get; set; }
public bool HasAuthProcess { get; set; }
}
public class LookupDataResponse : ResponseBase
{
public List<LookupData> Value { get; set; } = [];
}
public class LookupDataExtResponse : ResponseBase
{
public List<LookupDataExt> Value { get; set; }
}
public class ProdByInvTypeResponse : ResponseBase
{
public List<ProdByInvType> Value { get; set; } = [];
}
public class ProdByInvTypeExtResponse : ResponseBase
{
public List<ProdByInvTypeExt> Value { get; set; } = [];
}
public class SalesTxnTypeResponse : ResponseBase
{
public List<SalesTxnType> Value { get; set; }
}
public class ProdByInvTypeAndCodeResponse : ResponseBase
{
public int ProductId { get; set; }
public string ProductCode { get; set; }
public string ProductName { get; set; }
public int InventoryTypeId { get; set; }
public string AstOrGLCode { get; set; }
public string ExpOrDepGLCode { get; set; }
public string InventoryType { get; set; }
public decimal Price { get; set; }
public decimal VatRate { get; set; }
public decimal AitRate { get; set; }
}
}

View File

@ -0,0 +1,42 @@
namespace OnlineSalesAutoCrop.CoreAPI.Models.Responses.Systems
{
public class ThisSystemResponse : ResponseBase
{
public int ThisSystemId { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public string BanglaName { get; set; }
public string Address { get; set; }
public string BanglaAddress { get; set; }
public string PhoneNo { get; set; }
public string MobileNo { get; set; }
public string EmailAddress { get; set; }
public string Website { get; set; }
public string VatRegNo { get; set; }
public decimal VatRate { get; set; }
public bool EnfStgPwd { get; set; }
public short PwdMinLen { get; set; }
public short PwdMaxLen { get; set; }
public short DisallowLastPwds { get; set; }
public short ExpiryDays { get; set; }
public short MaxTryCount { get; set; }
public short LockTime { get; set; }
public string AppVersion { get; set; }
public string AutoLogoutParams { get; set; }
public string PwdReserveWords { get; set; }
public bool LoginIdCantBePassword { get; set; }
public bool PreventAttackPasswordReuse { get; set; }
public bool BatchEnabled { get; set; }
public int BmProcessId { get; set; }
public int PrProcessId { get; set; }
public bool CanEditBatch { get; set; }
public bool CanEditPRProcess { get; set; }
}
public class WOTermsResponse : ResponseBase
{
public int ItemId { get; set; }
public string PaymentTerms { get; set; }
public string TermsAndConditions { get; set; }
}
}

View File

@ -0,0 +1,163 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Systems;
using System;
using System.Collections.Generic;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Responses.Systems
{
public class FindAccountResponse : BooleanResponse
{
public int UserId { get; set; }
public string PhoneNo { get; set; }
public string EmailAddress { get; set; }
public string PhoneNoMasked { get; set; }
public string EmailAddressMasked { get; set; }
}
public class LoginResponse : ResponseBase1
{
public int Id { get; private set; }
public EnumLoginStatus LoginStatus { get; set; }
public string LoginId { get; set; }
public string UserName { get; set; }
public bool ValidUser { get; set; }
public bool AuthRequiredAtLogin { get; set; }
public EnumAuthenticationMethod AuthMethod { get; set; }
public string AuthenticationToken { get; set; }
public bool PwdChangeRequired { get; set; }
public DateTime? Expires { get; set; }
public DateTime SystemDate { get; set; }
public string LoginTime { get; set; }
public int LogId { get; set; }
public DateTime? LogoutTime { get; private set; }
public string MenuLayout { get; set; }
public string ThemeName { get; set; }
public string SchemeName { get; set; }
public bool DbOnStartup { get; set; }
public bool ViewOwnTaskOnly { get; private set; }
public int? EmployeeId { get; private set; }
public int NotificationCount { get; private set; }
public int IdleTime { get; set; }
public int PingTime { get; set; }
public int TimeoutTime { get; set; }
public bool BatchEnabled { get; private set; }
public int BmProcessId { get; private set; }
public int PrProcessId { get; private set; }
public string IdsValue { get; set; }
//public List<string> ModuleIds { get; set; } = [];
public void Map(User source)
{
Id = source.Id;
LogId = source.LogId;
LoginId = source.LoginId;
IdleTime = source.IdleTime;
UserName = source.UserName;
PingTime = source.PingTime;
ThemeName = source.ThemeName;
//ModuleIds = source.ModuleIds;
LogoutTime = source.LogoutTime;
SchemeName = source.SchemeName;
AuthMethod = source.AuthMethod;
MenuLayout = source.MenuLayout;
SystemDate = source.SystemDate;
EmployeeId = source.EmployeeId;
LoginStatus = source.LoginStatus;
DbOnStartup = source.DbOnStartup;
TimeoutTime = source.TimeoutTime;
BmProcessId = source.BmProcessId;
PrProcessId = source.PrProcessId;
BatchEnabled = source.BatchEnabled;
ViewOwnTaskOnly = source.ViewOwnTaskOnly;
NotificationCount = source.NotificationCount;
AuthRequiredAtLogin = source.AuthRequiredAtLogin;
IdsValue = Newtonsoft.Json.JsonConvert.SerializeObject(source.ModuleIds);
}
}
public class MenuResponse
{
public MenuItem Item { get; set; }
}
public class UserProfileBase : ResponseBase
{
public int UserId { get; set; }
public string LoginId { get; set; }
public string EmployeeCode { get; set; }
public string UserName { get; set; }
public string Designation { get; set; }
public string MobileNo { get; set; }
public string EmailAddress { get; set; }
}
public class UserGetResponse : UserProfileBase
{
public bool IsLocked { get; set; }
public bool NeverExpire { get; set; }
public EnumStatus Status { get; set; }
public short SeqId { get; set; }
public bool CanUseAttendanceSystem { get; set; }
public bool ViewToAll { get; set; }
public bool AuthRequiredAtLogin { get; set; }
public EnumAuthenticationMethod AuthMethod { get; set; }
public EnumAccessStatus AccessStatus { get; set; }
public bool DbOnStartup { get; set; }
public bool DisallowMultiLogin { get; set; }
public List<int> GroupIds { get; set; } = [];
}
public class UserProfileResponse : UserProfileBase
{
public bool HasAIApiKey { get; set; }
public bool HasPayslipPath { get; set; }
public string Address { get; set; }
public string ContactNo { get; set; }
public DateTime? NextPwdDate { get; set; }
public DateTime? PwdLastChangedTime { get; set; }
public List<LoginHistory> LoginHistories { get; set; }
}
public class DashboardDataResponse : ResponseBase
{
public List<DashboardItem> GroupData { get; set; } = [];
public Dashboard2Data Group1Data { get; set; }
public Dashboard2Data Group2Data { get; set; }
public Dashboard2Data Group3Data { get; set; }
public Dashboard2Data Group4Data { get; set; }
}
public class UserSearchResponse : TotalRowsResponseBase
{
public List<UserSearch> Value { get; set; } = [];
}
public class UserForceLogoutResponse : ResponseBase
{
public List<UserForceLogout> Value { get; set; } = [];
}
public class UserAttributesResponse : ResponseBase
{
public int UserId { get; set; }
public string LoginId { get; set; }
public List<string> UkIds { get; set; }
public bool HasSetup { get; set; }
}
public class AccessLogResponse : ResponseBase
{
public List<AccessLog> Value { get; set; }
}
public class UserBasicInfoResponse : ResponseBase
{
public List<UserBasicInfo> Value { get; set; } = [];
}
public class UserAuthorizeLimitResponse : ResponseBase
{
public string LoginId { get; set; }
public decimal Value { get; set; }
}
}

View File

@ -0,0 +1,14 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Setups;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Setups
{
public interface IAuthModulesService
{
Task<bool> UpdateAuthStatusAsync(string moduleId, string ipAddress, string remarks, short status, int userId, string loginId, string ids);
Task<PendingAuthResponse> GetPendingAuthsAsync(int userId);
Task<AuthDetailsResponse> GetAuthDetailsAsync(string moduleId, short status);
Task<AuthSummariesResponse> GetAuthSummariesAsync(int userId, short status, int entryModule);
}
}

View File

@ -0,0 +1,29 @@
using OnlineSalesAutoCrop.CoreAPI.Models;
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.Systems;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Systems;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Systems
{
public interface IParamTypeService
{
Task<LabelSettingResponse> GetLabelSettingAsync(int settingId);
Task<BooleanResponse> SaveLabelSettingAsync(LabelSettingRequest request);
Task<bool> DeleteLookupDataAsync(int lookupId, int deletedBy);
Task<LookupDataExtResponse> GetLookupDataExtAsync(EnumLookupType lookupType);
Task<bool> SaveLookupDataAsync(List<LookupDataExt> items, string ipAddress, int userId);
Task<LookupDataResponse> GetLookupDataAsync(EnumLookupType lookupType, int excludeItemId);
Task<SalesTxnTypeResponse> GetSalesTxnTypesAsync(int txnType, int typeOfTran);
Task<ProdByInvTypeResponse> GetFASparePartsAsync(string criteria);
Task<ProdByInvTypeResponse> GetProductsAsync(int inventoryTypeId, string criteria);
Task<ProdByInvTypeAndCodeResponse> GetProductByCodeAsync(int inventoryTypeId, string productCode);
Task<ProdByInvTypeResponse> GetProductsExtAsync(List<int> inventoryTypeIds, bool materialOnly, string criteria);
Task<ProdByInvTypeExtResponse> GetProductsStockAsync(int storeId, int stockOf, bool stockOnly, List<int> inventoryTypeIds, bool materialOnly, string criteria);
}
}

View File

@ -0,0 +1,15 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.Systems;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Systems;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Systems
{
public interface IThisSystemService
{
Task<bool> SaveAsync(ThisSystemRequest request, string ipAddress, int modifiedBy);
Task<bool> SaveWOTermsAsync(WOTermsRequest request, string ipAddress, int savedBy);
Task<ThisSystemResponse> GetAsync();
Task<WOTermsResponse> GetWOTermsAsync();
}
}

View File

@ -0,0 +1,51 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups;
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Systems;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.Systems;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Systems;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Systems
{
public interface IUserService
{
Task<bool> ValidateAuthValueAsync(string authValue, int userId);
Task<User> LoginAsync(LoginRequest request, string ipAddress, bool checkPwd);
Task<bool> LogoutAsync(string ipAddress, int userId, int logId, bool attendanceLogout, string loginId, string localIp, string macAddress, string hostName, string logoutRemarks);
Task<bool> DeleteUserAsync(int userId, int deletedBy);
Task<bool> ForceLogoutNowAsync(List<int> userIds, string ipAddress);
Task<bool> UnlockUserAsync(int userId, string loginId, int unlockedBy);
Task<bool> DeleteAttributesAsync(int userId, int clientType, int deletedBy);
Task<bool> EditUserAsync(UserRequest user, string ipAddress, int modifiedBy);
Task<bool> AddUserAsync(NewUserRequest user, string ipAddress, int createdBy);
Task<bool> UpdateMyInfoAsync(string address, string contactNo, int modifiedBy, int emplyeeId);
Task<bool> ResetPasswordAsync(int userId, string newPassword, string ipAddress, int changedBy);
Task<bool> UpdateMyThemeAsync(int userId, string menuLayout, string themeName, string schemeName);
Task<bool> SaveAuthorizeLimitAsync(decimal maxAuthLimit, int userId, string ipAddress, string savedBy);
Task<bool> UploadDocumentAsync(int userId, int id, int documentOf, string orgFileName, string fileName);
Task<bool> ChangePasswordAsync(int userId, string oldPassword, string newPassword, string ipAddress, int changedBy);
Task<bool> SaveAttributesAsync(int userId, int clientType, string ipAddress, int attributeSetBy, List<string> ukIds);
Task<UserGetResponse> GetUserAsync(int userId);
Task<MenuResponse> GetUserPermissionsAsync(int userId);
Task<UserProfileResponse> GetUserProfileAsync(int userId);
Task<FindAccountResponse> FindAccountAsync(string accountId);
Task<UserAuthorizeLimitResponse> GetAuthorizeLimitAsync(int userId);
Task<UserAttributesResponse> GetAttributesAsync(int userId, int clientType);
Task<DashboardDataResponse> GetDashboardData(int userId, bool canViewLeave, bool canViewLate, bool canViewClientVisit, bool canViewHomeOffice, bool viewAll);
Task<int> LoadNotificationCountAsync(int userId);
Task<UserBasicInfoResponse> GetAttendanceUsersAsync(int userId);
Task<UserForceLogoutResponse> GetForceLogoutUsersAsync(int createdBy);
Task<UserSearchResponse> GetUsersAsync(UserSearchRequest request, int userId);
Task<bool> SendPasswordAsync(int userId, string newPassword, string ipAddress);
Task<UserBasicInfoResponse> GetUsersByTeamSpaceAsync(string teamSpaceIds, int projectId, int userId);
Task<UserBasicInfoResponse> GetUsersBasicAsync(bool applyFilter, string teamSpaceIds, int projectId);
Task<AccessLogResponse> GetAccessLogAsync(int accessType, string loginId, DateTime startDate, DateTime endDate);
}
}

View File

@ -0,0 +1,132 @@
using Microsoft.Data.SqlClient;
using System;
namespace OnlineSalesAutoCrop.CoreAPI.Services
{
internal static class DBCustomError
{
internal static Exception GenerateCustomError(Exception e)
{
Exception customError;
if (e is SqlException)
{
SqlException se = e as SqlException;
if (se.Number == -1 || se.Number == 2 || se.Number == 53 || se.Number == 10060)
{
customError = new Exception("SQL Server/Database is invalid (ERR-0001).", e);
}
else if (se.Number == -2)
{
customError = new Exception(se.InnerException != null ? se.InnerException.Message : "Server is too busy to respond (ERR-0002).", e);
}
else if (se.Number == 207)
{
int startIdx = se.Message.IndexOf("'");
if (startIdx > 0)
{
int endIdx = se.Message.IndexOf("'", startIdx + 1);
if (endIdx > startIdx && endIdx > 0)
{
string fldName = se.Message.Substring(startIdx + 1, (endIdx - startIdx - 1));
customError = new Exception($"Column name ({fldName}) in the Table is invalid (ERR-0003).", e);
}
else
{
customError = new Exception("Column name in the Table is invalid (ERR-0004).", e);
}
}
else
{
customError = new Exception("Column name in the Table is invalid (ERR-0005).", e);
}
}
else if (se.Number == 1205)
{
customError = new Exception("Server is too busy to process your request (ERR-0006).", e);
}
else if (se.Number == 547)
{
int startIdx = e.Message.IndexOf("conflicted with the FOREIGN KEY constraint \"");
if (startIdx >= 0)
{
startIdx = e.Message.IndexOf(value: ", table \"");
startIdx += 13;
int endIdx = e.Message.IndexOf(value: '"', startIndex: startIdx);
if (endIdx >= 0)
{
string tableName = e.Message[startIdx..endIdx];
customError = new Exception($"Foreign key constraint violation occurred in Table [<b>{tableName}</b>] (ERR-0006).", e);
}
else
{
customError = new Exception("Foreign key constraint violation occurred (ERR-0007).", e);
}
}
else
{
customError = new Exception("Can not <b>Delete</b> data because it is already used as reference (ERR-0008).", e);
}
}
else if (se.Number == 2601 || se.Number == 2627)
{
int startIdx = e.Message.IndexOf("The duplicate key value is (");
if (startIdx >= 0)
{
string fldName = string.Empty;
int stIdx = e.Message.IndexOf("with unique index '");
stIdx += 19;
int endIdx = e.Message.IndexOf("'", stIdx);
if (endIdx > 0 && stIdx > 0)
{
fldName = e.Message[stIdx..endIdx];
stIdx = fldName.IndexOf(value: '_');
if (stIdx >= 0)
{
fldName = fldName[(stIdx + 1)..];
string[] tokens = fldName.Split('_');
if (tokens.Length >= 2)
{
fldName = $" Table [<b>{tokens[0]}</b>] and Field [<b>{tokens[1]}</b>]";
}
}
}
startIdx += 28;
endIdx = e.Message.IndexOf(value: ")", startIdx);
if (endIdx >= 0)
{
string value = e.Message[startIdx..endIdx];
customError = new Exception($"Value [<b>{value}</b>] is already exist in {fldName} (ERR-0009).", e);
}
else
{
customError = new Exception("Value can not be duplicate in the system (ERR-0010).", e);
}
}
else
{
customError = new Exception("Value can not be duplicate in the system (ERR-0011).", e);
}
}
else
{
customError = new Exception(se.Message, e);
}
}
else
{
if (e.Message.Contains("The UPDATE statement conflicted with the CHECK constraint", StringComparison.CurrentCulture) ||
e.Message.Contains("The INSERT statement conflicted with the CHECK constraint", StringComparison.CurrentCulture))
{
customError = new Exception("Cannot continue now, Please try again later (ERR-1000).", e);
}
else
{
customError = new Exception(e.Message, e);
}
}
return customError;
}
}
}

View File

@ -0,0 +1,10 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Major Code Smell", "S6966:Awaitable method should be used", Justification = "<Pending>", Scope = "member", Target = "~M:OnlineSalesAutoCrop.CoreAPI.Services.Services.Setups.ExternalProductService.GetExternalProductAsync(System.Int32)~System.Threading.Tasks.Task{OnlineSalesAutoCrop.CoreAPI.Models.Responses.Setups.ExternalProductByIdResponse}")]
[assembly: SuppressMessage("Major Code Smell", "S6966:Awaitable method should be used", Justification = "<Pending>", Scope = "member", Target = "~M:OnlineSalesAutoCrop.CoreAPI.Services.Services.Activities.FATranService.AddFATranAsync(OnlineSalesAutoCrop.CoreAPI.Models.Requests.Activities.FaTranRequest,System.String,System.Int32)~System.Threading.Tasks.Task{OnlineSalesAutoCrop.CoreAPI.Models.Responses.BooleanResponse}")]
[assembly: SuppressMessage("Major Code Smell", "S6966:Awaitable method should be used", Justification = "<Pending>", Scope = "member", Target = "~M:OnlineSalesAutoCrop.CoreAPI.Services.Services.Setups.ExternalProductService.GetExternalProductsBasicAsync(System.Nullable{System.Int32},System.Int32,System.Int16,System.String,System.Boolean,System.Boolean,System.Boolean)~System.Threading.Tasks.Task{OnlineSalesAutoCrop.CoreAPI.Models.Responses.Setups.BasicExternalProductsResponse}")]

View File

@ -0,0 +1,113 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Globals">
<SccProjectName></SccProjectName>
<SccProvider></SccProvider>
<SccAuxPath></SccAuxPath>
<SccLocalPath></SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Authors>S M Russel</Authors>
<Company>Computer Ease Limited</Company>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Properties\**" />
<Compile Remove="Services\B2B\**" />
<Compile Remove="Services\Claim\**" />
<Compile Remove="Services\DailyTask\**" />
<Compile Remove="Services\DFFIncentive\**" />
<Compile Remove="Services\DMSDayEnd\**" />
<Compile Remove="Services\DMS\**" />
<Compile Remove="Services\Employees\**" />
<Compile Remove="Services\Global\**" />
<Compile Remove="Services\Markets\**" />
<Compile Remove="Services\MasRapida\**" />
<Compile Remove="Services\Misc\**" />
<Compile Remove="Services\obj\**" />
<Compile Remove="Services\Outlets\**" />
<Compile Remove="Services\Payments\**" />
<Compile Remove="Services\Setups\**" />
<Compile Remove="Services\Properties\**" />
<Compile Remove="Services\ROI\**" />
<Compile Remove="Services\Sales\**" />
<Compile Remove="Services\Targets\**" />
<Compile Remove="Services\UniSetup\**" />
<Compile Remove="Services\Workflow\**" />
<EmbeddedResource Remove="Properties\**" />
<EmbeddedResource Remove="Services\B2B\**" />
<EmbeddedResource Remove="Services\Claim\**" />
<EmbeddedResource Remove="Services\DailyTask\**" />
<EmbeddedResource Remove="Services\DFFIncentive\**" />
<EmbeddedResource Remove="Services\DMSDayEnd\**" />
<EmbeddedResource Remove="Services\DMS\**" />
<EmbeddedResource Remove="Services\Employees\**" />
<EmbeddedResource Remove="Services\Global\**" />
<EmbeddedResource Remove="Services\Markets\**" />
<EmbeddedResource Remove="Services\MasRapida\**" />
<EmbeddedResource Remove="Services\Misc\**" />
<EmbeddedResource Remove="Services\obj\**" />
<EmbeddedResource Remove="Services\Outlets\**" />
<EmbeddedResource Remove="Services\Payments\**" />
<EmbeddedResource Remove="Services\Setups\**" />
<EmbeddedResource Remove="Services\Properties\**" />
<EmbeddedResource Remove="Services\ROI\**" />
<EmbeddedResource Remove="Services\Sales\**" />
<EmbeddedResource Remove="Services\Targets\**" />
<EmbeddedResource Remove="Services\UniSetup\**" />
<EmbeddedResource Remove="Services\Workflow\**" />
<None Remove="Properties\**" />
<None Remove="Services\B2B\**" />
<None Remove="Services\Claim\**" />
<None Remove="Services\DailyTask\**" />
<None Remove="Services\DFFIncentive\**" />
<None Remove="Services\DMSDayEnd\**" />
<None Remove="Services\DMS\**" />
<None Remove="Services\Employees\**" />
<None Remove="Services\Global\**" />
<None Remove="Services\Markets\**" />
<None Remove="Services\MasRapida\**" />
<None Remove="Services\Misc\**" />
<None Remove="Services\obj\**" />
<None Remove="Services\Outlets\**" />
<None Remove="Services\Payments\**" />
<None Remove="Services\Setups\**" />
<None Remove="Services\Properties\**" />
<None Remove="Services\ROI\**" />
<None Remove="Services\Sales\**" />
<None Remove="Services\Targets\**" />
<None Remove="Services\UniSetup\**" />
<None Remove="Services\Workflow\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Services\Systems\AuditService.cs" />
<Compile Remove="Services\Systems\B2BThisSystemService.cs" />
<Compile Remove="Services\Systems\CacheInfoService.cs" />
<Compile Remove="Services\Systems\FFAuthenticationService.cs" />
<Compile Remove="Services\Systems\FFAuthorizationService.cs" />
</ItemGroup>
<ItemGroup>
<Compile Include="Services\Setups\AuthModulesService.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Ease.NetCore" Version="2.1.4" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.1" />
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.8" />
<PackageReference Include="System.Data.SqlClient" Version="4.9.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OnlineSalesAutoCrop.CoreAPI.Models\OnlineSalesAutoCrop.CoreAPI.Models.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="Contracts\Activities\" />
<Folder Include="Services\Activities\" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,249 @@
using Ease.NetCore.DataAccess;
using Ease.NetCore.DataAccess.SQL;
using OnlineSalesAutoCrop.CoreAPI.Models.Global;
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Setups;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Setups;
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Setups;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Services.Services.Setups
{
/// <summary>
///
/// </summary>
/// <param name="settings"></param>
public class AuthModulesService(IOptions<AppSettings> settings) : IAuthModulesService
{
private readonly AppSettings _settings = settings?.Value;
/// <summary>
///
/// </summary>
/// <param name="userId"></param>
/// <param name="status"></param>
/// <param name="entryModule"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public async Task<AuthSummariesResponse> GetAuthSummariesAsync(int userId, short status, int entryModule)
{
AuthSummariesResponse response = new() { Value = [] };
try
{
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode);
try
{
SqlParameter[] p =
[
SqlHelperExtension.CreateInParam(pName: "@UserId", pType: SqlDbType.Int, pValue: userId),
SqlHelperExtension.CreateInParam(pName: "@Status", pType: SqlDbType.Int, pValue: status),
];
using (IDataReader dr = tc.ExecuteReaderSp(spName: "dbo.GetAuthPendingData", parameterValues: p))
{
while (dr.Read())
{
AuthModule item = new()
{
ModuleName = dr.GetString(0),
ModuleId = dr.GetString(1),
PendingItems = dr.GetInt32(2)
};
response.Value.Add(item);
}
dr.Close();
}
tc.End();
}
catch (Exception ie)
{
tc?.HandleError();
throw DBCustomError.GenerateCustomError(ie);
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return response;
}
/// <summary>
///
/// </summary>
/// <param name="moduleId"></param>
/// <param name="status"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public async Task<AuthDetailsResponse> GetAuthDetailsAsync(string moduleId, short status)
{
AuthDetailsResponse response = new() { Columns = [], Data = [] };
try
{
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode);
try
{
SqlParameter[] p =
[
SqlHelperExtension.CreateInParam(pName: "@ModuleId", pType: SqlDbType.VarChar, pValue: moduleId, size: 25),
SqlHelperExtension.CreateInParam(pName: "@Status", pType: SqlDbType.Int, pValue: status)
];
using (IDataReader dr = tc.ExecuteReaderSp(spName: "dbo.GetAuthProcessDetail", parameterValues: p))
{
//Read Columns
for (int fldIdx = 0; fldIdx < dr.FieldCount; fldIdx++)
{
string[] fldParam = dr.GetName(fldIdx).Split('~');
DynamicColumn column = new()
{
Field = fldParam[0],
Title = fldParam[1],
Width = Convert.ToInt32(fldParam[2])
};
response.Columns.Add(column);
}
//Read Data
while (dr.Read())
{
Dictionary<string, object> row = [];
for (int fldIdx = 0; fldIdx < dr.FieldCount; fldIdx++)
{
object value = dr.IsDBNull(fldIdx) ? default : dr[fldIdx];
string key = response.Columns[fldIdx].Field;
row[key] = value;
}
response.Data.Add(row);
}
dr.Close();
}
tc.End();
}
catch (Exception ie)
{
tc?.HandleError();
throw DBCustomError.GenerateCustomError(ie);
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return response;
}
/// <summary>
///
/// </summary>
/// <param name="moduleId"></param>
/// <param name="ipAddress"></param>
/// <param name="remarks"></param>
/// <param name="status"></param>
/// <param name="userId"></param>
/// <param name="loginId"></param>
/// <param name="ids"></param>
/// <returns></returns>
/// <exception cref="InvalidOperationException"></exception>
public async Task<bool> UpdateAuthStatusAsync(string moduleId, string ipAddress, string remarks, short status, int userId, string loginId, string ids)
{
bool returnValue;
try
{
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode, true);
try
{
SqlParameter[] p =
[
SqlHelperExtension.CreateInParam(pName: "@ModuleId", pType: SqlDbType.VarChar, pValue: moduleId, size: 25),
SqlHelperExtension.CreateInParam(pName: "@IpAddress", pType: SqlDbType.VarChar, pValue: ipAddress, size: 20),
SqlHelperExtension.CreateInParam(pName: "@Remarks", pType: SqlDbType.VarChar, pValue: remarks, size: 50),
SqlHelperExtension.CreateInParam(pName: "@Status", pType: SqlDbType.SmallInt, pValue: status),
SqlHelperExtension.CreateInParam(pName: "@UserId", pType: SqlDbType.Int, pValue: userId),
SqlHelperExtension.CreateInParam(pName: "@LoginId", pType: SqlDbType.VarChar, pValue: loginId, size: 40),
SqlHelperExtension.CreateInParam(pName: "@Ids", pType: SqlDbType.VarChar, pValue: ids, size: 7500),
];
_ = tc.ExecuteNonQuerySp(spName: "dbo.UpdateAuthStatus", parameterValues: p);
tc.End();
returnValue = true;
}
catch (Exception ie)
{
tc?.HandleError();
throw DBCustomError.GenerateCustomError(ie);
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return returnValue;
}
/// <summary>
///
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
/// <exception cref="InvalidOperationException"></exception>
public async Task<PendingAuthResponse> GetPendingAuthsAsync(int userId)
{
PendingAuthResponse response = new() { Value = [] };
try
{
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode);
try
{
SqlParameter[] p = [SqlHelperExtension.CreateInParam(pName: "@UserId", pType: SqlDbType.Int, pValue: userId)];
using (IDataReader dr = tc.ExecuteReaderSp(spName: "dbo.GetPendingAuths", parameterValues: p))
{
while (dr.Read())
{
PendingAuthModule item = new()
{
ModuleId = dr.GetString(0),
ModuleName = dr.GetString(1),
ModuleHref = dr.GetString(2),
BasicData = dr.GetInt16(3) != 0,
PendingAuthItems = dr.GetInt32(4),
PendingItems = dr.GetInt32(5)
};
response.Value.Add(item);
}
dr.Close();
}
tc.End();
}
catch (Exception ie)
{
tc?.HandleError();
throw DBCustomError.GenerateCustomError(ie);
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return response;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,267 @@
using Ease.NetCore.DataAccess;
using Ease.NetCore.DataAccess.SQL;
using OnlineSalesAutoCrop.CoreAPI.Models.Global;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.Systems;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Systems;
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Systems;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Options;
using System;
using System.Data;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Services.Services.Systems
{
/// <summary>
///
/// </summary>
/// <param name="settings"></param>
public class ThisSystemService(IOptions<AppSettings> settings) : IThisSystemService
{
private readonly AppSettings _settings = settings?.Value;
/// <summary>
///
/// </summary>
/// <returns></returns>
public async Task<ThisSystemResponse> GetAsync()
{
ThisSystemResponse response = new() { ReturnStatus = 200, CanEditBatch = true };
try
{
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode);
try
{
bool canEditBatch = true, canEditPRProcess = true;
using (IDataReader dr = tc.ExecuteReader("IF EXISTS(SELECT TranID FROM Sales.SalesStockTrans WHERE AuthorisedTime IS NOT NULL AND AuthorisedLoginId IS NOT NULL) SELECT 'D' ELSE SELECT 'E'"))
{
if (dr.Read())
{
canEditBatch = dr.GetString(0) == "E";
}
dr.Close();
}
using (IDataReader dr = tc.ExecuteReader("IF EXISTS(SELECT PaymentId FROM Sales.SalesPayments WHERE AuthorizedTime IS NOT NULL AND AuthorizedBy IS NOT NULL) SELECT 'D' ELSE SELECT 'E'"))
{
if (dr.Read())
{
canEditPRProcess = dr.GetString(0) == "E";
}
dr.Close();
}
using (IDataReader dr = tc.ExecuteReader("SELECT SystemID, Code, Name, NameInBangla, Address, AddressInBangla, PhoneNo, MobileNo,"
+ " EmailAddress, WebAddress, VATRegNo, VATRate, PrvntAtckPwdReuse, EnfStgPwd, PwdMinLen, PwdMaxLen, DALastPwds, ExpiryDays,"
+ " MaxTryCount, LockTime, AppVersion, AutoLogoutParams, PwdRsvdWords, LoginIdCantPwd, BatchEnabled, BmProcessId, PrProcessId"
+ " FROM ThisSystem"))
{
if (dr.Read())
{
response = new ThisSystemResponse
{
CanEditBatch = canEditBatch,
CanEditPRProcess = canEditPRProcess,
ThisSystemId = dr.GetInt32(0),
Code = dr.GetString(1),
Name = dr.GetString(2),
BanglaName = dr.GetString(3),
Address = dr.GetString(4),
BanglaAddress = dr.GetString(5),
PhoneNo = dr.GetString(6),
MobileNo = dr.GetString(7),
EmailAddress = dr.GetString(8),
Website = dr.GetString(9),
VatRegNo = dr.GetString(10),
VatRate = dr.GetDecimal(11),
PreventAttackPasswordReuse = !dr.IsDBNull(12) && dr.GetInt16(12) != 0,
EnfStgPwd = dr.GetInt16(13) != 0,
PwdMinLen = dr.GetInt16(14),
PwdMaxLen = dr.GetInt16(15),
DisallowLastPwds = dr.GetInt16(16),
ExpiryDays = dr.GetInt16(17),
MaxTryCount = dr.GetInt16(18),
LockTime = dr.GetInt16(19),
AppVersion = dr.GetString(20),
AutoLogoutParams = dr.IsDBNull(21) ? "0,0,0" : dr.GetString(21),
PwdReserveWords = dr.IsDBNull(22) ? string.Empty : dr.GetString(22),
LoginIdCantBePassword = !dr.IsDBNull(23) && dr.GetInt16(23) != 0,
BatchEnabled = !dr.IsDBNull(24) && dr.GetInt16(24) != 0,
BmProcessId = dr.IsDBNull(25) ? 0 : dr.GetInt16(25),
PrProcessId = dr.IsDBNull(26) ? 0 : dr.GetInt16(26)
};
}
dr.Close();
}
tc.End();
}
catch (Exception ie)
{
tc?.HandleError();
throw DBCustomError.GenerateCustomError(ie);
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return response;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public async Task<WOTermsResponse> GetWOTermsAsync()
{
WOTermsResponse response = new() { ReturnStatus = 200 };
try
{
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode);
try
{
using IDataReader dr = tc.ExecuteReader("SELECT ItemId, PaymentTerms, TermsAndConditions FROM WOTerms");
if (dr.Read())
{
response = new WOTermsResponse
{
ItemId = dr.GetInt32(0),
PaymentTerms = dr.GetString(1),
TermsAndConditions = dr.GetString(2)
};
}
dr.Close();
tc.End();
}
catch (Exception ie)
{
tc?.HandleError();
throw DBCustomError.GenerateCustomError(ie);
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return response;
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="ipAddress"></param>
/// <param name="modifiedBy"></param>
/// <returns></returns>
public async Task<bool> SaveAsync(ThisSystemRequest request, string ipAddress, int modifiedBy)
{
bool returnValue = false;
try
{
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode, true);
try
{
SqlParameter[] p =
[
SqlHelperExtension.CreateInParam(pName: "@Code", pType: SqlDbType.VarChar, pValue: request.Code, size: 15),
SqlHelperExtension.CreateInParam(pName: "@Name", pType: SqlDbType.VarChar, pValue: request.Name, size: 50),
SqlHelperExtension.CreateInParam(pName: "@BanglaName", pType: SqlDbType.NVarChar, pValue: request.BanglaName, size: 50),
SqlHelperExtension.CreateInParam(pName: "@Address", pType: SqlDbType.VarChar, pValue: request.Address, size: 150),
SqlHelperExtension.CreateInParam(pName: "@BanglaAddress", pType: SqlDbType.NVarChar, pValue: request.BanglaAddress, size: 150),
SqlHelperExtension.CreateInParam(pName: "@PhoneNo", pType: SqlDbType.VarChar, pValue: request.PhoneNo, size: 50),
SqlHelperExtension.CreateInParam(pName: "@MobileNo", pType: SqlDbType.VarChar, pValue: request.MobileNo, size: 50),
SqlHelperExtension.CreateInParam(pName: "@EmailAddress", pType: SqlDbType.VarChar, pValue: request.EmailAddress ?? string.Empty, size: 50),
SqlHelperExtension.CreateInParam(pName: "@Website", pType: SqlDbType.VarChar, pValue: request.Website, size: 100),
SqlHelperExtension.CreateInParam(pName: "@VatRegNo", pType: SqlDbType.VarChar, pValue: request.VatRegNo, size: 30),
SqlHelperExtension.CreateInParam(pName: "@VatRate", pType: SqlDbType.Money, pValue: request.VatRate),
SqlHelperExtension.CreateInParam(pName: "@EnfStgPwd", pType: SqlDbType.SmallInt, pValue: request.EnfStgPwd ? 1 : 0),
SqlHelperExtension.CreateInParam(pName: "@PwdMinLen", pType: SqlDbType.SmallInt, pValue: request.PwdMinLen),
SqlHelperExtension.CreateInParam(pName: "@PwdMaxLen", pType: SqlDbType.SmallInt, pValue: request.PwdMaxLen),
SqlHelperExtension.CreateInParam(pName: "@DALastPwds", pType: SqlDbType.SmallInt, pValue: request.DisallowLastPwds),
SqlHelperExtension.CreateInParam(pName: "@ExpiryDays", pType: SqlDbType.SmallInt, pValue: request.ExpiryDays),
SqlHelperExtension.CreateInParam(pName: "@MaxTryCount", pType: SqlDbType.SmallInt, pValue: request.MaxTryCount),
SqlHelperExtension.CreateInParam(pName: "@LockTime", pType: SqlDbType.SmallInt, pValue: request.LockTime),
SqlHelperExtension.CreateInParam(pName: "@PrvntAtckPwdReuse", pType: SqlDbType.SmallInt, pValue: request.PreventAttackPasswordReuse?1: 0),
SqlHelperExtension.CreateInParam(pName: "@AppVersion", pType: SqlDbType.VarChar, pValue: request.AppVersion, size: 11),
SqlHelperExtension.CreateInParam(pName: "@AutoLogoutParams", pType: SqlDbType.VarChar, pValue: request.AutoLogoutParams, size: 15),
SqlHelperExtension.CreateInParam(pName: "@PwdReserveWords", pType: SqlDbType.VarChar, pValue: request.PwdReserveWords, size: 150),
SqlHelperExtension.CreateInParam(pName: "@LoginIdCantPwd", pType: SqlDbType.SmallInt, pValue: request.LoginIdCantBePassword ? 1 : 0),
SqlHelperExtension.CreateInParam(pName: "@BatchEnabled", pType: SqlDbType.SmallInt, pValue: request.BatchEnabled ? 1 : 0),
SqlHelperExtension.CreateInParam(pName: "@BmProcessId", pType: SqlDbType.SmallInt, pValue: request.BmProcessId),
SqlHelperExtension.CreateInParam(pName: "@PrProcessId", pType: SqlDbType.SmallInt, pValue: request.PrProcessId),
SqlHelperExtension.CreateInParam(pName: "@IpAddress", pType: SqlDbType.VarChar, pValue: ipAddress, size: 20),
SqlHelperExtension.CreateInParam(pName: "@ModifiedBy", pType: SqlDbType.Int, pValue: modifiedBy)
];
_ = tc.ExecuteNonQuerySp("dbo.UpdateThisSystem", p);
tc.End();
returnValue = true;
}
catch (Exception ie)
{
tc?.HandleError();
throw DBCustomError.GenerateCustomError(ie);
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return returnValue;
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="ipAddress"></param>
/// <param name="savedBy"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public async Task<bool> SaveWOTermsAsync(WOTermsRequest request, string ipAddress, int savedBy)
{
bool returnValue = false;
try
{
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode, true);
try
{
SqlParameter[] p =
[
SqlHelperExtension.CreateInParam(pName: "@PaymentTerms", pType: SqlDbType.NVarChar, pValue: request.PaymentTerms, size: 2000),
SqlHelperExtension.CreateInParam(pName: "@TermsAndConditions", pType: SqlDbType.NVarChar, pValue: request.TermsAndConditions, size: 2000),
SqlHelperExtension.CreateInParam(pName: "@IpAddress", pType: SqlDbType.VarChar, pValue: ipAddress, size: 20),
SqlHelperExtension.CreateInParam(pName: "@SavedBy", pType: SqlDbType.Int, pValue: savedBy)
];
_ = tc.ExecuteNonQuerySp("dbo.SaveWOTerms", p);
tc.End();
returnValue = true;
}
catch (Exception ie)
{
tc?.HandleError();
throw DBCustomError.GenerateCustomError(ie);
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
return returnValue;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
{
"version": 1,
"isRoot": true,
"tools": {}
}

View File

@ -0,0 +1,52 @@
[*.cs]
# IDE0058: Expression value is never used
csharp_style_unused_value_expression_statement_preference = unused_local_variable:silent
[*.{cs,vb}]
#### Naming styles ####
# Naming rules
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
# Symbol specifications
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =
# Naming styles
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case

View File

@ -0,0 +1,31 @@
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Setups;
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Systems;
using OnlineSalesAutoCrop.CoreAPI.Services.Services.Setups;
using OnlineSalesAutoCrop.CoreAPI.Services.Services.Systems;
using Microsoft.Extensions.DependencyInjection;
namespace OnlineSalesAutoCrop.CoreAPI.Configuration.DI
{
/// <summary>
///
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
///
/// </summary>
/// <param name="services"></param>
public static void ConfigureBusinessServices(this IServiceCollection services)
{
if (services == null)
return;
services.AddSingleton<IEaseCache, EaseCache>();
services.AddTransient<IUserService, UserService>();
services.AddTransient<IParamTypeService, ParamTypeService>();
services.AddTransient<IThisSystemService, ThisSystemService>();
services.AddTransient<IAuthModulesService, AuthModulesService>();
}
}
}

View File

@ -0,0 +1,280 @@
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace OnlineSalesAutoCrop.CoreAPI.Configurations
{
/// <summary>
///
/// </summary>
/// <param name="Acceptable"></param>
/// <param name="Status"></param>
/// <param name="Message"></param>
public record Result(bool Acceptable, Status Status, string Message);
/// <summary>
///
/// </summary>
public enum Status
{
/// <summary>
///
/// </summary>
GENUINE,
/// <summary>
///
/// </summary>
FAKE,
/// <summary>
///
/// </summary>
NOTSUPPORTED
}
/// <summary>
///
/// </summary>
public abstract class FileFormatDescriptor
{
/// <summary>
///
/// </summary>
protected FileFormatDescriptor()
{
Initialize();
MaxMagicNumberLength = MagicNumbers.Max(m => m.Length);
}
/// <summary>
///
/// </summary>
protected abstract void Initialize();
/// <summary>
///
/// </summary>
protected HashSet<string> Extensions { get; } = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
/// <summary>
///
/// </summary>
protected List<byte[]> MagicNumbers { get; } = [];
/// <summary>
///
/// </summary>
protected int MaxMagicNumberLength { get; }
/// <summary>
///
/// </summary>
protected string TypeName { get; set; }
/// <summary>
///
/// </summary>
/// <param name="extension"></param>
/// <returns></returns>
public bool IsIncludedExtension(string extension) => Extensions.Contains(extension);
/// <summary>
///
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public Result Validate(IFormFile file)
{
using var stream = file.OpenReadStream();
Span<byte> initialBytes = stackalloc byte[MaxMagicNumberLength];
_ = stream.Read(initialBytes);
foreach (var magicNumber in MagicNumbers)
{
if (initialBytes[..magicNumber.Length].SequenceCompareTo(magicNumber) == 0)
{
return new Result(true, Status.GENUINE, $"{Status.GENUINE} {TypeName}");
}
}
return new Result(false, Status.FAKE, $"{Status.FAKE} {TypeName}!");
}
}
/// <summary>
///
/// </summary>
public class ImageFile : FileFormatDescriptor
{
/// <summary>
///
/// </summary>
protected override void Initialize()
{
TypeName = "IMAGE FILE";
Extensions.UnionWith([".jpeg", ".jpg", ".png"]);
MagicNumbers.AddRange(
[
[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A],
[0xFF, 0xD8, 0xFF, 0xE0],
[0xFF, 0xD8, 0xFF, 0xE1],
[0xFF, 0xD8, 0xFF, 0xE2],
[0xFF, 0xD8, 0xFF, 0xE3]
]);
}
}
/// <summary>
///
/// </summary>
public class PdfFile : FileFormatDescriptor
{
/// <summary>
///
/// </summary>
protected override void Initialize()
{
TypeName = "PDF FILE";
Extensions.Add(".pdf");
MagicNumbers.Add([0x25, 0x50, 0x44, 0x46]);
}
}
/// <summary>
///
/// </summary>
public class ExcelFile : FileFormatDescriptor
{
/// <summary>
///
/// </summary>
protected override void Initialize()
{
TypeName = "EXCEL FILE";
Extensions.UnionWith([".xls", ".doc", ".ppt"]);
MagicNumbers.Add([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1]);
}
}
/// <summary>
///
/// </summary>
public class ExcelxFile : FileFormatDescriptor
{
/// <summary>
///
/// </summary>
protected override void Initialize()
{
TypeName = "EXCEL FILE";
Extensions.UnionWith([".xlsx"]);
MagicNumbers.Add([0x50, 0x4B, 0x03, 0x04]);
}
}
/// <summary>
///
/// </summary>
public static class ImageFileValidator
{
private static readonly List<FileFormatDescriptor> AllowedFormats = [new ImageFile()];
/// <summary>
///
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public static Result Validate(IFormFile file)
{
var fileExtension = Path.GetExtension(file.FileName);
var targetType = AllowedFormats.FirstOrDefault(x => x.IsIncludedExtension(fileExtension));
if (targetType is null)
{
return new Result(false, Status.NOTSUPPORTED, $"{Status.NOTSUPPORTED}");
}
return targetType.Validate(file);
}
}
/// <summary>
///
/// </summary>
public static class PdfFileValidator
{
private static readonly List<FileFormatDescriptor> AllowedFormats = [new PdfFile()];
/// <summary>
///
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public static Result Validate(IFormFile file)
{
var fileExtension = Path.GetExtension(file.FileName);
var targetType = AllowedFormats.FirstOrDefault(x => x.IsIncludedExtension(fileExtension));
if (targetType is null)
{
return new Result(false, Status.NOTSUPPORTED, $"{Status.NOTSUPPORTED}");
}
return targetType.Validate(file);
}
}
/// <summary>
///
/// </summary>
public static class ExcelFileValidator
{
private static readonly List<FileFormatDescriptor> AllowedFormats = [new ExcelFile()];
/// <summary>
///
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public static Result Validate(IFormFile file)
{
var fileExtension = Path.GetExtension(file.FileName);
var targetType = AllowedFormats.FirstOrDefault(x => x.IsIncludedExtension(fileExtension));
if (targetType is null)
{
return new Result(false, Status.NOTSUPPORTED, $"{Status.NOTSUPPORTED}");
}
return targetType.Validate(file);
}
}
/// <summary>
///
/// </summary>
public static class ExcelxFileValidator
{
private static readonly List<FileFormatDescriptor> AllowedFormats = [new ExcelxFile()];
/// <summary>
///
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public static Result Validate(IFormFile file)
{
var fileExtension = Path.GetExtension(file.FileName);
var targetType = AllowedFormats.FirstOrDefault(x => x.IsIncludedExtension(fileExtension));
if (targetType is null)
{
return new Result(false, Status.NOTSUPPORTED, $"{Status.NOTSUPPORTED}");
}
return targetType.Validate(file);
}
}
}

View File

@ -0,0 +1,44 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Linq;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Configurations
{
/// <summary>
/// Use to validate has any session
/// </summary>
[AttributeUsage(AttributeTargets.Method)]
public class ValidateSessionAttribute : ActionFilterAttribute
{
private static readonly string[] message = ["Your session has been expired, Please login again..."];
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
ISession session = context.HttpContext.Session;
if (session?.Keys == null || !session.Keys.Any())
{
context.Result = new ObjectResult(new
{
ReturnStatus = StatusCodesExt.StatusSessionExpired,
ReturnMessage = message
})
{
StatusCode = StatusCodesExt.StatusSessionExpired
};
return;
}
await next();
}
}
}

View File

@ -0,0 +1,42 @@
using Hangfire.Server;
using System;
namespace OnlineSalesAutoCrop.CoreAPI.Configurations
{
/// <summary>
///
/// </summary>
/// <param name="startHour"></param>
/// <param name="endHour"></param>
public class TimeRestrictionServerFilter(int startHour, int endHour) : IServerFilter
{
private readonly int _endHour = endHour;
private readonly int _startHour = startHour;
/// <summary>
///
/// </summary>
/// <param name="context"></param>
public void OnPerforming(PerformingContext context)
{
var now = DateTime.Now.Hour; // Use UTC or local time consistently
// Check if the current hour is within the restricted range (e.g., 1 AM to 7 AM)
if (now >= _startHour && now < _endHour)
{
// Abort the processing of the current job
context.Canceled = true;
// Optional: Log that the job was skipped due to time restrictions
}
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
public void OnPerformed(PerformedContext context)
{
// No action needed after the job is performed
}
}
}

View File

@ -0,0 +1,332 @@
using Asp.Versioning;
using OnlineSalesAutoCrop.CoreAPI.Configurations;
using OnlineSalesAutoCrop.CoreAPI.Models;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.Setups;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Setups;
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Setups;
using OnlineSalesAutoCrop.CoreAPI.SignalRHub;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Controllers.V1
{
/// <summary>
///
/// </summary>
[Authorize]
[ApiController]
[ApiVersion("1.0")]
[ValidateAntiForgeryToken]
[Route("api/v{version:apiVersion}/authModules")]
public class AuthModulesController(IAuthModulesService service, IEaseCache cache, ILogger<AuthModulesController> logger, IHubContext<NotificationHub, INotificationHub> hub) : ControllerBase
{
private readonly ILogger _logger = logger;
private readonly IEaseCache _cache = cache;
private readonly IAuthModulesService _service = service;
private readonly IHubContext<NotificationHub, INotificationHub> _hub = hub;
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[ValidateSession]
[HttpPost("getAuthSummaries")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(AuthSummariesResponse))]
[ProducesResponseType(StatusCodes.Status204NoContent, Type = typeof(AuthSummariesResponse))]
public async Task<IActionResult> GetAuthSummaries([FromBody] AuthSummaryRequest request)
{
ArgumentNullException.ThrowIfNull(request);
AuthSummariesResponse response = new() { ReturnStatus = StatusCodes.Status200OK };
try
{
int userId = HttpContext.User.GetClaimValue<int>(Constants.UserId);
response = await _service.GetAuthSummariesAsync(userId: userId, status: request.Status, entryModule: 0);
response.ReturnStatus = StatusCodes.Status200OK;
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
}
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[ValidateSession]
[HttpPost("getAuthDetails")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(AuthDetailsResponse))]
[ProducesResponseType(StatusCodes.Status204NoContent, Type = typeof(AuthDetailsResponse))]
public async Task<IActionResult> GetAuthDetails([FromBody] AuthDetailRequest request)
{
ArgumentNullException.ThrowIfNull(request);
AuthDetailsResponse response = new() { ReturnStatus = StatusCodes.Status200OK };
try
{
response = await _service.GetAuthDetailsAsync(moduleId: request.ModuleId, status: request.Status);
response.ReturnStatus = StatusCodes.Status200OK;
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
}
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[ValidateSession]
[HttpPost("updateAuthStatus")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(BooleanResponse))]
[ProducesResponseType(StatusCodes.Status204NoContent, Type = typeof(BooleanResponse))]
public async Task<IActionResult> UpdateAuthStatus([FromBody] AuthUpdateRequest request)
{
ArgumentNullException.ThrowIfNull(request);
BooleanResponse response = new() { ReturnStatus = StatusCodes.Status200OK };
string key = GetPermissionKey(status: request.Status, description: out string description);
bool permitted = await HttpContext.IsPermitted(key);
if (!permitted)
{
response.ReturnStatus = StatusCodes.Status403Forbidden;
response.ReturnMessage.Add($"You are not authorize to do {description}.");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
try
{
string ids = string.Join(',', request.Ids);
int userId = HttpContext.User.GetClaimValue<int>(Constants.UserId);
string ipAddress = Request.HttpContext.GetIpAddress();
string loginId = HttpContext.User.GetClaimValue<string>(Constants.LoginId);
response.Value = await _service.UpdateAuthStatusAsync(moduleId: request.ModuleId, ipAddress: ipAddress, remarks: request.Remarks, status: request.Status, userId: userId, loginId: loginId, ids: ids);
response.ReturnStatus = StatusCodes.Status200OK;
#region Clear Cache
switch (request.ModuleId)
{
case "ELIT.3.1.1":
case "ELIT.3.1.2":
_cache.Clear("ChartofAccount");
break;
case "ELIT.1.5.1":
case "ELIT.1.5.2":
_cache.Clear("Client");
break;
case "ELIT.1.5.8":
_cache.Clear("BankBranch");
break;
case "ELIT.1.5.9":
case "ELIT.4.1.1":
case "ELIT.4.1.2":
case "ELIT.4.1.3":
case "ELIT.5.1.6":
case "ELIT.1.5.10":
case "ELIT.6.1.6":
_cache.Clear("GlCode");
break;
case "ELIT.1.5.3":
case "ELIT.1.5.4":
case "ELIT.1.5.5":
_cache.Clear("Employee");
break;
case "ELIT.1.5.7":
case "ELIT.6.1.5":
_cache.Clear("Store");
break;
case "ELIT.6.1.4":
_cache.Clear("Location");
break;
case "ELIT.5.1.1":
_cache.Clear("ProductTypes");
break;
case "ELIT.5.1.2":
_cache.Clear("Products");
break;
case "ELIT.6.1.1":
_cache.Clear("AssetType");
break;
case "ELIT.6.1.2":
_cache.Clear("AssetCategory");
break;
case "ELIT.6.1.3":
_cache.Clear("AssetItem");
break;
case "ELIT.7.1.3":
_cache.Clear("Priority");
break;
case "ELIT.7.1.4":
_cache.Clear("TaskStatus");
break;
case "ELIT.7.1.5":
_cache.Clear("TaskCategory");
break;
case "ELIT.7.1.6":
_cache.Clear("TaskType");
break;
case "ELIT.7.1.7":
_cache.Clear("TeamSpace");
break;
case "ELIT.9.1.1":
_cache.Clear("MarketHierarchy");
break;
case "ELIT.9.1.2":
_cache.Clear("Salespoint");
break;
case "ELIT.9.1.3":
_cache.Clear("ProductHierarchy");
break;
case "ELIT.9.1.4":
_cache.Clear("Brand");
break;
case "ELIT.9.1.5":
_cache.Clear("Sku");
break;
case "ELIT.9.1.6":
_cache.Clear("ChannelHierarchy");
break;
case "ELIT.9.1.7":
_cache.Clear("Customer");
break;
case "ELIT.9.1.8":
_cache.Clear("SalesOfficer");
break;
case "ELIT.9.1.12":
_cache.Clear("ExtnlProduct");
break;
case "ELIT.9.1.13":
_cache.Clear("SalesPromotion");
break;
default:
break;
}
#endregion
if (request.Status == 8)
{
await _hub.Clients.All.NotifySubscriber(userId: userId, msgType: 5, itemId: 0, ipAddress: ipAddress);
}
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
}
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[ValidateSession]
[HttpPost("getPendingAuths")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(PendingAuthResponse))]
[ProducesResponseType(StatusCodes.Status204NoContent, Type = typeof(PendingAuthResponse))]
public async Task<IActionResult> GetPendingAuths([FromBody] NoContentRequest request)
{
ArgumentNullException.ThrowIfNull(request);
PendingAuthResponse response = new() { ReturnStatus = StatusCodes.Status200OK };
try
{
int userId = HttpContext.User.GetClaimValue<int>(Constants.UserId);
response = await _service.GetPendingAuthsAsync(userId: userId);
response.ReturnStatus = StatusCodes.Status200OK;
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
}
}
/// <summary>
///
/// </summary>
/// <param name="status"></param>
/// <param name="description"></param>
/// <returns></returns>
private static string GetPermissionKey(short status, out string description)
{
string permissionKey;
switch (status)
{
case 16:
permissionKey = "ELIT.2.3_2";
description = "Deactivation";
break;
case 8:
permissionKey = "ELIT.2.2_2";
description = "Authorization";
break;
default:
permissionKey = "ELIT.2.1_2";
description = "Authentication";
break;
}
return permissionKey;
}
}
}

View File

@ -0,0 +1,269 @@
using Asp.Versioning;
using OnlineSalesAutoCrop.CoreAPI.Configurations;
using OnlineSalesAutoCrop.CoreAPI.Models;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.Systems;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Systems;
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Systems;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Controllers.V1
{
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
/// <param name="service"></param>
/// <param name="cache"></param>
/// <param name="logger"></param>
[Authorize]
[ApiController]
[ApiVersion("1.0")]
[ValidateAntiForgeryToken]
[Route("api/v{version:apiVersion}/thisSystems")]
public class ThisSystemController(IThisSystemService service, IEaseCache cache, ILogger<ThisSystemController> logger) : ControllerBase
{
private readonly ILogger _logger = logger;
private readonly IEaseCache _cache = cache;
private readonly IThisSystemService _service = service;
private readonly DateTimeOffset _options = Helper.CreateEaseCacheOptions();
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[ValidateSession]
[HttpPost("saveThisSystem")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(BooleanResponse))]
public async Task<IActionResult> SaveThisSystem([FromBody] ThisSystemRequest request)
{
ArgumentNullException.ThrowIfNull(request);
BooleanResponse response = new() { ReturnStatus = StatusCodes.Status200OK };
if (HttpContext.IsSessionExpired())
{
response.ReturnStatus = StatusCodes.Status401Unauthorized;
response.ReturnMessage.Add("Session expired, Please Login again...");
return StatusCode(StatusCodes.Status401Unauthorized, response);
}
bool permitted = await HttpContext.IsPermitted(moduleId: "ELIT.1.1_2");
if (!permitted)
{
response.ReturnStatus = StatusCodes.Status403Forbidden;
response.ReturnMessage.Add("You are not authorize to Update System Information.");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
if (request.PwdMinLen > request.PwdMaxLen)
{
response.ReturnStatus = StatusCodes.Status417ExpectationFailed;
response.ReturnMessage.Add("Maximum length of password can not be less Minimum length of password");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
if (request.EnfStgPwd && request.PwdMinLen < 6)
{
response.ReturnStatus = StatusCodes.Status417ExpectationFailed;
response.ReturnMessage.Add("For Strong Password minimum length of password can not be less 6");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
string[] tokens = request.AutoLogoutParams.Split(',');
if (tokens.Length != 3)
{
response.ReturnStatus = StatusCodes.Status417ExpectationFailed;
response.ReturnMessage.Add("Must be comma delimited 3 parameters (Idle, timeout and ping) in seconds.");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
if (tokens.Length == 3)
{
if (!int.TryParse(tokens[0], out int tmValue))
{
response.ReturnStatus = StatusCodes.Status417ExpectationFailed;
response.ReturnMessage.Add("Idle parameter must be numeric (between 0 to 9999).");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
if (tmValue < 0 || tmValue > 9999)
{
response.ReturnStatus = StatusCodes.Status417ExpectationFailed;
response.ReturnMessage.Add($"Idle [{tmValue}] parameter must be between 0 to 9999.");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
if (!int.TryParse(tokens[1], out tmValue))
{
response.ReturnStatus = StatusCodes.Status417ExpectationFailed;
response.ReturnMessage.Add("Timeout parameter must be numeric (between 0 to 9999).");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
if (tmValue < 0 || tmValue > 9999)
{
response.ReturnStatus = StatusCodes.Status417ExpectationFailed;
response.ReturnMessage.Add($"Timeout [{tmValue}] parameter must be between 0 to 9999.");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
if (!int.TryParse(tokens[2], out tmValue))
{
response.ReturnStatus = StatusCodes.Status417ExpectationFailed;
response.ReturnMessage.Add("Ping parameter must be numeric (between 0 to 9999).");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
if (tmValue < 0 || tmValue > 9999)
{
response.ReturnStatus = StatusCodes.Status417ExpectationFailed;
response.ReturnMessage.Add($"Ping [{tmValue}] parameter must be between 0 to 9999.");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
}
try
{
string ipAddress = Request.HttpContext.GetIpAddress();
int userId = HttpContext.User.GetClaimValue<int>(Constants.UserId);
response.Value = await _service.SaveAsync(request: request, ipAddress: ipAddress, modifiedBy: userId);
response.ReturnMessage.Add("System Information saved successfully...");
//Cache
_cache.Clear("ThisSystem");
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
[ValidateSession]
[HttpPost("getThisSystem")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(ThisSystemResponse))]
[ProducesResponseType(StatusCodes.Status204NoContent, Type = typeof(ThisSystemResponse))]
public async Task<IActionResult> GetThisSystem([FromBody] NoContentRequest request)
{
ArgumentNullException.ThrowIfNull(request);
ThisSystemResponse response = new() { ReturnStatus = StatusCodes.Status200OK };
try
{
string key = "ThisSystem";
string key2 = string.Empty;
if (!_cache.TryGetValue(key: key, key2: key2, value: out response))
{
response = await _service.GetAsync();
response.ReturnStatus = StatusCodes.Status200OK;
//Cache
_ = _cache.Set(key: key, key2: key2, value: response, options: _options);
}
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
}
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[ValidateSession]
[HttpPost("saveStandardTerms")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(BooleanResponse))]
public async Task<IActionResult> SaveStandardTerms([FromBody] WOTermsRequest request)
{
ArgumentNullException.ThrowIfNull(request);
BooleanResponse response = new() { ReturnStatus = StatusCodes.Status200OK };
bool permitted = await HttpContext.IsPermitted("ELIT.5.1.3_1") || await HttpContext.IsPermitted("ELIT.5.1.3_2");
if (!permitted)
{
response.ReturnStatus = StatusCodes.Status403Forbidden;
response.ReturnMessage.Add("You are not authorize to Save Work Order terms & conditions.");
return StatusCode(StatusCodes.Status417ExpectationFailed, response);
}
try
{
string ipAddress = Request.HttpContext.GetIpAddress();
int savedBy = HttpContext.User.GetClaimValue<int>(Constants.UserId);
response.Value = await _service.SaveWOTermsAsync(request: request, ipAddress: ipAddress, savedBy: savedBy);
response.ReturnMessage.Add("Work Order terms & conditions saved successfully...");
//Cache
_cache.Clear("WOTerms");
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
[ValidateSession]
[HttpPost("getStandardTerms")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(WOTermsResponse))]
[ProducesResponseType(StatusCodes.Status204NoContent, Type = typeof(WOTermsResponse))]
public async Task<IActionResult> GetStandardTerms([FromBody] NoContentRequest request)
{
ArgumentNullException.ThrowIfNull(request);
WOTermsResponse response = new() { ReturnStatus = StatusCodes.Status200OK };
try
{
string key = "WOTerms";
string key2 = string.Empty;
if (!_cache.TryGetValue(key: key, key2: key2, value: out response))
{
response = await _service.GetWOTermsAsync();
response.ReturnStatus = StatusCodes.Status200OK;
//Cache
_ = _cache.Set(key: key, key2: key2, value: response, options: _options);
}
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,33 @@
# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
# Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
# For more information, please see https://aka.ms/containercompat
# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:9.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:9.0-nanoserver-1809 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Api/OnlineSalesAutoCrop.CoreAPI/OnlineSalesAutoCrop.CoreAPI.csproj", "Api/OnlineSalesAutoCrop.CoreAPI/"]
COPY ["Api/OnlineSalesAutoCrop.CoreAPI.Models/OnlineSalesAutoCrop.CoreAPI.Models.csproj", "Api/OnlineSalesAutoCrop.CoreAPI.Models/"]
COPY ["Api/OnlineSalesAutoCrop.CoreAPI.Services/OnlineSalesAutoCrop.CoreAPI.Services.csproj", "Api/OnlineSalesAutoCrop.CoreAPI.Services/"]
RUN dotnet restore "./Api/OnlineSalesAutoCrop.CoreAPI/OnlineSalesAutoCrop.CoreAPI.csproj"
COPY . .
WORKDIR "/src/Api/OnlineSalesAutoCrop.CoreAPI"
RUN dotnet build "./OnlineSalesAutoCrop.CoreAPI.csproj" -c %BUILD_CONFIGURATION% -o /app/build
# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./OnlineSalesAutoCrop.CoreAPI.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false
# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "OnlineSalesAutoCrop.CoreAPI.dll"]

View File

@ -0,0 +1,47 @@
using OnlineSalesAutoCrop.CoreAPI.Models;
using OnlineSalesAutoCrop.CoreAPI.Models.Global;
using StackExchange.Redis;
using System;
namespace OnlineSalesAutoCrop.CoreAPI
{
internal class CacheConnection
{
private readonly EnumCacheType cacheType;
private readonly Lazy<ConnectionMultiplexer> lazyConnection;
/// <summary>
///
/// </summary>
/// <param name="settings"></param>
/// <exception cref="InvalidOperationException"></exception>
internal CacheConnection(AppSettings settings)
{
try
{
cacheType = settings.CacheType;
if (cacheType == EnumCacheType.Redis && !string.IsNullOrEmpty(settings.CacheUrl))
{
lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
return ConnectionMultiplexer.Connect(settings.CacheUrl);
});
}
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
}
/// <summary>
///
/// </summary>
internal ConnectionMultiplexer Connection => lazyConnection?.Value;
/// <summary>
///
/// </summary>
internal EnumCacheType CacheType => cacheType;
}
}

View File

@ -0,0 +1,237 @@
using OnlineSalesAutoCrop.CoreAPI.Models;
using OnlineSalesAutoCrop.CoreAPI.Models.Global;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Net;
namespace OnlineSalesAutoCrop.CoreAPI
{
/// <summary>
/// Customized cache, it may be "Distributed Cache (Redis)" or "Memory Cache",
/// it depends on value in appsettings.json file.
/// If the value of "RedisCacheUrl" field is present it will use "Distributed Cache (Redis)."
/// If the value of "SqlServerCacheUrl" field is present it will use "Distributed Cache (Sql Server)"
/// otherwise it will use "Memory Cache".
/// </summary>
public interface IEaseCache : IEnumerable<KeyValuePair<string, object>>
{
/// <summary>
/// Get cached object
/// </summary>
/// <typeparam name="T">Any type of object</typeparam>
/// <param name="key">Key to retrieve data</param>
/// <param name="key2">2nd part of Key to retrieve data</param>
/// <param name="value">Instance of an object type T</param>
/// <returns>True if successful otherwise false</returns>
bool TryGetValue<T>(string key, string key2, out T value);
/// <summary>
/// Set object to cache
/// </summary>
/// <typeparam name="T">Any type of object</typeparam>
/// <param name="key">Key to set data to cache</param>
/// <param name="key2">2nd part of Key to retrieve data</param>
/// <param name="value">Instance of an object type T</param>
/// <param name="options">How many time to keep in cache</param>
/// <returns>True if successful otherwise false</returns>
bool Set<T>(string key, string key2, T value, DateTimeOffset options);
/// <summary>
/// Delete caches of matched pattern
/// </summary>
/// <param name="pattern">Pattern to search</param>
void Clear(string pattern);
}
/// <summary>
///
/// </summary>
public class EaseCache : IEaseCache
{
private readonly IDatabase _db;
private readonly IServer _server;
private readonly EnumCacheType _cacheType;
private readonly IMemoryCache _memoryCache;
private readonly IDistributedCache _distributedCache;
private readonly ConcurrentBag<string> _distributedKeys = [];
private readonly ConcurrentDictionary<string, ICacheEntry> _cacheEntries = new();
/// <summary>
///
/// </summary>
/// <param name="memoryCache"></param>
/// <param name="distributedCache"></param>
/// <param name="settings"></param>
public EaseCache(IMemoryCache memoryCache, IDistributedCache distributedCache, IOptions<AppSettings> settings)
{
CacheConnection cacheCon = new(settings: settings.Value);
_cacheType = cacheCon.CacheType;
if (_cacheType == EnumCacheType.Redis)
{
_db = cacheCon.Connection.GetDatabase();
foreach (EndPoint endpoint in cacheCon.Connection.GetEndPoints(configuredOnly: true))
{
_server = cacheCon.Connection.GetServer(endpoint);
}
}
else if (_cacheType == EnumCacheType.SqlServer)
{
_distributedCache = distributedCache;
}
else
{
_memoryCache = memoryCache;
}
}
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="key2"></param>
/// <param name="value"></param>
/// <param name="options"></param>
/// <returns></returns>
public bool Set<T>(string key, string key2, T value, DateTimeOffset options)
{
if (!string.IsNullOrEmpty(key2))
key = $"{key}~{key2}";
if (_cacheType == EnumCacheType.Redis)
{
TimeSpan expiryTime = options.DateTime.Subtract(DateTime.Now);
return _db.StringSet(key: key, value: JsonConvert.SerializeObject(value), expiry: expiryTime);
}
else if (_cacheType == EnumCacheType.SqlServer)
{
_distributedKeys.Add(key);
DistributedCacheEntryOptions expiryTime = new() { SlidingExpiration = options.DateTime.Subtract(DateTime.Now) };
_distributedCache.SetString(key: key, value: JsonConvert.SerializeObject(value), options: expiryTime);
return true;
}
else
{
using ICacheEntry entry = _memoryCache.CreateEntry(key);
entry.RegisterPostEvictionCallback(PostEvictionCallback);
_cacheEntries.AddOrUpdate(key: key, addValue: entry, (o, cacheEntry) =>
{
cacheEntry.Value = entry;
return cacheEntry;
});
entry.AbsoluteExpiration = options;
entry.Value = value;
return true;
}
}
/// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="reason"></param>
/// <param name="state"></param>
private void PostEvictionCallback(object key, object value, EvictionReason reason, object state)
{
if (_cacheType == EnumCacheType.InMemory && reason != EvictionReason.Replaced)
{
_cacheEntries.TryRemove(key: $"{key}", value: out _);
}
}
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="key2"></param>
/// <param name="value"></param>
/// <returns></returns>
public bool TryGetValue<T>(string key, string key2, out T value)
{
if (!string.IsNullOrEmpty(key2))
key = $"{key}~{key2}";
if (_cacheType == EnumCacheType.Redis)
{
RedisValue keyValue = _db.StringGet(key);
if (string.IsNullOrEmpty(keyValue))
{
value = default;
return false;
}
value = JsonConvert.DeserializeObject<T>(keyValue);
return true;
}
else if (_cacheType == EnumCacheType.SqlServer)
{
string keyValue = _distributedCache.GetString(key);
if (string.IsNullOrEmpty(keyValue))
{
value = default;
return false;
}
value = JsonConvert.DeserializeObject<T>(keyValue);
return true;
}
else
{
return _memoryCache.TryGetValue(key: key, value: out value);
}
}
/// <summary>
/// Delete caches of matched pattern
/// </summary>
/// <param name="pattern">Pattern to search</param>
public void Clear(string pattern)
{
if (_cacheType == EnumCacheType.Redis)
{
foreach (RedisKey key in _server.Keys(pattern: $"*{pattern}*"))
{
_db.KeyDelete(key: key);
}
}
else if (_cacheType == EnumCacheType.SqlServer)
{
foreach (string key in _distributedKeys.Where(key => key.Contains(pattern, StringComparison.OrdinalIgnoreCase)))
{
_distributedCache.Remove(key: key);
}
}
else
{
foreach (string key in _cacheEntries.Keys.Where(key => key.Contains(pattern, StringComparison.CurrentCultureIgnoreCase)))
{
_memoryCache.Remove(key: key);
}
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public IEnumerator<KeyValuePair<string, object>> GetEnumerator() => _cacheEntries.Select(pair => new KeyValuePair<string, object>(pair.Key, pair.Value.Value)).GetEnumerator();
/// <summary>
///
/// </summary>
/// <returns></returns>
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
}

View File

@ -0,0 +1,295 @@
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Primitives;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net.Http.Headers;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI
{
/// <summary>
///
/// </summary>
public static class ExtensionMethods
{
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="principal"></param>
/// <param name="type"></param>
/// <returns></returns>
public static T GetClaimValue<T>(this ClaimsPrincipal principal, string type)
{
if (principal?.Identity == null || !principal.Identity.IsAuthenticated)
return typeof(T) == typeof(string) ? ((T)Convert.ChangeType(string.Empty, typeof(T))) : default;
Claim claim = principal.Claims.SingleOrDefault(p => p.Type == type);
if (string.IsNullOrEmpty(claim?.Value))
return typeof(T) == typeof(string) ? ((T)Convert.ChangeType(string.Empty, typeof(T))) : default;
return (T)Convert.ChangeType(claim.Value, typeof(T));
}
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="session"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public static async Task<bool> SetModulesToSession<T>(this ISession session, string key, T value)
{
ArgumentNullException.ThrowIfNull(session);
try
{
string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(value);
session.SetString(key: key, value: jsonString);
await session.CommitAsync();
return true;
}
catch
{
return false;
}
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <param name="moduleId"></param>
/// <returns></returns>
public static async Task<bool> IsPermitted(this HttpContext context, string moduleId)
{
if (context?.Session is null)
return false;
string key = context.GetAuthenticationToken();
if (string.IsNullOrEmpty(key))
return false;
await context.Session.LoadAsync();
string moduleIds = context.Session.GetString(key: key);
if (string.IsNullOrEmpty(moduleIds))
{
return false;
}
try
{
List<string> value = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(moduleIds);
return value.Contains(moduleId);
}
catch
{
return false;
}
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="moduleId"></param>
/// <returns></returns>
public static async Task<bool> IsPermitted(this List<string> value, string moduleId)
{
if (value?.Count <= 0)
return false;
try
{
return value.Contains(moduleId);
}
catch
{
return false;
}
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public static bool IsSessionExpired(this HttpContext context)
{
if (context?.Session is null)
return true;
string key = context.GetAuthenticationToken();
if (string.IsNullOrEmpty(key))
return true;
string moduleIds = context.Session.GetString(key: key);
if (string.IsNullOrEmpty(moduleIds))
return true;
return false;
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public static async Task<bool> ClearSessionAsync(this HttpContext context)
{
if (context?.Session is null)
return false;
context.Session.Clear();
await context.Session.CommitAsync();
return true;
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public static string GetAuthenticationToken(this HttpContext context)
{
if (context == null)
{
return null;
}
// Attempt to retrieve the "Authorization" header
if (context.Request.Headers.TryGetValue("Authorization", out StringValues authHeaderValues))
{
var authHeader = authHeaderValues.FirstOrDefault();
// Parse the header using AuthenticationHeaderValue
if (authHeader != null && AuthenticationHeaderValue.TryParse(authHeader, out AuthenticationHeaderValue authHeaderValue))
{
// For Bearer tokens, the scheme is "Bearer" and the parameter is the token
if (authHeaderValue.Scheme.Equals("Bearer", StringComparison.OrdinalIgnoreCase))
{
return authHeaderValue.Parameter;
}
// For Basic authentication, the scheme is "Basic" and the parameter is base64 encoded credentials
else if (authHeaderValue.Scheme.Equals("Basic", StringComparison.OrdinalIgnoreCase))
{
// You would then typically decode this parameter to get username and password
return authHeaderValue.Parameter;
}
}
}
return null;
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public static string GetIpAddress(this HttpContext context)
{
string ip = GetHeaderValueAs<string>(context: context, headerName: "X-Forwarded-For").SplitCsv().FirstOrDefault();
if (string.IsNullOrEmpty(ip) && context?.Connection?.RemoteIpAddress != null)
{
ip = context?.Connection?.RemoteIpAddress.ToString();
if (string.IsNullOrEmpty(ip))
{
ip = GetHeaderValueAs<string>(context: context, headerName: "REMOTE_ADDR");
if (string.IsNullOrEmpty(ip))
ip = context.Request?.Host.Value;
}
}
return ip ?? string.Empty;
}
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="context"></param>
/// <param name="headerName"></param>
/// <returns></returns>
private static T GetHeaderValueAs<T>(HttpContext context, string headerName)
{
if (context.Request?.Headers?.TryGetValue(headerName, out StringValues values) ?? false)
{
string rawValues = values.ToString();
if (!string.IsNullOrEmpty(rawValues))
return (T)Convert.ChangeType(values.ToString(), typeof(T));
}
return default;
}
/// <summary>
///
/// </summary>
/// <param name="csvList"></param>
/// <returns></returns>
private static List<string> SplitCsv(this string csvList)
{
if (string.IsNullOrWhiteSpace(csvList))
return [];
return [.. csvList.TrimEnd(',').Split(',').AsEnumerable().Select(s => s.Trim())];
}
/// <summary>
///
/// </summary>
/// <param name="textToCompress"></param>
/// <returns></returns>
public static string CompressString(this string textToCompress)
{
byte[] bytes = Encoding.UTF8.GetBytes(textToCompress);
using var ms = new MemoryStream();
using (BrotliStream brotli = new(ms, CompressionLevel.Optimal))
{
brotli.Write(bytes, 0, bytes.Length);
}
return Convert.ToBase64String(ms.ToArray());
}
/// <summary>
///
/// </summary>
/// <param name="textToDecompress"></param>
/// <returns></returns>
public static string DecompressString(this string textToDecompress)
{
byte[] bytes = Convert.FromBase64String(textToDecompress);
using var ms = new MemoryStream(bytes);
using var Brotli = new BrotliStream(ms, CompressionMode.Decompress);
using var sr = new StreamReader(Brotli);
return sr.ReadToEnd();
}
/// <summary>
///
/// </summary>
/// <param name="textToDecompress"></param>
/// <returns></returns>
public static List<string> DecompressModuleIds(this string textToDecompress)
{
return textToDecompress.DecompressString().SplitCsv();
}
/// <summary>
///
/// </summary>
/// <param name="logger"></param>
/// <param name="exception"></param>
public static void LogError(this ILogger logger, Exception exception)
{
logger.LogError(exception: exception, message: string.Empty);
}
}
}

View File

@ -0,0 +1,97 @@
using Ease.NetCore.Utility;
using Microsoft.Reporting.NETCore;
using System;
using System.Security.Claims;
namespace OnlineSalesAutoCrop.CoreAPI
{
/// <summary>
///
/// </summary>
public static class Helper
{
/// <summary>
/// Creates a new claim with the specified type and value.
/// </summary>
/// <param name="type">The type of the claim, such as a role or permission identifier. Cannot be null or empty.</param>
/// <param name="value">The value of the claim, representing the associated data for the specified type. Cannot be null or empty.</param>
/// <returns>A <see cref="Claim"/> object initialized with the specified type and value.</returns>
public static Claim CreateClaim(string type, string value)
{
return new Claim(type: type, value: value);
}
/// <summary>
///
/// </summary>
/// <param name="expirationInMinutes"></param>
/// <returns></returns>
public static DateTimeOffset CreateEaseCacheOptions(double expirationInMinutes = 1440)
{
return DateTime.Now.AddMinutes(expirationInMinutes);
}
/// <summary>
/// Decrypt data by 128 bit AES encryption algorithm
/// </summary>
/// <param name="secret">Used to decrypt data</param>
/// <param name="data">Value to decrypt and value must be Base64String</param>
/// <returns>Return plain text data if successful otherwise throw error</returns>
public static string DecryptData(string secret, string data)
{
if (data == null || data.Length <= 0)
throw new ArgumentNullException(nameof(data));
if (secret == null || secret.Length <= 0)
throw new ArgumentNullException(nameof(secret));
try
{
data = Global.CipherFunctions.DecryptByAES(privateKey: secret, publicKey: secret, data: data, input: 2, output: 3);
}
catch
{
data = "*Key/Data Error*";
}
return data;
}
/// <summary>
///
/// </summary>
/// <param name="report"></param>
/// <param name="format"></param>
/// <param name="contentType"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static byte[] GenerateRdlcOutputFile(LocalReport report, string format, out string contentType)
{
try
{
byte[] bytes = report.Render(format: format, deviceInfo: null, mimeType: out contentType, encoding: out string _, fileNameExtension: out string _, streams: out string[] _, warnings: out Warning[] _);
return bytes;
}
catch (Exception e)
{
throw new InvalidOperationException(e.Message, e);
}
}
}
/// <summary>
///
/// </summary>
public static partial class StatusCodesExt
{
/// <summary>
///
/// </summary>
public const int PasswordChanged = 898;
/// <summary>
///
/// </summary>
public const int StatusSessionExpired = 899;
}
}

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Ease O2C .net Core9 </title>
</head>
<body>
<h4>Ease O2C IS RUNNING</h4>
</body>
</html>

View File

@ -0,0 +1,246 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Authors>S M Russel</Authors>
<Company>Computer Ease Limited</Company>
<Product>OnlineSalesAutoCrop.CoreAPI</Product>
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
<DockerDefaultTargetOS>Windows</DockerDefaultTargetOS>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<NoWarn>1701;1702</NoWarn>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Connected Services\**" />
<Compile Remove="Controllers\V2\**" />
<Compile Remove="wwwroot\**" />
<Content Remove="Connected Services\**" />
<Content Remove="Controllers\V2\**" />
<Content Remove="wwwroot\**" />
<EmbeddedResource Remove="Connected Services\**" />
<EmbeddedResource Remove="Controllers\V2\**" />
<EmbeddedResource Remove="wwwroot\**" />
<None Remove="Connected Services\**" />
<None Remove="Controllers\V2\**" />
<None Remove="wwwroot\**" />
</ItemGroup>
<ItemGroup>
<Content Remove="web.config" />
</ItemGroup>
<ItemGroup>
<None Remove="Reports\rptAdvancePayment.rdlc" />
<None Remove="Reports\rptBalanceSheet.rdlc" />
<None Remove="Reports\rptBalanceSheetCompare.rdlc" />
<None Remove="Reports\rptBankOrCashBook.rdlc" />
<None Remove="Reports\rptCashflow.rdlc" />
<None Remove="Reports\rptCashflowCompare.rdlc" />
<None Remove="Reports\rptCashPurchase.rdlc" />
<None Remove="Reports\rptDayBook.rdlc" />
<None Remove="Reports\rptDayBookSummary.rdlc" />
<None Remove="Reports\rptFAAddAsset.rdlc" />
<None Remove="Reports\rptFAInstallation.rdlc" />
<None Remove="Reports\rptFAReduceAsset.rdlc" />
<None Remove="Reports\rptFASales.rdlc" />
<None Remove="Reports\rptFATransfer.rdlc" />
<None Remove="Reports\rptFAWriteOff.rdlc" />
<None Remove="Reports\rptFixedAssetDepreciation.rdlc" />
<None Remove="Reports\rptGRN.rdlc" />
<None Remove="Reports\rptIncomeExpenditure.rdlc" />
<None Remove="Reports\rptInvoice.rdlc" />
<None Remove="Reports\rptInvoiceFAP2P.rdlc" />
<None Remove="Reports\rptLedger.rdlc" />
<None Remove="Reports\rptMonthlyTurnover.rdlc" />
<None Remove="Reports\rptPaymentFAP2P.rdlc" />
<None Remove="Reports\rptProfitLoss.rdlc" />
<None Remove="Reports\rptProfitLossCompare.rdlc" />
<None Remove="Reports\rptPurchaseOrder.rdlc" />
<None Remove="Reports\rptStockTran.rdlc" />
<None Remove="Reports\rptTrialBalance.rdlc" />
<None Remove="Reports\rptVoucher.rdlc" />
<None Remove="Reports\rptWorkOrder.rdlc" />
</ItemGroup>
<ItemGroup>
<Content Include="cel.ico" />
<Content Include="Reports\rptAdvancePayment.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptBalanceSheet.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptBalanceSheetCompare.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptBankOrCashBook.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptCashflow.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptCashflowCompare.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptCashPurchase.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptDayBook.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptDayBookSummary.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptFAAddAsset.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptFAInstallation.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptFAReduceAsset.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptFASales.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptFATransfer.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptFAWriteOff.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptFixedAssetDepreciation.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptGRN.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptIncomeExpenditure.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptInvoice.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptInvoiceFAP2P.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptLedger.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptMonthlyTurnover.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptPaymentFAP2P.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptProfitLoss.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptProfitLossCompare.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptPurchaseOrder.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptStockTran.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptTrialBalance.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptVoucher.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Reports\rptWorkOrder.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="10.0.0" />
<PackageReference Include="Ease.NetCore" Version="2.1.4" />
<PackageReference Include="Google.Cloud.Speech.V1" Version="3.9.0" />
<PackageReference Include="Hangfire" Version="1.8.23" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.8" />
<PackageReference Include="Microsoft.Extensions.Caching.SqlServer" Version="10.0.8" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.8" />
<PackageReference Include="OpenAI" Version="2.10.0" />
<PackageReference Include="RabbitMQ.Client" Version="7.2.1" />
<PackageReference Include="ReportViewerCore.NETCore" Version="15.1.33" />
<PackageReference Include="Serilog.Extensions.Logging.File" Version="3.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.2.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="10.2.1" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="10.2.1" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUi" Version="10.2.1" />
<PackageReference Include="System.DirectoryServices" Version="10.0.8" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.18.0" />
<PackageReference Include="System.ServiceModel.Duplex" Version="6.0.0" />
<PackageReference Include="System.ServiceModel.Http" Version="10.0.652802" />
<PackageReference Include="System.ServiceModel.NetTcp" Version="10.0.652802" />
<PackageReference Include="System.ServiceModel.Primitives" Version="10.0.652802" />
<PackageReference Include="System.ServiceModel.Security" Version="6.0.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup>
<ItemGroup>
<Folder Include="FileProcessFolder\" />
<Folder Include="Logs\" />
<Folder Include="UploadedFiles\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OnlineSalesAutoCrop.CoreAPI.Models\OnlineSalesAutoCrop.CoreAPI.Models.csproj" />
<ProjectReference Include="..\OnlineSalesAutoCrop.CoreAPI.Services\OnlineSalesAutoCrop.CoreAPI.Services.csproj" />
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Connected Services" />
</ItemGroup>
<PropertyGroup Label="Globals">
<SccProjectName></SccProjectName>
<SccProvider></SccProvider>
<SccAuxPath></SccAuxPath>
<SccLocalPath></SccLocalPath>
<UserSecretsId>503f2393-8ec7-4681-85b2-dc86edb77199</UserSecretsId>
<ApplicationIcon>cel.ico</ApplicationIcon>
<DockerfileContext>..\..</DockerfileContext>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<TypeScriptTarget>ES6</TypeScriptTarget>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<TypeScriptTarget>ES6</TypeScriptTarget>
<TypeScriptJSXEmit>None</TypeScriptJSXEmit>
<TypeScriptModuleKind />
<TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
<TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny>
<TypeScriptRemoveComments>False</TypeScriptRemoveComments>
<TypeScriptOutFile />
<TypeScriptOutDir />
<TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations>
<TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError>
<TypeScriptSourceMap>True</TypeScriptSourceMap>
<TypeScriptMapRoot />
<TypeScriptSourceRoot />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DocumentationFile>obj\Debug\netcoreapp3.1\OnlineSalesAutoCrop.CoreAPI.xml</DocumentationFile>
</PropertyGroup>
<ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
</Project>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<NameOfLastUsedPublishProfile>D:\Local\EaseBilling\Api\EaseO2C.CoreAPI\Properties\PublishProfiles\Windows.Publish.pubxml</NameOfLastUsedPublishProfile>
<ActiveDebugProfile>IIS Express</ActiveDebugProfile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,74 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
namespace OnlineSalesAutoCrop.CoreAPI
{
/// <summary>
///
/// </summary>
public class Program
{
/// <summary>
///
/// </summary>
protected Program()
{
//Noting to do here
}
/// <summary>
///
/// </summary>
/// <param name="args"></param>
public static void Main(string[] args)
{
bool hasError = false;
IHost host = CreateHostBuilder(args).Build();
ILogger<Program> logger = host.Services.GetRequiredService<ILogger<Program>>();
try
{
logger.LogInformation("Starting the application...");
host.Run();
}
catch (Exception e)
{
hasError = true;
logger.LogCritical(exception: e, message: "Application terminated unexpectedly.");
}
finally
{
if (hasError)
{
logger.LogCritical(message: "Application encountered an error.");
}
else
{
logger.LogInformation(message: "Application was started.");
}
}
}
/// <summary>
///
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
logging.AddDebug();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseIISIntegration();
webBuilder.UseStartup<Startup>();
});
}
}

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<PublishProvider>FileSystem</PublishProvider>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<ExcludeApp_Data>false</ExcludeApp_Data>
<ProjectGuid>20ddab52-da1b-41f3-90e9-0883efc29c95</ProjectGuid>
<publishUrl>D:\Local\EaseBilling\Deployment\Api</publishUrl>
<DeleteExistingFiles>true</DeleteExistingFiles>
<TargetFramework>net10.0</TargetFramework>
<SelfContained>false</SelfContained>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PublishTargetUrl>D:\Local\EaseBilling\Deployment\Api</_PublishTargetUrl>
<History>True|2026-05-06T11:25:05.5263630Z||;True|2026-03-15T08:59:26.8862757+06:00||;False|2026-03-15T08:57:56.1101162+06:00||;True|2026-03-14T17:09:23.7076829+06:00||;False|2026-03-14T17:08:16.4923030+06:00||;True|2026-02-08T09:20:34.0831167+06:00||;True|2026-01-30T12:23:50.0237173+06:00||;True|2025-11-12T14:17:06.2307022+06:00||;False|2025-11-12T14:14:27.8832414+06:00||;True|2025-09-25T16:15:49.9946130+06:00||;True|2025-09-20T12:22:45.1255126+06:00||;True|2025-08-17T15:53:17.2270097+06:00||;True|2025-08-17T14:48:18.3529589+06:00||;True|2025-08-07T12:08:24.1050561+06:00||;False|2025-08-07T12:05:48.8009082+06:00||;True|2025-08-03T17:18:51.1008385+06:00||;True|2025-07-31T16:51:59.3175380+06:00||;True|2025-07-30T17:28:46.5087066+06:00||;True|2025-06-29T18:08:12.5889769+06:00||;True|2025-06-29T17:58:35.6473413+06:00||;True|2025-06-23T12:54:26.3884725+06:00||;True|2025-06-17T13:31:29.6019090+06:00||;True|2025-06-15T17:32:58.8800113+06:00||;True|2025-06-14T09:58:27.0452245+06:00||;False|2025-06-14T09:57:22.9732446+06:00||;True|2025-06-05T11:59:58.2905247+06:00||;False|2025-06-05T11:58:53.5868035+06:00||;True|2025-05-28T08:52:09.4080712+06:00||;True|2025-05-24T16:44:02.8576636+06:00||;True|2025-05-22T16:06:03.6424921+06:00||;True|2025-05-08T12:15:57.1704658+06:00||;True|2025-05-06T17:58:18.2130338+06:00||;True|2025-05-06T17:24:04.5378833+06:00||;True|2025-05-05T09:19:51.6110361+06:00||;True|2025-04-28T11:43:09.4666162+06:00||;True|2025-04-26T12:33:00.7429590+06:00||;True|2025-04-25T11:30:46.3791417+06:00||;True|2025-04-22T16:16:08.2122693+06:00||;True|2025-04-21T09:09:54.5468791+06:00||;True|2025-04-19T12:55:01.6251882+06:00||;True|2025-04-18T20:11:49.5252316+06:00||;True|2025-04-17T18:08:44.4742942+06:00||;True|2025-04-14T19:04:03.8022194+06:00||;True|2025-04-14T12:36:15.9198937+06:00||;True|2025-04-13T21:52:58.3995889+06:00||;True|2025-04-13T21:22:41.8976783+06:00||;False|2025-04-13T21:21:06.4416709+06:00||;True|2025-04-13T09:20:28.5710537+06:00||;True|2025-04-10T17:28:42.0560047+06:00||;True|2025-04-10T17:08:13.6899576+06:00||;True|2025-04-10T09:23:51.9121346+06:00||;False|2025-04-10T09:22:32.3774181+06:00||;True|2025-04-08T15:00:01.4594832+06:00||;True|2025-04-06T17:07:49.7187834+06:00||;True|2025-03-28T16:52:26.4264204+06:00||;True|2025-03-25T09:04:45.6712077+06:00||;True|2025-03-24T11:01:31.3766223+06:00||;True|2025-03-23T16:22:03.7871495+06:00||;True|2025-03-21T19:06:16.6539314+06:00||;True|2025-03-19T10:50:27.1248564+06:00||;True|2025-03-19T10:04:52.2351919+06:00||;True|2025-03-18T16:45:03.3648012+06:00||;True|2025-03-14T17:30:57.4444995+06:00||;True|2025-03-14T12:12:22.0834501+06:00||;False|2025-03-14T12:08:22.3149387+06:00||;True|2025-03-13T12:12:43.0015928+06:00||;False|2025-03-13T12:08:46.2254864+06:00||;True|2025-03-11T16:30:15.7645714+06:00||;True|2025-03-10T20:00:29.3910451+06:00||;True|2025-03-09T19:34:38.5798710+06:00||;True|2025-03-09T19:11:16.6478785+06:00||;False|2025-03-09T19:09:25.4916140+06:00||;True|2025-03-09T14:13:11.4931705+06:00||;False|2025-03-09T14:11:57.9713338+06:00||;True|2025-02-05T17:34:48.2088527+06:00||;True|2025-02-04T21:02:04.4639904+06:00||;True|2025-02-03T20:14:47.2959982+06:00||;True|2025-02-03T11:51:10.8667150+06:00||;True|2025-02-03T11:21:40.8436307+06:00||;True|2025-01-29T17:36:22.5959619+06:00||;True|2025-01-19T19:59:11.0866750+06:00||;True|2025-01-19T14:29:56.3042387+06:00||;True|2025-01-18T19:37:29.0120111+06:00||;False|2025-01-18T19:36:21.1797009+06:00||;True|2025-01-13T09:58:12.7255011+06:00||;True|2025-01-12T16:12:45.5633586+06:00||;True|2025-01-09T17:27:36.5615426+06:00||;True|2025-01-09T17:14:06.2461997+06:00||;True|2025-01-08T15:56:27.2254650+06:00||;True|2025-01-07T16:42:53.0937028+06:00||;True|2025-01-06T21:10:57.4064745+06:00||;True|2024-12-31T16:23:39.1605617+06:00||;True|2024-12-30T16:49:26.7010350+06:00||;True|2024-12-23T15:18:03.0555471+06:00||;False|2024-12-23T15:13:18.4393430+06:00||;False|2024-12-23T15:12:03.9555165+06:00||;False|2024-12-23T15:09:52.2534646+06:00||;False|2024-12-23T14:58:07.5228553+06:00||;False|2024-12-23T14:57:28.5435288+06:00||;False|2024-12-23T14:53:46.2896217+06:00||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

View File

@ -0,0 +1,35 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"anonymousAuthentication": true,
"windowsAuthentication": false,
"iisExpress": {
"applicationUrl": "http://localhost:4204/"
}
},
"profiles": {
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
"publishAllPorts": true
},
"OnlineSalesAutoCrop.CoreAPI.API": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:4205/"
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"nativeDebugging": false,
"jsWebView2Debugging": false
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,353 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>b2609be8-0a6d-4c06-94f8-d6e6880bca99</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCompanyName</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramAddress</Prompt>
</ReportParameter>
<ReportParameter Name="ProcessDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramProcessDate</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>false</rd:SnapToGrid>
<RightMargin>0.4in</RightMargin>
<LeftMargin>0.5in</LeftMargin>
<BottomMargin>0.29in</BottomMargin>
<rd:ReportID>ecd24c8c-626b-4815-b8fa-3df9c5252e67</rd:ReportID>
<PageWidth>8.27in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtFinalAccount">
<Fields>
<Field Name="Description">
<DataField>Description</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="CurrentAmount">
<DataField>CurrentAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="PreviousAmount">
<DataField>PreviousAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemLevel">
<DataField>ItemLevel</DataField>
<rd:TypeName>System.Int16</rd:TypeName>
</Field>
<Field Name="PrintAmount">
<DataField>PrintAmount</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
<Field Name="PrintSubtotal">
<DataField>PrintSubtotal</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtFinalAccount</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7.32292in</Width>
<Body>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtFinalAccount</DataSetName>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="Description">
<rd:DefaultName>Description</rd:DefaultName>
<Style>
<FontStyle>=IIF(Cint(Fields!ItemLevel.Value)=3, "Italic", "Normal")</FontStyle>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(Cint(Fields!ItemLevel.Value)=4, Space(5), Space((Cint(Fields!ItemLevel.Value)-1)*5)) &amp; Fields!Description.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="CurrentAmount">
<Style>
<BorderStyle>
<Top>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Top>
<Bottom>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
</BorderWidth>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=IIF(CBool(Fields!PrintAmount.Value), Fields!CurrentAmount.Value, "")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.19in</Height>
</TableRow>
</TableRows>
</Details>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox7">
<rd:DefaultName>textbox7</rd:DefaultName>
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox5">
<rd:DefaultName>textbox5</rd:DefaultName>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox4">
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox9">
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Value>Balance Sheet</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox6">
<rd:DefaultName>textbox6</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!ProcessDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Header>
<TableColumns>
<TableColumn>
<Width>4.91292in</Width>
</TableColumn>
<TableColumn>
<Width>1.12in</Width>
</TableColumn>
<TableColumn>
<Width>1.29in</Width>
</TableColumn>
</TableColumns>
</Table>
</ReportItems>
<Height>1.36in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox2">
<Top>0.06875in</Top>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.23875in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.4in</TopMargin>
<PageHeight>11.69in</PageHeight>
</Report>

View File

@ -0,0 +1,459 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>b2609be8-0a6d-4c06-94f8-d6e6880bca99</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCompanyName</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramAddress</Prompt>
</ReportParameter>
<ReportParameter Name="PreviousDate">
<DataType>DateTime</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramPreviousDate</Prompt>
</ReportParameter>
<ReportParameter Name="CurrentDate">
<DataType>DateTime</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>paramCurrentDate</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>false</rd:SnapToGrid>
<RightMargin>0.4in</RightMargin>
<LeftMargin>0.5in</LeftMargin>
<BottomMargin>0.29in</BottomMargin>
<rd:ReportID>ecd24c8c-626b-4815-b8fa-3df9c5252e67</rd:ReportID>
<PageWidth>8.27in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtFinalAccount">
<Fields>
<Field Name="Description">
<DataField>Description</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="CurrentAmount">
<DataField>CurrentAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="PreviousAmount">
<DataField>PreviousAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemLevel">
<DataField>ItemLevel</DataField>
<rd:TypeName>System.Int16</rd:TypeName>
</Field>
<Field Name="PrintAmount">
<DataField>PrintAmount</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
<Field Name="PrintSubtotal">
<DataField>PrintSubtotal</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtFinalAccount</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7.32292in</Width>
<Body>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtFinalAccount</DataSetName>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="Description">
<rd:DefaultName>Description</rd:DefaultName>
<Style>
<FontStyle>=IIF(Cint(Fields!ItemLevel.Value)=3, "Italic", "Normal")</FontStyle>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(Cint(Fields!ItemLevel.Value)=4, Space(5), Space((Cint(Fields!ItemLevel.Value)-1)*5)) &amp; Fields!Description.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="CurrentAmount">
<Style>
<BorderStyle>
<Top>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Top>
<Bottom>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
</BorderWidth>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(CBool(Fields!PrintAmount.Value), Fields!CurrentAmount.Value, "")</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox6">
<Style>
<BorderWidth>
<Default>0.5pt</Default>
</BorderWidth>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<Style>
<BorderStyle>
<Top>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Top>
<Bottom>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
</BorderWidth>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(CBool(Fields!PrintAmount.Value), Fields!PreviousAmount.Value, "")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.19in</Height>
</TableRow>
</TableRows>
</Details>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox21">
<rd:DefaultName>textbox21</rd:DefaultName>
<Style>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextDecoration>Underline</TextDecoration>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox9">
<rd:DefaultName>textbox9</rd:DefaultName>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox3">
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox19">
<rd:DefaultName>textbox19</rd:DefaultName>
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextDecoration>Underline</TextDecoration>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<BorderColor>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Right>Solid</Right>
</BorderStyle>
<BorderWidth>
<Right>1pt</Right>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextDecoration>Underline</TextDecoration>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>9</ZIndex>
<CanGrow>true</CanGrow>
<Value>Balance Sheet Comparison</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox2">
<rd:DefaultName>textbox2</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>8</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Format(Parameters!CurrentDate.Value,"dd.MM.yyyy")</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox5">
<rd:DefaultName>textbox5</rd:DefaultName>
<Style>
<BorderColor>
<Left>Black</Left>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
<Right>1pt</Right>
</BorderWidth>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox7">
<rd:DefaultName>textbox7</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Format(Parameters!PreviousDate.Value,"dd.MM.yyyy")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.26in</Height>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Header>
<TableColumns>
<TableColumn>
<Width>4.82292in</Width>
</TableColumn>
<TableColumn>
<Width>1.17in</Width>
</TableColumn>
<TableColumn>
<Width>0.16in</Width>
</TableColumn>
<TableColumn>
<Width>1.17in</Width>
</TableColumn>
</TableColumns>
</Table>
</ReportItems>
<Height>1.15in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox14">
<Top>0.07292in</Top>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.24209in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.4in</TopMargin>
<PageHeight>11.69in</PageHeight>
</Report>

View File

@ -0,0 +1,977 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>696cb1ee-c179-477b-89ea-5748c2dd7a4e</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>7.7in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCompanyName</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramAddress</Prompt>
</ReportParameter>
<ReportParameter Name="StartDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramStartDate</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramEndDate</Prompt>
</ReportParameter>
<ReportParameter Name="BookType">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>paremBookType</Prompt>
</ReportParameter>
<ReportParameter Name="GLHead">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>paramGLHead</Prompt>
</ReportParameter>
<ReportParameter Name="OpeningBalance">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>paramOpeningBalance</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>10.2in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>true</rd:SnapToGrid>
<RightMargin>0.4in</RightMargin>
<LeftMargin>0.5in</LeftMargin>
<BottomMargin>0.29in</BottomMargin>
<rd:ReportID>9dd1af5d-17a3-49eb-96b4-ff2d77a38b49</rd:ReportID>
<EmbeddedImages>
<EmbeddedImage Name="nec_logo">
<MIMEType>image/bmp</MIMEType>
<ImageData />
</EmbeddedImage>
</EmbeddedImages>
<PageWidth>8.27in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtBankOrCashBook">
<Fields>
<Field Name="TranDate">
<DataField>TranDate</DataField>
<rd:TypeName>System.Date</rd:TypeName>
</Field>
<Field Name="VoucherNo">
<DataField>VoucherNo</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="VoucherRef">
<DataField>VoucherRef</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="AccountCode">
<DataField>AccountCode</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="AccountName">
<DataField>AccountName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="PaidAmount">
<DataField>PaidAmount</DataField>
<rd:TypeName>System.Double</rd:TypeName>
</Field>
<Field Name="ReceivedAmount">
<DataField>ReceivedAmount</DataField>
<rd:TypeName>System.Double</rd:TypeName>
</Field>
<Field Name="ClosingBalance">
<DataField>ClosingBalance</DataField>
<rd:TypeName>System.Double</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtBankOrCashBook</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7.32292in</Width>
<Body>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtBankOrCashBook</DataSetName>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="Date_1">
<rd:DefaultName>Date_1</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<Format>dd MMM yyyy</Format>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!TranDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox12">
<rd:DefaultName>textbox12</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!VoucherNo.Value &amp; " " &amp; Fields!VoucherRef.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="Description_1">
<rd:DefaultName>Description_1</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!AccountCode.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox15">
<rd:DefaultName>textbox15</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<Format>N2</Format>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!AccountName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="PaidAmout">
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(Fields!PaidAmount.Value=0, "", Fields!PaidAmount.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="RcvdAmount">
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(Fields!ReceivedAmount.Value=0, "", Fields!ReceivedAmount.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=IIF(Fields!ClosingBalance.Value&lt;0, "(" &amp; Format(Fields!ClosingBalance.Value,"#,##.00") &amp; ")", Format(Fields!ClosingBalance.Value,"#,##.00"))</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Details>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox20">
<rd:DefaultName>textbox20</rd:DefaultName>
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox45">
<rd:DefaultName>textbox45</rd:DefaultName>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox29">
<rd:DefaultName>textbox29</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox57">
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!BookType.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox16">
<rd:DefaultName>textbox16</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Date range: " &amp; Parameters!StartDate.Value &amp; " to " &amp; Parameters!EndDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox21">
<rd:DefaultName>textbox21</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox8">
<rd:DefaultName>textbox8</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>23</ZIndex>
<CanGrow>true</CanGrow>
<Value>Date</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox9">
<rd:DefaultName>textbox9</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>22</ZIndex>
<CanGrow>true</CanGrow>
<Value>Reference</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox11">
<rd:DefaultName>textbox11</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>21</ZIndex>
<CanGrow>true</CanGrow>
<Value>Posting Code</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox13">
<rd:DefaultName>textbox13</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>20</ZIndex>
<CanGrow>true</CanGrow>
<Value>Description</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox17">
<rd:DefaultName>textbox17</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>19</ZIndex>
<CanGrow>true</CanGrow>
<Value>Paid Amount</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox18">
<rd:DefaultName>textbox18</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>18</ZIndex>
<CanGrow>true</CanGrow>
<Value>Received Amount</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox2">
<rd:DefaultName>textbox2</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>17</ZIndex>
<CanGrow>true</CanGrow>
<Value>Balance</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.37in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<BackgroundColor>White</BackgroundColor>
<BorderColor>
<Left>Black</Left>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
<Top>1pt</Top>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>16</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!GLHead.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox5">
<rd:DefaultName>textbox5</rd:DefaultName>
<Style>
<BackgroundColor>White</BackgroundColor>
<BorderColor>
<Right>Black</Right>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Right>1pt</Right>
<Top>1pt</Top>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>15</ZIndex>
<CanGrow>true</CanGrow>
<Value>Balance B/F:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox3">
<rd:DefaultName>textbox3</rd:DefaultName>
<Style>
<BackgroundColor>White</BackgroundColor>
<BorderColor>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>14</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!OpeningBalance.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Header>
<TableColumns>
<TableColumn>
<Width>0.7in</Width>
</TableColumn>
<TableColumn>
<Width>0.9in</Width>
</TableColumn>
<TableColumn>
<Width>0.8in</Width>
</TableColumn>
<TableColumn>
<Width>2.22292in</Width>
</TableColumn>
<TableColumn>
<Width>0.9in</Width>
</TableColumn>
<TableColumn>
<Width>0.9in</Width>
</TableColumn>
<TableColumn>
<Width>0.9in</Width>
</TableColumn>
</TableColumns>
<Footer>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox6">
<rd:DefaultName>textbox6</rd:DefaultName>
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>13</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox10">
<rd:DefaultName>textbox10</rd:DefaultName>
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>12</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox14">
<rd:DefaultName>textbox14</rd:DefaultName>
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>11</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox19">
<rd:DefaultName>textbox19</rd:DefaultName>
<Style>
<BorderColor>
<Right>Black</Right>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Right>Solid</Right>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Right>1pt</Right>
<Top>1pt</Top>
</BorderWidth>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>10</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="PaidAmount">
<rd:DefaultName>PaidAmount</rd:DefaultName>
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>9</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!PaidAmount.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="ReceivedAmount">
<rd:DefaultName>ReceivedAmount</rd:DefaultName>
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>8</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!ReceivedAmount.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox23">
<rd:DefaultName>textbox23</rd:DefaultName>
<Style>
<BorderColor>
<Left>Black</Left>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
<Top>1pt</Top>
</BorderWidth>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
</TableRows>
</Footer>
</Table>
</ReportItems>
<Height>2.16in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox7">
<Top>0.06875in</Top>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.23875in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.5in</TopMargin>
<PageHeight>11.69in</PageHeight>
</Report>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,350 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>b2609be8-0a6d-4c06-94f8-d6e6880bca99</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCompanyName</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramAddress</Prompt>
</ReportParameter>
<ReportParameter Name="ProcessDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramProcessDate</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>false</rd:SnapToGrid>
<RightMargin>0.4in</RightMargin>
<LeftMargin>0.5in</LeftMargin>
<BottomMargin>0.29in</BottomMargin>
<rd:ReportID>ecd24c8c-626b-4815-b8fa-3df9c5252e67</rd:ReportID>
<PageWidth>8.27in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtFinalAccount">
<Fields>
<Field Name="Description">
<DataField>Description</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="CurrentAmount">
<DataField>CurrentAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="PreviousAmount">
<DataField>PreviousAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemLevel">
<DataField>ItemLevel</DataField>
<rd:TypeName>System.Int16</rd:TypeName>
</Field>
<Field Name="PrintAmount">
<DataField>PrintAmount</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
<Field Name="PrintSubtotal">
<DataField>PrintSubtotal</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtFinalAccount</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7.32292in</Width>
<Body>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtFinalAccount</DataSetName>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="Description">
<rd:DefaultName>Description</rd:DefaultName>
<Style>
<FontStyle>=IIF(Cint(Fields!ItemLevel.Value)=3, "Italic", "Normal")</FontStyle>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Space((Cint(Fields!ItemLevel.Value)-1)*5) &amp; IIF(Fields!Description.Value.ToString().ToLower().Equals("blank"), "" , Fields!Description.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="CurrentAmount">
<Style>
<BorderStyle>
<Top>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Top>
<Bottom>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
</BorderWidth>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=IIF(CBool(Fields!PrintAmount.Value), Fields!CurrentAmount.Value, "")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.19in</Height>
</TableRow>
</TableRows>
</Details>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox11">
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox15">
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox12">
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox13">
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Value>Cash Flow Statement</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox14">
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!ProcessDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox17">
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Header>
<TableColumns>
<TableColumn>
<Width>4.91292in</Width>
</TableColumn>
<TableColumn>
<Width>1.12in</Width>
</TableColumn>
<TableColumn>
<Width>1.29in</Width>
</TableColumn>
</TableColumns>
</Table>
</ReportItems>
<Height>1.36in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox2">
<Top>0.07167in</Top>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.24167in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.4in</TopMargin>
<PageHeight>11.69in</PageHeight>
</Report>

View File

@ -0,0 +1,444 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>b2609be8-0a6d-4c06-94f8-d6e6880bca99</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCompanyName</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramAddress</Prompt>
</ReportParameter>
<ReportParameter Name="PreviousDate">
<DataType>DateTime</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>paramPreviousDate</Prompt>
</ReportParameter>
<ReportParameter Name="CurrentDate">
<DataType>DateTime</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCurrentDate</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>false</rd:SnapToGrid>
<RightMargin>0.4in</RightMargin>
<LeftMargin>0.5in</LeftMargin>
<BottomMargin>0.29in</BottomMargin>
<rd:ReportID>ecd24c8c-626b-4815-b8fa-3df9c5252e67</rd:ReportID>
<PageWidth>8.27in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtFinalAccount">
<Fields>
<Field Name="Description">
<DataField>Description</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="CurrentAmount">
<DataField>CurrentAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="PreviousAmount">
<DataField>PreviousAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemLevel">
<DataField>ItemLevel</DataField>
<rd:TypeName>System.Int16</rd:TypeName>
</Field>
<Field Name="PrintAmount">
<DataField>PrintAmount</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
<Field Name="PrintSubtotal">
<DataField>PrintSubtotal</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtFinalAccount</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7.32292in</Width>
<Body>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtFinalAccount</DataSetName>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="Description">
<rd:DefaultName>Description</rd:DefaultName>
<Style>
<FontStyle>=IIF(Cint(Fields!ItemLevel.Value)=3, "Italic", "Normal")</FontStyle>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(Cint(Fields!ItemLevel.Value)=4, Space(5), Space((Cint(Fields!ItemLevel.Value)-1)*5)) &amp; Fields!Description.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="CurrentAmount">
<Style>
<BorderStyle>
<Top>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Top>
<Bottom>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Bottom>
</BorderStyle>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(CBool(Fields!PrintAmount.Value), Fields!CurrentAmount.Value, "")</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox7">
<rd:DefaultName>textbox7</rd:DefaultName>
<Style>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox3">
<rd:DefaultName>textbox3</rd:DefaultName>
<Style>
<BorderStyle>
<Top>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Top>
<Bottom>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Bottom>
</BorderStyle>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=IIF(CBool(Fields!PrintAmount.Value), Fields!PreviousAmount.Value, "")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.19in</Height>
</TableRow>
</TableRows>
</Details>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox26">
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox1">
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox10">
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox11">
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextDecoration>Underline</TextDecoration>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox2">
<rd:DefaultName>textbox2</rd:DefaultName>
<Style>
<BorderColor>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Right>Solid</Right>
</BorderStyle>
<BorderWidth>
<Right>1pt</Right>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextDecoration>Underline</TextDecoration>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>Cash Flow Comparison</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox5">
<rd:DefaultName>textbox5</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Format(Parameters!CurrentDate.Value,"dd.MM.yyyy")</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<Style>
<BorderColor>
<Left>Black</Left>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
<Right>1pt</Right>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox6">
<rd:DefaultName>textbox6</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Format(Parameters!PreviousDate.Value, "dd.MM.yyyy")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.26in</Height>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Header>
<TableColumns>
<TableColumn>
<Width>4.82292in</Width>
</TableColumn>
<TableColumn>
<Width>1.17in</Width>
</TableColumn>
<TableColumn>
<Width>0.16in</Width>
</TableColumn>
<TableColumn>
<Width>1.17in</Width>
</TableColumn>
</TableColumns>
</Table>
</ReportItems>
<Height>1.13in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox14">
<Top>0.0725in</Top>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.25208in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.4in</TopMargin>
<PageHeight>11.69in</PageHeight>
</Report>

View File

@ -0,0 +1,761 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>696cb1ee-c179-477b-89ea-5748c2dd7a4e</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>7.7in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCompanyName</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramAddress</Prompt>
</ReportParameter>
<ReportParameter Name="StartDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramStartDate</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramEndDate</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>10.2in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>true</rd:SnapToGrid>
<RightMargin>0.4in</RightMargin>
<LeftMargin>0.5in</LeftMargin>
<BottomMargin>0.29in</BottomMargin>
<rd:ReportID>9dd1af5d-17a3-49eb-96b4-ff2d77a38b49</rd:ReportID>
<EmbeddedImages>
<EmbeddedImage Name="nec_logo">
<MIMEType>image/bmp</MIMEType>
<ImageData />
</EmbeddedImage>
</EmbeddedImages>
<PageWidth>8.27in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtDayBook">
<Fields>
<Field Name="TranDate">
<DataField>TranDate</DataField>
<rd:TypeName>System.Date</rd:TypeName>
</Field>
<Field Name="VoucherNo">
<DataField>VoucherNo</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="VoucherType">
<DataField>VoucherType</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="VoucherRef">
<DataField>VoucherRef</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="AccountCode">
<DataField>AccountCode</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="AccountName">
<DataField>AccountName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="DebitAmount">
<DataField>DebitAmount</DataField>
<rd:TypeName>System.Double</rd:TypeName>
</Field>
<Field Name="CreditAmount">
<DataField>CreditAmount</DataField>
<rd:TypeName>System.Double</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtDayBook</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7.32292in</Width>
<Body>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtDayBook</DataSetName>
<TableGroups>
<TableGroup>
<Grouping Name="table1_Group1">
<GroupExpressions>
<GroupExpression>=Fields!TranDate.Value</GroupExpression>
</GroupExpressions>
</Grouping>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox22">
<rd:DefaultName>textbox22</rd:DefaultName>
<Style>
<BorderColor>
<Left>Black</Left>
<Right>Black</Right>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>1pt</Left>
<Right>1pt</Right>
<Top>1pt</Top>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>dd MMM yyyy</Format>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>10</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!TranDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Header>
<Footer>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox5">
<rd:DefaultName>textbox5</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>5pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>9</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Total on " &amp; Format(Fields!TranDate.Value, "dd MMM yyyy")</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox40">
<rd:DefaultName>textbox40</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!DebitAmount.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox41">
<rd:DefaultName>textbox41</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!CreditAmount.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
</TableRows>
</Footer>
</TableGroup>
</TableGroups>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="Date_1">
<rd:DefaultName>Date_1</rd:DefaultName>
<HideDuplicates>table1_Group1</HideDuplicates>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!VoucherNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox12">
<rd:DefaultName>textbox12</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!VoucherType.Value &amp; " " &amp; Fields!VoucherRef.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="Description_1">
<rd:DefaultName>Description_1</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!AccountCode.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox15">
<rd:DefaultName>textbox15</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<Format>N2</Format>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!AccountName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="DebitEUR_1">
<rd:DefaultName>DebitEUR_1</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!DebitAmount.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="CreditEUR_1">
<rd:DefaultName>CreditEUR_1</rd:DefaultName>
<Style>
<BorderColor>
<Left>Black</Left>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Left>Solid</Left>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
</BorderWidth>
<FontSize>8pt</FontSize>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Fields!CreditAmount.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Details>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox20">
<rd:DefaultName>textbox20</rd:DefaultName>
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox45">
<rd:DefaultName>textbox45</rd:DefaultName>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox29">
<rd:DefaultName>textbox29</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox7">
<rd:DefaultName>textbox7</rd:DefaultName>
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>Day Book</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox16">
<rd:DefaultName>textbox16</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Date range: " &amp; Parameters!StartDate.Value &amp; " to " &amp; Parameters!EndDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox8">
<rd:DefaultName>textbox8</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>16</ZIndex>
<CanGrow>true</CanGrow>
<Value>Transaction Reference</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox9">
<rd:DefaultName>textbox9</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>15</ZIndex>
<CanGrow>true</CanGrow>
<Value>Voucher Type &amp; No</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox11">
<rd:DefaultName>textbox11</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>14</ZIndex>
<CanGrow>true</CanGrow>
<Value>Posting Code</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox13">
<rd:DefaultName>textbox13</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>13</ZIndex>
<CanGrow>true</CanGrow>
<Value>Description</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox17">
<rd:DefaultName>textbox17</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>12</ZIndex>
<CanGrow>true</CanGrow>
<Value>Debit Amount</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox18">
<rd:DefaultName>textbox18</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>11</ZIndex>
<CanGrow>true</CanGrow>
<Value>Credit Amount</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.37in</Height>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Header>
<TableColumns>
<TableColumn>
<Width>0.9in</Width>
</TableColumn>
<TableColumn>
<Width>0.9in</Width>
</TableColumn>
<TableColumn>
<Width>0.9in</Width>
</TableColumn>
<TableColumn>
<Width>2.12292in</Width>
</TableColumn>
<TableColumn>
<Width>0.7in</Width>
</TableColumn>
<TableColumn>
<Width>0.9in</Width>
</TableColumn>
<TableColumn>
<Width>0.9in</Width>
</TableColumn>
</TableColumns>
</Table>
</ReportItems>
<Height>2.26in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox50">
<Top>0.06875in</Top>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.23875in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.4in</TopMargin>
<PageHeight>11.69in</PageHeight>
</Report>

View File

@ -0,0 +1,631 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>696cb1ee-c179-477b-89ea-5748c2dd7a4e</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>7.7in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCompanyName</Prompt>
</ReportParameter>
<ReportParameter Name="StartDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramStartDate</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramEndDate</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramAddress</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>10.2in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>false</rd:SnapToGrid>
<RightMargin>0.4in</RightMargin>
<LeftMargin>0.5in</LeftMargin>
<BottomMargin>0.29in</BottomMargin>
<rd:ReportID>9dd1af5d-17a3-49eb-96b4-ff2d77a38b49</rd:ReportID>
<EmbeddedImages>
<EmbeddedImage Name="nec_logo">
<MIMEType>image/bmp</MIMEType>
<ImageData />
</EmbeddedImage>
</EmbeddedImages>
<PageWidth>8.27in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtDayBookSummary">
<Fields>
<Field Name="TranDate">
<DataField>TranDate</DataField>
<rd:TypeName>System.Date</rd:TypeName>
</Field>
<Field Name="VoucherType">
<DataField>VoucherType</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="VoucherNo">
<DataField>VoucherNo</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="DebitAmount">
<DataField>DebitAmount</DataField>
<rd:TypeName>System.Double</rd:TypeName>
</Field>
<Field Name="CreditAmount">
<DataField>CreditAmount</DataField>
<rd:TypeName>System.Double</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtDayBookSummary</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7.32292in</Width>
<Body>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtDayBookSummary</DataSetName>
<TableGroups>
<TableGroup>
<Grouping Name="table1_Group1">
<GroupExpressions>
<GroupExpression>=Fields!TranDate.Value</GroupExpression>
</GroupExpressions>
</Grouping>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox9">
<rd:DefaultName>textbox9</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>600</FontWeight>
<Format>dd MMM yyyy</Format>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!TranDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Header>
<Footer>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox3">
<rd:DefaultName>textbox3</rd:DefaultName>
<Style>
<BorderColor>
<Right>Black</Right>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Right>0.5pt</Right>
<Top>1pt</Top>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>600</FontWeight>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>5pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Total on " &amp; Format(Fields!TranDate.Value, "dd MMM yyyy")</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox53">
<rd:DefaultName>textbox53</rd:DefaultName>
<Style>
<BorderColor>
<Right>Black</Right>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Right>0.5pt</Right>
<Top>1pt</Top>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!DebitAmount.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox54">
<rd:DefaultName>textbox54</rd:DefaultName>
<Style>
<BorderColor>
<Right>Black</Right>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Right>0.5pt</Right>
<Top>1pt</Top>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!CreditAmount.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
</TableRows>
</Footer>
</TableGroup>
</TableGroups>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="VoucherType">
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<Format>dd-MMM-yyyy</Format>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!VoucherType.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="VoucherNo">
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!VoucherNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="DebitAmount">
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!DebitAmount.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="CreditAmount">
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Fields!CreditAmount.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Details>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox20">
<rd:DefaultName>textbox20</rd:DefaultName>
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox45">
<rd:DefaultName>textbox45</rd:DefaultName>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox29">
<rd:DefaultName>textbox29</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox8">
<Style>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>Day Book (Consolidated by Voucher Type)</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox5">
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Date range: " &amp; Parameters!StartDate.Value &amp; " to " &amp; Parameters!EndDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox10">
<rd:DefaultName>textbox10</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>11</ZIndex>
<CanGrow>true</CanGrow>
<Value>Voucher Type</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox11">
<rd:DefaultName>textbox11</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>10</ZIndex>
<CanGrow>true</CanGrow>
<Value>Transaction Reference</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox38">
<rd:DefaultName>textbox38</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>Debit Amount</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox13">
<rd:DefaultName>textbox13</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>8</ZIndex>
<CanGrow>true</CanGrow>
<Value>Credit Amount</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Header>
<TableColumns>
<TableColumn>
<Width>1.75in</Width>
</TableColumn>
<TableColumn>
<Width>2.07292in</Width>
</TableColumn>
<TableColumn>
<Width>0.75in</Width>
</TableColumn>
<TableColumn>
<Width>1in</Width>
</TableColumn>
<TableColumn>
<Width>1.75in</Width>
</TableColumn>
</TableColumns>
</Table>
</ReportItems>
<Height>2.04in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox32">
<Top>0.07125in</Top>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.24125in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.4in</TopMargin>
<PageHeight>11.69in</PageHeight>
</Report>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,916 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>01800665-9863-429f-9a2f-b7d9eaec7b5d</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Company Name</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Address</Prompt>
</ReportParameter>
<ReportParameter Name="InstallNo">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>InstallNo</Prompt>
</ReportParameter>
<ReportParameter Name="InstallDate">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Installation Date</Prompt>
</ReportParameter>
<ReportParameter Name="FAItemCode">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Fixed Asset Item Code</Prompt>
</ReportParameter>
<ReportParameter Name="FAItemName">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Fixed Asset Item Name</Prompt>
</ReportParameter>
<ReportParameter Name="InstallLocation">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Install Location</Prompt>
</ReportParameter>
<ReportParameter Name="AssignedEmployee">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Assigned to Employee</Prompt>
</ReportParameter>
<ReportParameter Name="AssignedDate">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Assigned Date</Prompt>
</ReportParameter>
<ReportParameter Name="Remarks">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Remarks</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:SnapToGrid>true</rd:SnapToGrid>
<RightMargin>0.65in</RightMargin>
<LeftMargin>0.65in</LeftMargin>
<BottomMargin>0.4in</BottomMargin>
<rd:ReportID>699cfcc1-0331-4b62-92eb-a0592a11defb</rd:ReportID>
<PageWidth>8.3in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtFAItem">
<Fields>
<Field Name="ItemSerialNo">
<DataField>ItemSerialNo</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemDescription">
<DataField>ItemDescription</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="AcquisitionTime">
<DataField>AcquisitionTime</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtFAItem</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7in</Width>
<Body>
<ColumnSpacing>0.01in</ColumnSpacing>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtFAItem</DataSetName>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="ItemSerialNo">
<rd:DefaultName>ItemSerialNo</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!ItemSerialNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="Description">
<rd:DefaultName>Description</rd:DefaultName>
<Style>
<BorderColor>
<Left>Black</Left>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!ItemDescription.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="AcquisitionDate">
<rd:DefaultName>AcquisitionDate</rd:DefaultName>
<Style>
<BorderColor>
<Left>Black</Left>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Right>0.5pt</Right>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<Format>dd MMM yyyy</Format>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Fields!AcquisitionTime.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.19in</Height>
</TableRow>
</TableRows>
</Details>
<Style>
<FontSize>9pt</FontSize>
</Style>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox25">
<rd:DefaultName>textbox25</rd:DefaultName>
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>29</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox29">
<rd:DefaultName>textbox29</rd:DefaultName>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>28</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox20">
<rd:DefaultName>textbox20</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>27</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox10">
<rd:DefaultName>textbox10</rd:DefaultName>
<Style>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>26</ZIndex>
<CanGrow>true</CanGrow>
<Value>Installation of Fixed Asset</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>25</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox6">
<rd:DefaultName>textbox6</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>24</ZIndex>
<CanGrow>true</CanGrow>
<Value>Installation No</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox7">
<rd:DefaultName>textbox7</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>23</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!InstallNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox16">
<rd:DefaultName>textbox16</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>22</ZIndex>
<CanGrow>true</CanGrow>
<Value>Installation Date</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox45">
<rd:DefaultName>textbox45</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>21</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!InstallDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox13">
<rd:DefaultName>textbox13</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>20</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox9">
<rd:DefaultName>textbox9</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>19</ZIndex>
<CanGrow>true</CanGrow>
<Value>Fixed Asset Item Code</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox46">
<rd:DefaultName>textbox46</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>18</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!FAItemCode.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox5">
<rd:DefaultName>textbox5</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>17</ZIndex>
<CanGrow>true</CanGrow>
<Value>Fixed Asset Item Name</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox47">
<rd:DefaultName>textbox47</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>16</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!FAItemName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox19">
<rd:DefaultName>textbox19</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>15</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Left>Black</Left>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Left>Solid</Left>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>14</ZIndex>
<CanGrow>true</CanGrow>
<Value>Serial</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox2">
<rd:DefaultName>textbox2</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>13</ZIndex>
<CanGrow>true</CanGrow>
<Value>Description</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox3">
<rd:DefaultName>textbox3</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Right>Black</Right>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Right>0.5pt</Right>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>12</ZIndex>
<CanGrow>true</CanGrow>
<Value>Acquisition Date</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Header>
<TableColumns>
<TableColumn>
<Width>1.4in</Width>
</TableColumn>
<TableColumn>
<Width>0.4in</Width>
</TableColumn>
<TableColumn>
<Width>3.1in</Width>
</TableColumn>
<TableColumn>
<Width>0.9in</Width>
</TableColumn>
<TableColumn>
<Width>1.2in</Width>
</TableColumn>
</TableColumns>
<Height>3.06in</Height>
<Footer>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox22">
<rd:DefaultName>textbox22</rd:DefaultName>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox33">
<rd:DefaultName>textbox33</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Value>Install Location</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox52">
<rd:DefaultName>textbox52</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!InstallLocation.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox36">
<rd:DefaultName>textbox36</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value>Assigned to Employee</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox53">
<rd:DefaultName>textbox53</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!AssignedEmployee.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox39">
<rd:DefaultName>textbox39</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>9</ZIndex>
<CanGrow>true</CanGrow>
<Value>Assigned Date</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox54">
<rd:DefaultName>textbox54</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>8</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!AssignedDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox42">
<rd:DefaultName>textbox42</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>11</ZIndex>
<CanGrow>true</CanGrow>
<Value>Remarks</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox55">
<rd:DefaultName>textbox55</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>10</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!Remarks.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Footer>
</Table>
</ReportItems>
<Height>3.26in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox59">
<Style>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>0.5pt</Top>
</BorderWidth>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.17in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.65in</TopMargin>
<PageHeight>11.7in</PageHeight>
</Report>

View File

@ -0,0 +1,956 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>01800665-9863-429f-9a2f-b7d9eaec7b5d</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Company Name</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Address</Prompt>
</ReportParameter>
<ReportParameter Name="TxnNo">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Txn No</Prompt>
</ReportParameter>
<ReportParameter Name="TxnDate">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Txn Date</Prompt>
</ReportParameter>
<ReportParameter Name="RefNo">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Ref No</Prompt>
</ReportParameter>
<ReportParameter Name="ItemName">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Item Name</Prompt>
</ReportParameter>
<ReportParameter Name="ItemSerialNo">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Item Serial No</Prompt>
</ReportParameter>
<ReportParameter Name="ItemDescription">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Item Description</Prompt>
</ReportParameter>
<ReportParameter Name="ItemBookValue">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Item Book Value</Prompt>
</ReportParameter>
<ReportParameter Name="ReduceValue">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Reduce Value</Prompt>
</ReportParameter>
<ReportParameter Name="NewBookValue">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>New Book Value</Prompt>
</ReportParameter>
<ReportParameter Name="Remarks">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Remarks</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:SnapToGrid>true</rd:SnapToGrid>
<RightMargin>0.65in</RightMargin>
<LeftMargin>0.65in</LeftMargin>
<BottomMargin>0.4in</BottomMargin>
<rd:ReportID>699cfcc1-0331-4b62-92eb-a0592a11defb</rd:ReportID>
<PageWidth>8.3in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtFAItem">
<Fields>
<Field Name="ItemSerialNo">
<DataField>ItemSerialNo</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemDescription">
<DataField>ItemDescription</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtFAItem</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7in</Width>
<Body>
<ColumnSpacing>0.01in</ColumnSpacing>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtFAItem</DataSetName>
<Style>
<FontSize>9pt</FontSize>
</Style>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox25">
<rd:DefaultName>textbox25</rd:DefaultName>
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>28</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox29">
<rd:DefaultName>textbox29</rd:DefaultName>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>27</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox20">
<rd:DefaultName>textbox20</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>26</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.21in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox10">
<rd:DefaultName>textbox10</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>25</ZIndex>
<CanGrow>true</CanGrow>
<Value>Reduce Asset Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox41">
<rd:DefaultName>textbox41</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>24</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox14">
<rd:DefaultName>textbox14</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>23</ZIndex>
<CanGrow>true</CanGrow>
<Value>Transaction No</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox7">
<rd:DefaultName>textbox7</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox12">
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>22</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!TxnNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox16">
<rd:DefaultName>textbox16</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>21</ZIndex>
<CanGrow>true</CanGrow>
<Value>Value Reduced Date</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox17">
<rd:DefaultName>textbox17</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox45">
<rd:DefaultName>textbox45</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>20</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!TxnDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox27">
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>21</ZIndex>
<CanGrow>true</CanGrow>
<Value>Reference No</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox28">
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox33">
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>20</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!RefNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox3">
<rd:DefaultName>textbox3</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>19</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.12in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox11">
<rd:DefaultName>textbox11</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>18</ZIndex>
<CanGrow>true</CanGrow>
<Value>Item Name</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox19">
<rd:DefaultName>textbox19</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox8">
<rd:DefaultName>textbox8</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>17</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!ItemName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox30">
<rd:DefaultName>textbox30</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>16</ZIndex>
<CanGrow>true</CanGrow>
<Value>Serial Number</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox22">
<rd:DefaultName>textbox22</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox6">
<rd:DefaultName>textbox6</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>15</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!ItemSerialNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>Item Description</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox23">
<rd:DefaultName>textbox23</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox2">
<rd:DefaultName>textbox2</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!ItemDescription.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox13">
<rd:DefaultName>textbox13</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>Book Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox24">
<rd:DefaultName>textbox24</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox15">
<rd:DefaultName>textbox15</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!ItemBookValue.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
</TableRows>
</Header>
<TableColumns>
<TableColumn>
<Width>2.1in</Width>
</TableColumn>
<TableColumn>
<Width>0.1in</Width>
</TableColumn>
<TableColumn>
<Width>2.7in</Width>
</TableColumn>
<TableColumn>
<Width>2.1in</Width>
</TableColumn>
</TableColumns>
<Footer>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox31">
<rd:DefaultName>textbox31</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>Value Reduced</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox38">
<rd:DefaultName>textbox38</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox32">
<rd:DefaultName>textbox32</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!ReduceValue.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox26">
<rd:DefaultName>textbox26</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.12in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox35">
<rd:DefaultName>textbox35</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>New Book Value after Reduction</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox39">
<rd:DefaultName>textbox39</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox36">
<rd:DefaultName>textbox36</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!NewBookValue.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox42">
<rd:DefaultName>textbox42</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>Remarks</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox40">
<rd:DefaultName>textbox40</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>:</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox55">
<rd:DefaultName>textbox55</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Remarks.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
</TableRows>
</Footer>
</Table>
</ReportItems>
<Height>3.35in</Height>
</Body>
<Language>en-US</Language>
<TopMargin>0.65in</TopMargin>
<PageHeight>11.7in</PageHeight>
</Report>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,860 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>01800665-9863-429f-9a2f-b7d9eaec7b5d</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Company Name</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Address</Prompt>
</ReportParameter>
<ReportParameter Name="TransferNo">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Transfer No</Prompt>
</ReportParameter>
<ReportParameter Name="TransferDate">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Transfer Date</Prompt>
</ReportParameter>
<ReportParameter Name="FromLocation">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>From Location</Prompt>
</ReportParameter>
<ReportParameter Name="ToLocation">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>To Location</Prompt>
</ReportParameter>
<ReportParameter Name="FAItemCode">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Fixed Asset Item Code</Prompt>
</ReportParameter>
<ReportParameter Name="FAItemName">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Fixed Asset Item Name</Prompt>
</ReportParameter>
<ReportParameter Name="AssignedEmployee">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Assigned to Employee</Prompt>
</ReportParameter>
<ReportParameter Name="Remarks">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Remarks</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:SnapToGrid>true</rd:SnapToGrid>
<RightMargin>0.65in</RightMargin>
<LeftMargin>0.65in</LeftMargin>
<BottomMargin>0.4in</BottomMargin>
<rd:ReportID>699cfcc1-0331-4b62-92eb-a0592a11defb</rd:ReportID>
<PageWidth>8.3in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtFAItem">
<Fields>
<Field Name="ItemSerialNo">
<DataField>ItemSerialNo</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemDescription">
<DataField>ItemDescription</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtFAItem</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7in</Width>
<Body>
<ColumnSpacing>0.01in</ColumnSpacing>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtFAItem</DataSetName>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="ItemSerialNo">
<rd:DefaultName>ItemSerialNo</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!ItemSerialNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="Description">
<rd:DefaultName>Description</rd:DefaultName>
<Style>
<BorderColor>
<Left>Black</Left>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Right>0.5pt</Right>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Fields!ItemDescription.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.19in</Height>
</TableRow>
</TableRows>
</Details>
<Style>
<FontSize>9pt</FontSize>
</Style>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox25">
<rd:DefaultName>textbox25</rd:DefaultName>
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>28</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox29">
<rd:DefaultName>textbox29</rd:DefaultName>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>27</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox20">
<rd:DefaultName>textbox20</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>26</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox10">
<rd:DefaultName>textbox10</rd:DefaultName>
<Style>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>25</ZIndex>
<CanGrow>true</CanGrow>
<Value>Transfer of Fixed Asset</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>24</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox14">
<rd:DefaultName>textbox14</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>23</ZIndex>
<CanGrow>true</CanGrow>
<Value>Transfer No</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox12">
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>22</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!TransferNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox16">
<rd:DefaultName>textbox16</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>21</ZIndex>
<CanGrow>true</CanGrow>
<Value>Transfer Date</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox45">
<rd:DefaultName>textbox45</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>20</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!TransferDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox3">
<rd:DefaultName>textbox3</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>19</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox11">
<rd:DefaultName>textbox11</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>18</ZIndex>
<CanGrow>true</CanGrow>
<Value>From Location</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox8">
<rd:DefaultName>textbox8</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>17</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!FromLocation.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox30">
<rd:DefaultName>textbox30</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>16</ZIndex>
<CanGrow>true</CanGrow>
<Value>To Location</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox6">
<rd:DefaultName>textbox6</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>15</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!ToLocation.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox43">
<rd:DefaultName>textbox43</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>14</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox9">
<rd:DefaultName>textbox9</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>13</ZIndex>
<CanGrow>true</CanGrow>
<Value>Asset Type Code</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox46">
<rd:DefaultName>textbox46</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>12</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!FAItemCode.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox5">
<rd:DefaultName>textbox5</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>11</ZIndex>
<CanGrow>true</CanGrow>
<Value>Asset Type Name</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox47">
<rd:DefaultName>textbox47</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>10</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!FAItemName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox19">
<rd:DefaultName>textbox19</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>9</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Left>Black</Left>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Left>Solid</Left>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>8</ZIndex>
<CanGrow>true</CanGrow>
<Value>Serial</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox2">
<rd:DefaultName>textbox2</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Right>0.5pt</Right>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value>Description</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Header>
<TableColumns>
<TableColumn>
<Width>1.6in</Width>
</TableColumn>
<TableColumn>
<Width>3.3in</Width>
</TableColumn>
<TableColumn>
<Width>2.1in</Width>
</TableColumn>
</TableColumns>
<Height>3.16in</Height>
<Footer>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox22">
<rd:DefaultName>textbox22</rd:DefaultName>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox33">
<rd:DefaultName>textbox33</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>Assigned To Employee</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox52">
<rd:DefaultName>textbox52</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!AssignedEmployee.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox42">
<rd:DefaultName>textbox42</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>Remarks</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox55">
<rd:DefaultName>textbox55</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!Remarks.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Footer>
</Table>
</ReportItems>
<Height>3.26in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox59">
<Style>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>0.5pt</Top>
</BorderWidth>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.17in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.65in</TopMargin>
<PageHeight>11.7in</PageHeight>
</Report>

View File

@ -0,0 +1,980 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>01800665-9863-429f-9a2f-b7d9eaec7b5d</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Company Name</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Address</Prompt>
</ReportParameter>
<ReportParameter Name="WriteOffNo">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Write Off No</Prompt>
</ReportParameter>
<ReportParameter Name="WriteOffDate">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Write Off Date</Prompt>
</ReportParameter>
<ReportParameter Name="Remarks">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Remarks</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:SnapToGrid>true</rd:SnapToGrid>
<RightMargin>0.65in</RightMargin>
<LeftMargin>0.65in</LeftMargin>
<BottomMargin>0.4in</BottomMargin>
<rd:ReportID>699cfcc1-0331-4b62-92eb-a0592a11defb</rd:ReportID>
<PageWidth>11.7in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtFAItem">
<Fields>
<Field Name="ItemCode">
<DataField>ItemCode</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemName">
<DataField>ItemName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemSerialNo">
<DataField>ItemSerialNo</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemDescription">
<DataField>ItemDescription</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Specification">
<DataField>Specification</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="DprnValue">
<DataField>DprnValue</DataField>
<rd:TypeName>System.Decimal</rd:TypeName>
</Field>
<Field Name="BookValue">
<DataField>BookValue</DataField>
<rd:TypeName>System.Decimal</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtFAItem</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>10.4in</Width>
<Body>
<ColumnSpacing>0.01in</ColumnSpacing>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtFAItem</DataSetName>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="ItemCode">
<rd:DefaultName>ItemCode</rd:DefaultName>
<Style>
<BorderStyle>
<Left>Groove</Left>
<Bottom>Groove</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!ItemCode.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="ItemName">
<rd:DefaultName>ItemName</rd:DefaultName>
<Style>
<BorderStyle>
<Left>Groove</Left>
<Bottom>Groove</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!ItemName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="ItemSerialNo">
<rd:DefaultName>ItemSerialNo</rd:DefaultName>
<Style>
<BorderStyle>
<Left>Groove</Left>
<Bottom>Groove</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!ItemSerialNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="ItemDescription">
<rd:DefaultName>ItemDescription</rd:DefaultName>
<Style>
<BorderStyle>
<Left>Groove</Left>
<Bottom>Groove</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!ItemDescription.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="BookValue">
<rd:DefaultName>BookValue</rd:DefaultName>
<Style>
<BorderStyle>
<Left>Groove</Left>
<Bottom>Groove</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!BookValue.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="DprnValue">
<rd:DefaultName>DprnValue</rd:DefaultName>
<Style>
<BorderStyle>
<Left>Groove</Left>
<Right>Groove</Right>
<Bottom>Groove</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Right>0.5pt</Right>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Fields!DprnValue.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.19in</Height>
</TableRow>
</TableRows>
</Details>
<Style>
<FontSize>9pt</FontSize>
</Style>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox25">
<rd:DefaultName>textbox25</rd:DefaultName>
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>30</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox29">
<rd:DefaultName>textbox29</rd:DefaultName>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>29</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>6</ColSpan>
<ReportItems>
<Textbox Name="textbox20">
<rd:DefaultName>textbox20</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>28</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>6</ColSpan>
<ReportItems>
<Textbox Name="textbox10">
<rd:DefaultName>textbox10</rd:DefaultName>
<Style>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>27</ZIndex>
<CanGrow>true</CanGrow>
<Value>Write Off of Fixed Asset</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>6</ColSpan>
<ReportItems>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>26</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox14">
<rd:DefaultName>textbox14</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>25</ZIndex>
<CanGrow>true</CanGrow>
<Value>Write off Number</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox53">
<rd:DefaultName>textbox53</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>24</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!WriteOffNo.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox16">
<rd:DefaultName>textbox16</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>23</ZIndex>
<CanGrow>true</CanGrow>
<Value>Write Off Date</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox54">
<rd:DefaultName>textbox54</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>22</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!WriteOffDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>6</ColSpan>
<ReportItems>
<Textbox Name="textbox3">
<rd:DefaultName>textbox3</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>21</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Left>Black</Left>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Left>Solid</Left>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>20</ZIndex>
<CanGrow>true</CanGrow>
<Value>Item Code</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox57">
<rd:DefaultName>textbox57</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Right>0.5pt</Right>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>19</ZIndex>
<CanGrow>true</CanGrow>
<Value>Item Name</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox46">
<rd:DefaultName>textbox46</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Right>0.5pt</Right>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>18</ZIndex>
<CanGrow>true</CanGrow>
<Value>Serial No</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox34">
<rd:DefaultName>textbox34</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Right>0.5pt</Right>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>17</ZIndex>
<CanGrow>true</CanGrow>
<Value>Description</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox2">
<rd:DefaultName>textbox2</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Right>0.5pt</Right>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>16</ZIndex>
<CanGrow>true</CanGrow>
<Value>Book Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox61">
<rd:DefaultName>textbox61</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderColor>
<Top>Black</Top>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
<Top>Solid</Top>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Right>0.5pt</Right>
<Top>0.5pt</Top>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>15</ZIndex>
<CanGrow>true</CanGrow>
<Value>Depreciation Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
</TableRows>
</Header>
<TableColumns>
<TableColumn>
<Width>1.15in</Width>
</TableColumn>
<TableColumn>
<Width>2.1in</Width>
</TableColumn>
<TableColumn>
<Width>1.65in</Width>
</TableColumn>
<TableColumn>
<Width>3in</Width>
</TableColumn>
<TableColumn>
<Width>1.25in</Width>
</TableColumn>
<TableColumn>
<Width>1.25in</Width>
</TableColumn>
</TableColumns>
<Footer>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox5">
<rd:DefaultName>textbox5</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>11</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox6">
<rd:DefaultName>textbox6</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>10</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox7">
<rd:DefaultName>textbox7</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>9</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox11">
<rd:DefaultName>textbox11</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>8</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="BookValue_1">
<rd:DefaultName>BookValue_1</rd:DefaultName>
<Style>
<BorderStyle>
<Left>Groove</Left>
<Bottom>Groove</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!BookValue.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="DprnValue_1">
<rd:DefaultName>DprnValue_1</rd:DefaultName>
<Style>
<BorderStyle>
<Left>Groove</Left>
<Right>Groove</Right>
<Bottom>Groove</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
<Left>0.5pt</Left>
<Right>0.5pt</Right>
<Bottom>0.5pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!DprnValue.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>6</ColSpan>
<ReportItems>
<Textbox Name="textbox22">
<rd:DefaultName>textbox22</rd:DefaultName>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>12</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.1in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox42">
<rd:DefaultName>textbox42</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>14</ZIndex>
<CanGrow>true</CanGrow>
<Value>Remarks</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox60">
<rd:DefaultName>textbox60</rd:DefaultName>
<Style>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>13</ZIndex>
<CanGrow>true</CanGrow>
<Value>=": " &amp; Parameters!Remarks.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Footer>
</Table>
</ReportItems>
<Height>2.18in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox59">
<Style>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>0.5pt</Top>
</BorderWidth>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.17in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.65in</TopMargin>
<PageHeight>8.3in</PageHeight>
</Report>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,678 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>696cb1ee-c179-477b-89ea-5748c2dd7a4e</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>7.7in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCompanyName</Prompt>
</ReportParameter>
<ReportParameter Name="StartDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramStartDate</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramEndDate</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramAddress</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>10.2in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>false</rd:SnapToGrid>
<RightMargin>0.4in</RightMargin>
<LeftMargin>0.5in</LeftMargin>
<BottomMargin>0.29in</BottomMargin>
<rd:ReportID>9dd1af5d-17a3-49eb-96b4-ff2d77a38b49</rd:ReportID>
<PageWidth>8.27in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtTurnover">
<Fields>
<Field Name="AccountCode">
<DataField>AccountCode</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="AccountName">
<DataField>AccountName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="MonthYear">
<DataField>MonthYear</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="CreditAmount">
<DataField>CreditAmount</DataField>
<rd:TypeName>System.Double</rd:TypeName>
</Field>
<Field Name="DebitAmount">
<DataField>DebitAmount</DataField>
<rd:TypeName>System.Double</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtTurnover</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7.32292in</Width>
<Body>
<ColumnSpacing>0.05in</ColumnSpacing>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtTurnover</DataSetName>
<TableGroups>
<TableGroup>
<Grouping Name="table1_Group1">
<GroupExpressions>
<GroupExpression>=Fields!AccountCode.Value</GroupExpression>
</GroupExpressions>
<PageBreakAtEnd>true</PageBreakAtEnd>
</Grouping>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>23</ZIndex>
<CanGrow>true</CanGrow>
<Value>GL Head</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox2">
<rd:DefaultName>textbox2</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>22</ZIndex>
<CanGrow>true</CanGrow>
<Value>Description</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox10">
<rd:DefaultName>textbox10</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>21</ZIndex>
<CanGrow>true</CanGrow>
<Value>Month</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>18</ZIndex>
<CanGrow>true</CanGrow>
<Value>Debit Amount</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox6">
<rd:DefaultName>textbox6</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>17</ZIndex>
<CanGrow>true</CanGrow>
<Value>Credit Amount</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Header>
<Footer>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox5">
<rd:DefaultName>textbox5</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>5pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>11</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Total of " &amp; Fields!AccountName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox40">
<rd:DefaultName>textbox40</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=SUM(Fields!DebitAmount.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox41">
<rd:DefaultName>textbox41</rd:DefaultName>
<Style>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=SUM(Fields!CreditAmount.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Footer>
</TableGroup>
</TableGroups>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="AccountCode">
<HideDuplicates>table1_Group1</HideDuplicates>
<Style>
<BorderColor>
<Left>Black</Left>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
<Right>1pt</Right>
</BorderWidth>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>8</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!AccountCode.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="AccountName">
<HideDuplicates>table1_Group1</HideDuplicates>
<Style>
<BorderColor>
<Left>Black</Left>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
<Right>1pt</Right>
</BorderWidth>
<FontSize>8pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!AccountName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="MonthYear">
<Style>
<BorderColor>
<Left>Black</Left>
<Right>Black</Right>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
<Right>1pt</Right>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>8pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!MonthYear.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="DebitAmount">
<Style>
<BorderColor>
<Left>Black</Left>
<Right>Black</Right>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
<Right>1pt</Right>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>8pt</FontSize>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!DebitAmount.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="CreditAmount">
<Style>
<BorderColor>
<Left>Black</Left>
<Right>Black</Right>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
<Right>1pt</Right>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>8pt</FontSize>
<Format>N2</Format>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Fields!CreditAmount.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Details>
<Style>
<BorderWidth>
<Default>0.5pt</Default>
</BorderWidth>
</Style>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox20">
<rd:DefaultName>textbox20</rd:DefaultName>
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox9">
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox29">
<rd:DefaultName>textbox29</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox3">
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>Mothly Turnover Report</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox8">
<Style>
<FontSize>9pt</FontSize>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="From " &amp; Parameters!StartDate.Value &amp; " to " &amp; Parameters!EndDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>5</ColSpan>
<ReportItems>
<Textbox Name="textbox7">
<rd:DefaultName>textbox7</rd:DefaultName>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Header>
<TableColumns>
<TableColumn>
<Width>0.87in</Width>
</TableColumn>
<TableColumn>
<Width>3.15292in</Width>
</TableColumn>
<TableColumn>
<Width>1in</Width>
</TableColumn>
<TableColumn>
<Width>1.15in</Width>
</TableColumn>
<TableColumn>
<Width>1.15in</Width>
</TableColumn>
</TableColumns>
</Table>
</ReportItems>
<Height>1.77in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox11">
<Top>0.07125in</Top>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.24125in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.4in</TopMargin>
<PageHeight>11.69in</PageHeight>
</Report>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,342 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>b2609be8-0a6d-4c06-94f8-d6e6880bca99</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCompanyName</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramAddress</Prompt>
</ReportParameter>
<ReportParameter Name="ProcessDate">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramProcessDate</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>false</rd:SnapToGrid>
<RightMargin>0.4in</RightMargin>
<LeftMargin>0.5in</LeftMargin>
<BottomMargin>0.29in</BottomMargin>
<rd:ReportID>ecd24c8c-626b-4815-b8fa-3df9c5252e67</rd:ReportID>
<PageWidth>8.27in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtFinalAccount">
<Fields>
<Field Name="Description">
<DataField>Description</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="CurrentAmount">
<DataField>CurrentAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="PreviousAmount">
<DataField>PreviousAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemLevel">
<DataField>ItemLevel</DataField>
<rd:TypeName>System.Int16</rd:TypeName>
</Field>
<Field Name="PrintAmount">
<DataField>PrintAmount</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
<Field Name="PrintSubtotal">
<DataField>PrintSubtotal</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtFinalAccount</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7.32292in</Width>
<Body>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtFinalAccount</DataSetName>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="Description">
<rd:DefaultName>Description</rd:DefaultName>
<Style>
<FontStyle>=IIF(Cint(Fields!ItemLevel.Value)=3, "Italic", "Normal")</FontStyle>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(Cint(Fields!ItemLevel.Value)=4, Space(5), Space((Cint(Fields!ItemLevel.Value)-1)*5)) &amp; Fields!Description.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="CurrentAmount">
<Style>
<BorderStyle>
<Top>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Top>
<Bottom>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Bottom>
</BorderStyle>
<BorderWidth>
<Default>0.5pt</Default>
</BorderWidth>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=IIF(CBool(Fields!PrintAmount.Value), Fields!CurrentAmount.Value, "")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.19in</Height>
</TableRow>
</TableRows>
</Details>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox9">
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>2</ColSpan>
<ReportItems>
<Textbox Name="textbox13">
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>3</ZIndex>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox10">
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>6</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox11">
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Left</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<Value>Profit/Loss Statement</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox12">
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>4</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Parameters!ProcessDate.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.22in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
</TableRows>
</Header>
<TableColumns>
<TableColumn>
<Width>4.91292in</Width>
</TableColumn>
<TableColumn>
<Width>1.12in</Width>
</TableColumn>
<TableColumn>
<Width>1.29in</Width>
</TableColumn>
</TableColumns>
</Table>
</ReportItems>
<Height>1.36in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox2">
<Top>0.07167in</Top>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>3pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.24167in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.4in</TopMargin>
<PageHeight>11.69in</PageHeight>
</Report>

View File

@ -0,0 +1,447 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="DummyDataSource">
<rd:DataSourceID>b2609be8-0a6d-4c06-94f8-d6e6880bca99</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString />
</ConnectionProperties>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="CompanyName">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCompanyName</Prompt>
</ReportParameter>
<ReportParameter Name="Address">
<DataType>String</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramAddress</Prompt>
</ReportParameter>
<ReportParameter Name="PreviousDate">
<DataType>DateTime</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>paramPreviousDate</Prompt>
</ReportParameter>
<ReportParameter Name="CurrentDate">
<DataType>DateTime</DataType>
<Nullable>true</Nullable>
<AllowBlank>true</AllowBlank>
<Prompt>paramCurrentDate</Prompt>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:GridSpacing>0.05in</rd:GridSpacing>
<rd:SnapToGrid>false</rd:SnapToGrid>
<RightMargin>0.4in</RightMargin>
<LeftMargin>0.5in</LeftMargin>
<BottomMargin>0.29in</BottomMargin>
<rd:ReportID>ecd24c8c-626b-4815-b8fa-3df9c5252e67</rd:ReportID>
<PageWidth>8.27in</PageWidth>
<DataSets>
<DataSet Name="ReportData_dtFinalAccount">
<Fields>
<Field Name="Description">
<DataField>Description</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="CurrentAmount">
<DataField>CurrentAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="PreviousAmount">
<DataField>PreviousAmount</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ItemLevel">
<DataField>ItemLevel</DataField>
<rd:TypeName>System.Int16</rd:TypeName>
</Field>
<Field Name="PrintAmount">
<DataField>PrintAmount</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
<Field Name="PrintSubtotal">
<DataField>PrintSubtotal</DataField>
<rd:TypeName>System.Boolean</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText />
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>ReportData</rd:DataSetName>
<rd:TableName>dtFinalAccount</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<Code />
<Width>7.32292in</Width>
<Body>
<ReportItems>
<Table Name="table1">
<DataSetName>ReportData_dtFinalAccount</DataSetName>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="Description">
<rd:DefaultName>Description</rd:DefaultName>
<Style>
<FontStyle>=IIF(Cint(Fields!ItemLevel.Value)=3, "Italic", "Normal")</FontStyle>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Left</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>2</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(Cint(Fields!ItemLevel.Value)=4, Space(5), Space((Cint(Fields!ItemLevel.Value)-1)*5)) &amp; Fields!Description.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="CurrentAmount">
<Style>
<BorderStyle>
<Top>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Top>
<Bottom>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Bottom>
</BorderStyle>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<ZIndex>1</ZIndex>
<CanGrow>true</CanGrow>
<Value>=IIF(CBool(Fields!PrintAmount.Value), Fields!CurrentAmount.Value, "")</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox7">
<rd:DefaultName>textbox7</rd:DefaultName>
<Style>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox3">
<rd:DefaultName>textbox3</rd:DefaultName>
<Style>
<BorderStyle>
<Top>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Top>
<Bottom>=IIF(CBool(Fields!PrintSubtotal.Value), "Solid", "None")</Bottom>
</BorderStyle>
<FontSize>8pt</FontSize>
<FontWeight>=IIF((Cint(Fields!ItemLevel.Value)=1 OR Cint(Fields!ItemLevel.Value)=4), "Bold", "Normal")</FontWeight>
<TextAlign>Right</TextAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=IIF(CBool(Fields!PrintAmount.Value), Fields!PreviousAmount.Value, "")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.19in</Height>
</TableRow>
</TableRows>
</Details>
<Header>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox1">
<Style>
<FontSize>12pt</FontSize>
<FontWeight>700</FontWeight>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!CompanyName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ColSpan>3</ColSpan>
<ReportItems>
<Textbox Name="textbox9">
<rd:DefaultName>textbox9</rd:DefaultName>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Print Date &amp; Time: " &amp; Format(Now(), "dd MMM yyyy, hh:mm:ss tt")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.25in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox14">
<rd:DefaultName>textbox14</rd:DefaultName>
<Style>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
</BorderStyle>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<FontSize>9pt</FontSize>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!Address.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.23in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ColSpan>4</ColSpan>
<ReportItems>
<Textbox Name="textbox19">
<rd:DefaultName>textbox19</rd:DefaultName>
<Style>
<BorderColor>
<Top>Black</Top>
</BorderColor>
<BorderStyle>
<Top>Solid</Top>
</BorderStyle>
<BorderWidth>
<Top>1pt</Top>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextDecoration>Underline</TextDecoration>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.2in</Height>
</TableRow>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox2">
<rd:DefaultName>textbox2</rd:DefaultName>
<Style>
<BorderColor>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Right>Solid</Right>
</BorderStyle>
<BorderWidth>
<Right>1pt</Right>
</BorderWidth>
<FontSize>11pt</FontSize>
<FontWeight>700</FontWeight>
<TextDecoration>Underline</TextDecoration>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>Profit/Loss Comparison</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox5">
<rd:DefaultName>textbox5</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Format(Parameters!CurrentDate.Value,"dd.MM.yyyy")</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox4">
<rd:DefaultName>textbox4</rd:DefaultName>
<Style>
<BorderColor>
<Left>Black</Left>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Left>Solid</Left>
<Right>Solid</Right>
</BorderStyle>
<BorderWidth>
<Left>1pt</Left>
<Right>1pt</Right>
</BorderWidth>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value />
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox6">
<rd:DefaultName>textbox6</rd:DefaultName>
<Style>
<BackgroundColor>Gainsboro</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>9pt</FontSize>
<FontWeight>700</FontWeight>
<TextAlign>Center</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>=Format(Parameters!PreviousDate.Value, "dd.MM.yyyy")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
<Height>0.26in</Height>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Header>
<TableColumns>
<TableColumn>
<Width>4.82292in</Width>
</TableColumn>
<TableColumn>
<Width>1.17in</Width>
</TableColumn>
<TableColumn>
<Width>0.16in</Width>
</TableColumn>
<TableColumn>
<Width>1.17in</Width>
</TableColumn>
</TableColumns>
</Table>
</ReportItems>
<Height>1.13in</Height>
</Body>
<Language>en-US</Language>
<PageFooter>
<PrintOnFirstPage>true</PrintOnFirstPage>
<ReportItems>
<Textbox Name="textbox10">
<Top>0.07291in</Top>
<Style>
<FontSize>7pt</FontSize>
<TextAlign>Right</TextAlign>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Value>="Page " &amp; Globals!PageNumber &amp; " of " &amp; Globals!TotalPages</Value>
</Textbox>
</ReportItems>
<Height>0.24041in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
</PageFooter>
<TopMargin>0.4in</TopMargin>
<PageHeight>11.69in</PageHeight>
</Report>

Some files were not shown because too many files have changed in this diff Show More