From 6ec0a843d7f34815017a6df932b0b857d0432532 Mon Sep 17 00:00:00 2001 From: zzzSeMzzz <zzzSeMzzz@bk.ru> Date: Thu, 5 Jul 2018 14:48:07 +0300 Subject: [PATCH] 80% is done --- ClientsCrm.dpr | 40 + ClientsCrm.dproj | 615 +++++++++++ ClientsCrm.dproj.local | 47 + ClientsCrm.identcache | Bin 0 -> 649 bytes ClientsCrm.res | Bin 0 -> 59424 bytes ClientsCrm.stat | 10 + DataUnit.dfm | 168 +++ DataUnit.pas | 93 ++ EncryptUnit.pas | 91 ++ MainUnit.dfm | 630 +++++++++++ MainUnit.pas | 316 ++++++ TaskUnit.pas | 67 ++ UfrClientWorkReport.dfm | 148 +++ UfrClientWorkReport.pas | 142 +++ UfrClientWorkReportR.dfm | 64 ++ UfrClientWorkReportR.pas | 234 ++++ UfrEditTask.dfm | 129 +++ UfrEditTask.pas | 164 +++ UfrEditUser.dfm | 118 ++ UfrEditUser.pas | 150 +++ UfrHandbook.dfm | 59 + UfrHandbook.pas | 74 ++ UfrLogin.dfm | 2210 ++++++++++++++++++++++++++++++++++++++ UfrLogin.pas | 131 +++ UfrManageUsers.dfm | 151 +++ UfrManageUsers.pas | 82 ++ UfrReportClient.dfm | 82 ++ UfrReportClient.pas | 74 ++ UfrReportClientR.dfm | 147 +++ UfrReportClientR.pas | 204 ++++ UfrSett.dfm | 163 +++ UfrSett.pas | 116 ++ UserModel.pas | 138 +++ UtilsUnit.pas | 179 +++ 34 files changed, 7036 insertions(+) create mode 100644 ClientsCrm.dpr create mode 100644 ClientsCrm.dproj create mode 100644 ClientsCrm.dproj.local create mode 100644 ClientsCrm.identcache create mode 100644 ClientsCrm.res create mode 100644 ClientsCrm.stat create mode 100644 DataUnit.dfm create mode 100644 DataUnit.pas create mode 100644 EncryptUnit.pas create mode 100644 MainUnit.dfm create mode 100644 MainUnit.pas create mode 100644 TaskUnit.pas create mode 100644 UfrClientWorkReport.dfm create mode 100644 UfrClientWorkReport.pas create mode 100644 UfrClientWorkReportR.dfm create mode 100644 UfrClientWorkReportR.pas create mode 100644 UfrEditTask.dfm create mode 100644 UfrEditTask.pas create mode 100644 UfrEditUser.dfm create mode 100644 UfrEditUser.pas create mode 100644 UfrHandbook.dfm create mode 100644 UfrHandbook.pas create mode 100644 UfrLogin.dfm create mode 100644 UfrLogin.pas create mode 100644 UfrManageUsers.dfm create mode 100644 UfrManageUsers.pas create mode 100644 UfrReportClient.dfm create mode 100644 UfrReportClient.pas create mode 100644 UfrReportClientR.dfm create mode 100644 UfrReportClientR.pas create mode 100644 UfrSett.dfm create mode 100644 UfrSett.pas create mode 100644 UserModel.pas create mode 100644 UtilsUnit.pas diff --git a/ClientsCrm.dpr b/ClientsCrm.dpr new file mode 100644 index 0000000..22c2a1a --- /dev/null +++ b/ClientsCrm.dpr @@ -0,0 +1,40 @@ +program ClientsCrm; + +uses + Vcl.Forms, + UfrLogin in 'UfrLogin.pas' {frLogin}, + DataUnit in 'DataUnit.pas' {dm: TDataModule}, + EncryptUnit in 'EncryptUnit.pas', + UfrSett in 'UfrSett.pas' {frSett}, + MainUnit in 'MainUnit.pas' {frMain}, + UserModel in 'UserModel.pas', + UfrManageUsers in 'UfrManageUsers.pas' {frManageUsers}, + UfrEditUser in 'UfrEditUser.pas' {frEditUser}, + UfrHandbook in 'UfrHandbook.pas' {frHandbook}, + UtilsUnit in 'UtilsUnit.pas', + UfrEditTask in 'UfrEditTask.pas' {frEditTask}, + TaskUnit in 'TaskUnit.pas', + UfrReportClient in 'UfrReportClient.pas' {frReportClient}, + UfrReportClientR in 'UfrReportClientR.pas' {frReportClientR}, + UfrClientWorkReport in 'UfrClientWorkReport.pas' {frClientWorkReport}, + UfrClientWorkReportR in 'UfrClientWorkReportR.pas' {frClientWorkReportR}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(Tdm, dm); + Application.CreateForm(TfrLogin, frLogin); + //Application.CreateForm(TfrClientWorkReportR, frClientWorkReportR); + //Application.CreateForm(TfrClientWorkReport, frClientWorkReport); + //Application.CreateForm(TfrReportClientR, frReportClientR); + //Application.CreateForm(TfrReportClient, frReportClient); + //Application.CreateForm(TfrEditTask, frEditTask); + //Application.CreateForm(TfrHandbook, frHandbook); + //Application.CreateForm(TfrEditUser, frEditUser); + //Application.CreateForm(TfrManageUsers, frManageUsers); + //Application.CreateForm(TfrSett, frSett); + //Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/ClientsCrm.dproj b/ClientsCrm.dproj new file mode 100644 index 0000000..af6d676 --- /dev/null +++ b/ClientsCrm.dproj @@ -0,0 +1,615 @@ +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <ProjectGuid>{9EF2FB82-2FCB-4C15-899A-80D07F3CACD1}</ProjectGuid> + <ProjectVersion>18.2</ProjectVersion> + <FrameworkType>VCL</FrameworkType> + <MainSource>ClientsCrm.dpr</MainSource> + <Base>True</Base> + <Config Condition="'$(Config)'==''">Release</Config> + <Platform Condition="'$(Platform)'==''">Win32</Platform> + <TargetedPlatforms>1</TargetedPlatforms> + <AppType>Application</AppType> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''"> + <Base_Win32>true</Base_Win32> + <CfgParent>Base</CfgParent> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''"> + <Base_Win64>true</Base_Win64> + <CfgParent>Base</CfgParent> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''"> + <Cfg_1>true</Cfg_1> + <CfgParent>Base</CfgParent> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''"> + <Cfg_1_Win32>true</Cfg_1_Win32> + <CfgParent>Cfg_1</CfgParent> + <Cfg_1>true</Cfg_1> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''"> + <Cfg_2>true</Cfg_2> + <CfgParent>Base</CfgParent> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''"> + <Cfg_2_Win32>true</Cfg_2_Win32> + <CfgParent>Cfg_2</CfgParent> + <Cfg_2>true</Cfg_2> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="'$(Base)'!=''"> + <DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput> + <DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput> + <DCC_E>false</DCC_E> + <DCC_N>false</DCC_N> + <DCC_S>false</DCC_S> + <DCC_F>false</DCC_F> + <DCC_K>false</DCC_K> + <DCC_UsePackage>RESTComponents;emsclientfiredac;FireDACIBDriver;emsclient;FireDACCommon;RESTBackendComponents;soapserver;CloudService;FireDACCommonDriver;inet;FireDAC;FireDACSqliteDriver;soaprtl;soapmidas;$(DCC_UsePackage)</DCC_UsePackage> + <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace> + <Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon> + <UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44> + <UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150> + <SanitizedProjectName>ClientsCrm</SanitizedProjectName> + </PropertyGroup> + <PropertyGroup Condition="'$(Base_Win32)'!=''"> + <DCC_UsePackage>DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;AlphaDBDX10Tokyo;vclFireDAC;DataSnapFireDAC;svnui;tethering;EhLibIBXDataDrivers250;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;mydac250;DataSnapConnectors;VCLRESTComponents;mydacvcl250;acntDX10Tokyo_R;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;mydacfmx250;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;dac250;IndySystem;FireDACDb2Driver;dsnapcon;mysqlmon250;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;EhLibADODataDrivers250;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;dacvcl250;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;crcontrols250;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dacfmx250;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;EhLibDBXDataDrivers250;EhLib250;fmxase;$(DCC_UsePackage)</DCC_UsePackage> + <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace> + <BT_BuildType>Debug</BT_BuildType> + <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> + <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> + <VerInfo_Locale>1033</VerInfo_Locale> + <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File> + </PropertyGroup> + <PropertyGroup Condition="'$(Base_Win64)'!=''"> + <DCC_UsePackage>DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;DataSnapFireDAC;tethering;EhLibIBXDataDrivers250;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;EhLibADODataDrivers250;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;EhLibDBXDataDrivers250;EhLib250;fmxase;$(DCC_UsePackage)</DCC_UsePackage> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_1)'!=''"> + <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> + <DCC_DebugDCUs>true</DCC_DebugDCUs> + <DCC_Optimize>false</DCC_Optimize> + <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames> + <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe> + <DCC_RemoteDebug>true</DCC_RemoteDebug> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''"> + <DCC_RemoteDebug>false</DCC_RemoteDebug> + <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes> + <AppEnableHighDPI>true</AppEnableHighDPI> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_2)'!=''"> + <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols> + <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> + <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo> + <DCC_DebugInformation>0</DCC_DebugInformation> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_2_Win32)'!=''"> + <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes> + <AppEnableHighDPI>true</AppEnableHighDPI> + </PropertyGroup> + <ItemGroup> + <DelphiCompile Include="$(MainSource)"> + <MainSource>MainSource</MainSource> + </DelphiCompile> + <DCCReference Include="UfrLogin.pas"> + <Form>frLogin</Form> + <FormType>dfm</FormType> + </DCCReference> + <DCCReference Include="DataUnit.pas"> + <Form>dm</Form> + <FormType>dfm</FormType> + <DesignClass>TDataModule</DesignClass> + </DCCReference> + <DCCReference Include="EncryptUnit.pas"/> + <DCCReference Include="UfrSett.pas"> + <Form>frSett</Form> + <FormType>dfm</FormType> + </DCCReference> + <DCCReference Include="MainUnit.pas"> + <Form>frMain</Form> + <FormType>dfm</FormType> + </DCCReference> + <DCCReference Include="UserModel.pas"/> + <DCCReference Include="UfrManageUsers.pas"> + <Form>frManageUsers</Form> + <FormType>dfm</FormType> + </DCCReference> + <DCCReference Include="UfrEditUser.pas"> + <Form>frEditUser</Form> + <FormType>dfm</FormType> + </DCCReference> + <DCCReference Include="UfrHandbook.pas"> + <Form>frHandbook</Form> + <FormType>dfm</FormType> + </DCCReference> + <DCCReference Include="UtilsUnit.pas"/> + <DCCReference Include="UfrEditTask.pas"> + <Form>frEditTask</Form> + <FormType>dfm</FormType> + </DCCReference> + <DCCReference Include="TaskUnit.pas"/> + <DCCReference Include="UfrReportClient.pas"> + <Form>frReportClient</Form> + <FormType>dfm</FormType> + </DCCReference> + <DCCReference Include="UfrReportClientR.pas"> + <Form>frReportClientR</Form> + <FormType>dfm</FormType> + </DCCReference> + <DCCReference Include="UfrClientWorkReport.pas"> + <Form>frClientWorkReport</Form> + <FormType>dfm</FormType> + </DCCReference> + <DCCReference Include="UfrClientWorkReportR.pas"> + <Form>frClientWorkReportR</Form> + <FormType>dfm</FormType> + </DCCReference> + <BuildConfiguration Include="Release"> + <Key>Cfg_2</Key> + <CfgParent>Base</CfgParent> + </BuildConfiguration> + <BuildConfiguration Include="Base"> + <Key>Base</Key> + </BuildConfiguration> + <BuildConfiguration Include="Debug"> + <Key>Cfg_1</Key> + <CfgParent>Base</CfgParent> + </BuildConfiguration> + </ItemGroup> + <ProjectExtensions> + <Borland.Personality>Delphi.Personality.12</Borland.Personality> + <Borland.ProjectType>Application</Borland.ProjectType> + <BorlandProject> + <Delphi.Personality> + <Source> + <Source Name="MainSource">ClientsCrm.dpr</Source> + </Source> + </Delphi.Personality> + <Deployment Version="3"> + <DeployFile LocalName="Win32\Debug\ClientsCrm.exe" Configuration="Debug" Class="ProjectOutput"> + <Platform Name="Win32"> + <RemoteName>ClientsCrm.exe</RemoteName> + <Overwrite>true</Overwrite> + </Platform> + </DeployFile> + <DeployFile LocalName="Win32\Release\ClientsCrm.exe" Configuration="Release" Class="ProjectOutput"> + <Platform Name="Win32"> + <RemoteName>ClientsCrm.exe</RemoteName> + <Overwrite>true</Overwrite> + </Platform> + </DeployFile> + <DeployClass Name="AdditionalDebugSymbols"> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + <Platform Name="OSX32"> + <RemoteDir>Contents\MacOS</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Win32"> + <RemoteDir>Contents\MacOS</RemoteDir> + <Operation>0</Operation> + </Platform> + </DeployClass> + <DeployClass Name="AndroidClassesDexFile"> + <Platform Name="Android"> + <RemoteDir>classes</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="AndroidGDBServer"> + <Platform Name="Android"> + <RemoteDir>library\lib\armeabi-v7a</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="AndroidLibnativeArmeabiFile"> + <Platform Name="Android"> + <RemoteDir>library\lib\armeabi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="AndroidLibnativeMipsFile"> + <Platform Name="Android"> + <RemoteDir>library\lib\mips</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="AndroidServiceOutput"> + <Platform Name="Android"> + <RemoteDir>library\lib\armeabi-v7a</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="AndroidSplashImageDef"> + <Platform Name="Android"> + <RemoteDir>res\drawable</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="AndroidSplashStyles"> + <Platform Name="Android"> + <RemoteDir>res\values</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_DefaultAppIcon"> + <Platform Name="Android"> + <RemoteDir>res\drawable</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_LauncherIcon144"> + <Platform Name="Android"> + <RemoteDir>res\drawable-xxhdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_LauncherIcon36"> + <Platform Name="Android"> + <RemoteDir>res\drawable-ldpi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_LauncherIcon48"> + <Platform Name="Android"> + <RemoteDir>res\drawable-mdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_LauncherIcon72"> + <Platform Name="Android"> + <RemoteDir>res\drawable-hdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_LauncherIcon96"> + <Platform Name="Android"> + <RemoteDir>res\drawable-xhdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_SplashImage426"> + <Platform Name="Android"> + <RemoteDir>res\drawable-small</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_SplashImage470"> + <Platform Name="Android"> + <RemoteDir>res\drawable-normal</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_SplashImage640"> + <Platform Name="Android"> + <RemoteDir>res\drawable-large</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_SplashImage960"> + <Platform Name="Android"> + <RemoteDir>res\drawable-xlarge</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="DebugSymbols"> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + <Platform Name="OSX32"> + <RemoteDir>Contents\MacOS</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Win32"> + <Operation>0</Operation> + </Platform> + </DeployClass> + <DeployClass Name="DependencyFramework"> + <Platform Name="OSX32"> + <RemoteDir>Contents\MacOS</RemoteDir> + <Operation>1</Operation> + <Extensions>.framework</Extensions> + </Platform> + <Platform Name="Win32"> + <Operation>0</Operation> + </Platform> + </DeployClass> + <DeployClass Name="DependencyModule"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + <Extensions>.dylib</Extensions> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + <Extensions>.dylib</Extensions> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + <Extensions>.dylib</Extensions> + </Platform> + <Platform Name="OSX32"> + <RemoteDir>Contents\MacOS</RemoteDir> + <Operation>1</Operation> + <Extensions>.dylib</Extensions> + </Platform> + <Platform Name="Win32"> + <Operation>0</Operation> + <Extensions>.dll;.bpl</Extensions> + </Platform> + </DeployClass> + <DeployClass Required="true" Name="DependencyPackage"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + <Extensions>.dylib</Extensions> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + <Extensions>.dylib</Extensions> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + <Extensions>.dylib</Extensions> + </Platform> + <Platform Name="OSX32"> + <RemoteDir>Contents\MacOS</RemoteDir> + <Operation>1</Operation> + <Extensions>.dylib</Extensions> + </Platform> + <Platform Name="Win32"> + <Operation>0</Operation> + <Extensions>.bpl</Extensions> + </Platform> + </DeployClass> + <DeployClass Name="File"> + <Platform Name="Android"> + <Operation>0</Operation> + </Platform> + <Platform Name="iOSDevice32"> + <Operation>0</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>0</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>0</Operation> + </Platform> + <Platform Name="OSX32"> + <RemoteDir>Contents\Resources\StartUp\</RemoteDir> + <Operation>0</Operation> + </Platform> + <Platform Name="Win32"> + <Operation>0</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch1024"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch1536"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch2048"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch768"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPhone_Launch320"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPhone_Launch640"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPhone_Launch640x1136"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="ProjectAndroidManifest"> + <Platform Name="Android"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="ProjectiOSDeviceDebug"> + <Platform Name="iOSDevice32"> + <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="ProjectiOSDeviceResourceRules"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="ProjectiOSEntitlements"> + <Platform Name="iOSDevice32"> + <RemoteDir>..\</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <RemoteDir>..\</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="ProjectiOSInfoPList"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="ProjectiOSResource"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="ProjectOSXEntitlements"> + <Platform Name="OSX32"> + <RemoteDir>..\</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="ProjectOSXInfoPList"> + <Platform Name="OSX32"> + <RemoteDir>Contents</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="ProjectOSXResource"> + <Platform Name="OSX32"> + <RemoteDir>Contents\Resources</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Required="true" Name="ProjectOutput"> + <Platform Name="Android"> + <RemoteDir>library\lib\armeabi-v7a</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + <Platform Name="Linux64"> + <Operation>1</Operation> + </Platform> + <Platform Name="OSX32"> + <RemoteDir>Contents\MacOS</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Win32"> + <Operation>0</Operation> + </Platform> + </DeployClass> + <DeployClass Name="ProjectUWPManifest"> + <Platform Name="Win32"> + <Operation>1</Operation> + </Platform> + <Platform Name="Win64"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="UWP_DelphiLogo150"> + <Platform Name="Win32"> + <RemoteDir>Assets</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Win64"> + <RemoteDir>Assets</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="UWP_DelphiLogo44"> + <Platform Name="Win32"> + <RemoteDir>Assets</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Win64"> + <RemoteDir>Assets</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/> + <ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/> + <ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/> + <ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/> + <ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/> + <ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/> + <ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/> + <ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/> + </Deployment> + <Platforms> + <Platform value="Win32">True</Platform> + <Platform value="Win64">False</Platform> + </Platforms> + </BorlandProject> + <ProjectFileVersion>12</ProjectFileVersion> + </ProjectExtensions> + <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/> + <Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/> + <Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/> +</Project> diff --git a/ClientsCrm.dproj.local b/ClientsCrm.dproj.local new file mode 100644 index 0000000..b061956 --- /dev/null +++ b/ClientsCrm.dproj.local @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?> +<BorlandProject> + <Transactions> + <Transaction>1899.12.30 00:00:00.000.072,D:\projects\ClientsCrm\Unit1.pas=D:\projects\ClientsCrm\UfrManageUsers.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.070,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.901,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.713,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.687,D:\projects\ClientsCrm\Unit1.pas=D:\projects\ClientsCrm\UfrHandbook.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.364,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.960,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.253,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.798,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.642,=C:\Users\admin\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.432,=D:\projects\ClientsCrm\UserModel.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.610,C:\Users\admin\Documents\Embarcadero\Studio\Projects\Unit1.pas=D:\projects\ClientsCrm\LoginUnit.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.685,=C:\Users\admin\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.507,D:\projects\ClientsCrm\Unit1.pas=D:\projects\ClientsCrm\MainUnit.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.791,D:\projects\ClientsCrm\Unit1.pas=D:\projects\ClientsCrm\TaskUnit.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.236,D:\projects\ClientsCrm\Unit1.pas=D:\projects\ClientsCrm\UfrEditUser.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.102,D:\projects\ClientsCrm\Unit1.pas=D:\projects\ClientsCrm\UtilsUnit.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.696,D:\projects\ClientsCrm\Unit1.pas=D:\projects\ClientsCrm\UfrEditTask.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.696,D:\projects\ClientsCrm\Unit1.dfm=D:\projects\ClientsCrm\UfrEditTask.dfm</Transaction> + <Transaction>1899.12.30 00:00:00.000.666,=D:\projects\ClientsCrm\DataUnit.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.671,=D:\projects\ClientsCrm\EncryptUnit.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.428,D:\projects\ClientsCrm\LoginUnit.pas=</Transaction> + <Transaction>1899.12.30 00:00:00.000.539,C:\Users\admin\Documents\Embarcadero\Studio\Projects\Project1.dproj=D:\projects\ClientsCrm\ClientsCrm.dproj</Transaction> + <Transaction>1899.12.30 00:00:00.000.250,=D:\projects\ClientsCrm\UfrSett.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.610,C:\Users\admin\Documents\Embarcadero\Studio\Projects\Unit1.dfm=D:\projects\ClientsCrm\LoginUnit.dfm</Transaction> + <Transaction>1899.12.30 00:00:00.000.072,D:\projects\ClientsCrm\Unit1.dfm=D:\projects\ClientsCrm\UfrManageUsers.dfm</Transaction> + <Transaction>1899.12.30 00:00:00.000.507,D:\projects\ClientsCrm\Unit1.dfm=D:\projects\ClientsCrm\MainUnit.dfm</Transaction> + <Transaction>1899.12.30 00:00:00.000.236,D:\projects\ClientsCrm\Unit1.dfm=D:\projects\ClientsCrm\UfrEditUser.dfm</Transaction> + <Transaction>1899.12.30 00:00:00.000.710,=D:\projects\ClientsCrm\UfrLogin.pas</Transaction> + <Transaction>1899.12.30 00:00:00.000.687,D:\projects\ClientsCrm\Unit1.dfm=D:\projects\ClientsCrm\UfrHandbook.dfm</Transaction> + <Transaction>2018.07.05 07:47:19.963,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>2018.07.05 07:48:11.431,D:\projects\ClientsCrm\UfrReportClient.pas=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>2018.07.05 07:48:11.431,D:\projects\ClientsCrm\UfrReportClient.dfm=D:\projects\ClientsCrm\Unit1.dfm</Transaction> + <Transaction>2018.07.05 08:05:35.871,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>2018.07.05 08:07:00.876,D:\projects\ClientsCrm\UfrReportClientR.pas=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>2018.07.05 08:07:00.876,D:\projects\ClientsCrm\UfrReportClientR.dfm=D:\projects\ClientsCrm\Unit1.dfm</Transaction> + <Transaction>2018.07.05 11:21:22.030,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>2018.07.05 11:22:31.257,D:\projects\ClientsCrm\UfrClientWorkReport.pas=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>2018.07.05 11:22:31.257,D:\projects\ClientsCrm\UfrClientWorkReport.dfm=D:\projects\ClientsCrm\Unit1.dfm</Transaction> + <Transaction>2018.07.05 12:06:34.803,=D:\projects\ClientsCrm\Unit1.pas</Transaction> + <Transaction>2018.07.05 12:07:25.191,D:\projects\ClientsCrm\UfrClientWorkReportR.dfm=D:\projects\ClientsCrm\Unit1.dfm</Transaction> + <Transaction>2018.07.05 12:07:25.191,D:\projects\ClientsCrm\UfrClientWorkReportR.pas=D:\projects\ClientsCrm\Unit1.pas</Transaction> + </Transactions> +</BorlandProject> diff --git a/ClientsCrm.identcache b/ClientsCrm.identcache new file mode 100644 index 0000000000000000000000000000000000000000..a0f0852af55be6c7b1e9fc6614650d4007ed8956 GIT binary patch literal 649 zcmb7>Jr2S!4263EF2SF~(gU!zl^Dnb-MW}2RDt3|u@`PnvJ|O}CCHTFJ%8`ntD-0l z^|AB8JxtHkRiib?RE1a9-h%>!!L(!ol^!UHr?(MYH88Yjd9L3H`Y*85K1}1|XDc{T z9Obkb=ZL*vXs{1&&$(1mi`f0_28+KUqW%P^Z_Yjcur%886=-3RQYCG!g;YGIN{F<u bc`9+aY)8s5*1~cl<6?MmZmEI-i@EV1IoY~+ literal 0 HcmV?d00001 diff --git a/ClientsCrm.res b/ClientsCrm.res new file mode 100644 index 0000000000000000000000000000000000000000..1933a0618bdb319870d71bcfc69c6ea3abf2ad2c GIT binary patch literal 59424 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 PJtzM<{^Qv8XSDl&jH%i0 literal 0 HcmV?d00001 diff --git a/ClientsCrm.stat b/ClientsCrm.stat new file mode 100644 index 0000000..604001b --- /dev/null +++ b/ClientsCrm.stat @@ -0,0 +1,10 @@ +[Stats] +EditorSecs=1651 +DesignerSecs=256 +InspectorSecs=518 +CompileSecs=84832 +OtherSecs=694 +StartTime=28.06.2018 13:46:55 +RealKeys=0 +EffectiveKeys=0 +DebugSecs=319 diff --git a/DataUnit.dfm b/DataUnit.dfm new file mode 100644 index 0000000..f60e347 --- /dev/null +++ b/DataUnit.dfm @@ -0,0 +1,168 @@ +object dm: Tdm + OldCreateOrder = False + OnCreate = DataModuleCreate + Height = 363 + Width = 406 + object cn: TMyConnection + Database = 'clientscrm' + Options.Charset = 'cp1251' + Username = 'root' + Server = 'localhost' + LoginPrompt = False + Left = 8 + EncryptedPassword = '8DFF90FF90FF8BFF' + end + object usersQ: TMyQuery + Connection = cn + SQL.Strings = ( + 'select users.*, ' + 'department.`name` as `dname`' + ', user_roles.`name` as `role`' + 'from users ' + 'LEFT JOIN department ON (department.`id`=users.`id_dep`)' + 'LEFT JOIN user_roles ON (user_roles.`id`=users.`id_role`)' + 'GROUP BY users.id') + Left = 8 + Top = 48 + end + object usersDS: TDataSource + DataSet = usersQ + Left = 88 + Top = 48 + end + object departmentsQ: TMyQuery + SQLInsert.Strings = ( + 'INSERT INTO department' + ' (id, name)' + 'VALUES' + ' (:id, :name)') + SQLDelete.Strings = ( + 'DELETE FROM department' + 'WHERE' + ' id = :Old_id') + SQLUpdate.Strings = ( + 'UPDATE department' + 'SET' + ' id = :id, name = :name' + 'WHERE' + ' id = :Old_id') + SQLRefresh.Strings = ( + 'SELECT id, name FROM department' + 'WHERE' + ' id = :id') + SQLLock.Strings = ( + 'SELECT * FROM department' + 'WHERE' + ' id = :Old_id' + 'FOR UPDATE') + SQLRecCount.Strings = ( + 'SELECT COUNT(*) FROM department') + Connection = cn + SQL.Strings = ( + 'select * from department order by name asc') + Left = 16 + Top = 104 + end + object handbookDS: TDataSource + Left = 232 + Top = 104 + end + object clientsQ: TMyQuery + SQLInsert.Strings = ( + 'INSERT INTO clients' + ' (id, name)' + 'VALUES' + ' (:id, :name)') + SQLDelete.Strings = ( + 'DELETE FROM clients' + 'WHERE' + ' id = :Old_id') + SQLUpdate.Strings = ( + 'UPDATE clients' + 'SET' + ' id = :id, name = :name' + 'WHERE' + ' id = :Old_id') + SQLRefresh.Strings = ( + 'SELECT id, name FROM clients' + 'WHERE' + ' id = :id') + SQLLock.Strings = ( + 'SELECT * FROM clients' + 'WHERE' + ' id = :Old_id' + 'FOR UPDATE') + SQLRecCount.Strings = ( + 'SELECT COUNT(*) FROM clients') + Connection = cn + SQL.Strings = ( + 'select * from clients order by name asc') + Left = 88 + Top = 104 + end + object worksQ: TMyQuery + SQLInsert.Strings = ( + 'INSERT INTO works' + ' (id, name)' + 'VALUES' + ' (:id, :name)') + SQLDelete.Strings = ( + 'DELETE FROM works' + 'WHERE' + ' id = :Old_id') + SQLUpdate.Strings = ( + 'UPDATE works' + 'SET' + ' id = :id, name = :name' + 'WHERE' + ' id = :Old_id') + SQLRefresh.Strings = ( + 'SELECT id, name FROM works' + 'WHERE' + ' id = :id') + SQLLock.Strings = ( + 'SELECT * FROM works' + 'WHERE' + ' id = :Old_id' + 'FOR UPDATE') + SQLRecCount.Strings = ( + 'SELECT COUNT(*) FROM works') + Connection = cn + SQL.Strings = ( + 'select * from works order by name asc') + Left = 152 + Top = 104 + end + object taskQ: TMyQuery + Connection = cn + SQL.Strings = ( + 'select tasks.*, ' + 'clients.`name` as `client`,' + 'works.`name` as `work`,' + 'users.`user_name` as `fio`,' + 'department.`name` as `dep`' + 'from tasks ' + 'LEFT JOIN works ON (works.`id`=tasks.`id_work`)' + 'LEFT JOIN clients ON (clients.`id`=tasks.`id_client`)' + 'LEFT JOIN users ON (users.`id`=tasks.`user_id`)' + 'LEFT JOIN department ON (department.`id`=users.`id_dep`)' + 'GROUP BY tasks.id') + Left = 8 + Top = 176 + end + object taskDS: TDataSource + DataSet = taskQ + Left = 56 + Top = 176 + end + object tasksFilter: TMyQuery + Connection = cn + Left = 112 + Top = 176 + end + object taskFDS: TDataSource + DataSet = tasksFilter + Left = 168 + Top = 176 + end +end diff --git a/DataUnit.pas b/DataUnit.pas new file mode 100644 index 0000000..a938d2f --- /dev/null +++ b/DataUnit.pas @@ -0,0 +1,93 @@ +unit DataUnit; + +interface + +uses + System.SysUtils, System.Classes, Data.DB, MemDS, DBAccess, MyAccess, dialogs, + ShFolder, IniFiles; + +function GetMyS:string; + +type + Tdm = class(TDataModule) + cn: TMyConnection; + usersQ: TMyQuery; + usersDS: TDataSource; + departmentsQ: TMyQuery; + handbookDS: TDataSource; + clientsQ: TMyQuery; + worksQ: TMyQuery; + taskQ: TMyQuery; + taskDS: TDataSource; + tasksFilter: TMyQuery; + taskFDS: TDataSource; + procedure DataModuleCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + pk:TLocateOption; + dstate, dstate_ins:TDATAsetState; + end; + +const + taskSql:string=' select tasks.*,' +chr(13)+ + 'clients.`name` as `client`,' +chr(13)+ + 'works.`name` as `work`,' +chr(13)+ + 'users.`user_name` as `fio`,' +chr(13)+ + 'department.`name` as `dep`'+chr(13)+ + 'from tasks' +chr(13)+ + 'LEFT JOIN works ON (works.`id`=tasks.`id_work`)' +chr(13)+ + 'LEFT JOIN clients ON (clients.`id`=tasks.`id_client`)'+chr(13)+ + 'LEFT JOIN users ON (users.`id`=tasks.`user_id`)'+chr(13)+ + 'LEFT JOIN department ON (department.`id`=users.`id_dep`)'; + taskSqlGrop:String='GROUP BY tasks.id'; + +var + dm: Tdm; + ini:TIniFile; + +implementation + +{%CLASSGROUP 'System.Classes.TPersistent'} + +{$R *.dfm} + +uses ufrsett; + +function GetMyS:string; +var + Buf:array[0..255] of Char; + s:string; +begin + Result:=''; + if SHGetFolderPath(0, CSIDL_APPDATA, 0, 0, Buf) = 0 then s:=Buf; + if s[length(s)]<>'\' then s:=s+'\'; + result:=s; +end; + +procedure Tdm.DataModuleCreate(Sender: TObject); +var fn:string; +begin +cn.Connected:=false; +fn:=getmys+settFolder+'\'; +//ShowMessage(fn); +createdir(fn); +ini:=TIniFile.Create(fn+'sett.ini'); + +cn.Server:=ini.ReadString('connection', 'host', cn.Server); +cn.Username:=ini.ReadString('connection', 'user', cn.Username); +cn.password:=ini.ReadString('connection', 'password', cn.Password); +cn.Database:=ini.ReadString('connection', 'db', cn.Database); +cn.Port:=ini.ReadInteger('connection', 'port', cn.Port); +ini.Free; + +//showmessage(cn.Password); + +cn.Connected:=false; +pk:=loPartialKey; +dstate:=dsEdit ; +dstate_ins:=dsInsert; +end; + +end. diff --git a/EncryptUnit.pas b/EncryptUnit.pas new file mode 100644 index 0000000..e77cd29 --- /dev/null +++ b/EncryptUnit.pas @@ -0,0 +1,91 @@ +unit EncryptUnit; + +interface + +Uses System.Classes, System.SysUtils; + + function xebi(const text, passwd:string):string; + +implementation + +function xebi(const text, passwd:string):string; +const + szBuffer = SizeOf(LongWord); + szByteBuffer = SizeOf(Byte); + +var + HashPasswd, buffer, i, byteBuffer: LongWord; + StreamOut, StreamIn: TStringStream; + +function Murmur2(const S: String; const Seed: LongWord=$9747b28c): LongWord; +var + hash, len, k: LongWord; + StrAsBytes:TBytes; + data: Integer; +const + m = $5bd1e995; + r = 24; +begin + StrAsBytes:=TEncoding.UTF8.GetBytes(S); + len:=Length(StrAsBytes); + hash:=seed xor len; + data:=0; + + while(len >= 4) do + begin + k := PLongWord(@StrAsBytes[data])^; + k := k*m; + k := k xor (k shr r); + k := k*m; + hash := hash*m; + hash := hash xor k; + inc(data,4); + dec(len,4); + end; + + Assert(len <= 3); + if len = 3 then hash := hash xor (LongWord(StrAsBytes[data+2]) shl 16); + if len >= 2 then hash := hash xor (LongWord(StrAsBytes[data+1]) shl 8); + if len >= 1 then + begin + hash := hash xor (LongWord(StrAsBytes[data])); hash := hash * m; + end; + hash := hash xor (hash shr 13); + hash := hash * m; + hash := hash xor (hash shr 15); + Result := hash; +end; +begin + StreamIn:=TStringStream.Create(text); + StreamOut:=TStringStream.Create(''); + try + StreamIn.Position:=0; + StreamOut.Position:=0; + + HashPasswd:=Murmur2(passwd); + + while (StreamIn.Position<StreamIn.Size) and ((StreamIn.Size-StreamIn.Position)>=szBuffer) do + begin + StreamIn.ReadBuffer(buffer, szBuffer); + buffer := buffer xor HashPasswd; + buffer := buffer xor $E0F; + StreamOut.WriteBuffer(buffer, szBuffer); + end; + + if (StreamIn.Size-StreamIn.Position)>=1 then + for i:=StreamIn.Position to StreamIn.Size-1 do + begin + StreamIn.ReadBuffer(byteBuffer, szByteBuffer); + byteBuffer:=byteBuffer xor $F; + StreamOut.WriteBuffer(byteBuffer, szByteBuffer); + end; + + StreamOut.Position:=0; + Result:=StreamOut.ReadString(StreamOut.Size); + finally + StreamOut.Free; + StreamIn.Free; + end; +end; + +end. diff --git a/MainUnit.dfm b/MainUnit.dfm new file mode 100644 index 0000000..acb98b1 --- /dev/null +++ b/MainUnit.dfm @@ -0,0 +1,630 @@ +object frMain: TfrMain + AlignWithMargins = True + Left = 0 + Top = 0 + Caption = 'ClientsCRM' + ClientHeight = 482 + ClientWidth = 735 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + OnClose = FormClose + OnCreate = FormCreate + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object ToolBar1: TToolBar + Left = 0 + Top = 0 + Width = 735 + Height = 33 + ButtonHeight = 30 + ButtonWidth = 31 + Caption = 'ToolBar1' + Images = toolImages + TabOrder = 0 + object btnAdmin: TToolButton + Left = 0 + Top = 0 + ImageIndex = 0 + OnClick = btnAdminClick + end + object ToolButton2: TToolButton + Left = 31 + Top = 0 + Width = 8 + Caption = 'ToolButton2' + ImageIndex = 1 + Style = tbsSeparator + end + object btnBooks: TToolButton + Left = 39 + Top = 0 + Caption = 'btnBooks' + DropdownMenu = handBookMenu + ImageIndex = 1 + Style = tbsDropDown + end + object btnAdd: TToolButton + Left = 85 + Top = 0 + Caption = 'btnAdd' + ImageIndex = 2 + OnClick = btnAddClick + end + object ToolButton4: TToolButton + Left = 116 + Top = 0 + Width = 8 + Caption = 'ToolButton4' + ImageIndex = 2 + Style = tbsSeparator + end + object ToolButton1: TToolButton + Left = 124 + Top = 0 + Caption = 'ToolButton1' + ImageIndex = 3 + OnClick = ToolButton1Click + end + object ToolButton3: TToolButton + Left = 155 + Top = 0 + Caption = 'ToolButton3' + ImageIndex = 4 + OnClick = ToolButton3Click + end + object ToolButton5: TToolButton + Left = 186 + Top = 0 + Width = 8 + Caption = 'ToolButton5' + ImageIndex = 5 + Style = tbsSeparator + end + object ToolButton6: TToolButton + Left = 194 + Top = 0 + Caption = 'ToolButton6' + ImageIndex = 5 + OnClick = ToolButton6Click + end + object ToolButton7: TToolButton + Left = 225 + Top = 0 + Width = 8 + Caption = 'ToolButton7' + ImageIndex = 6 + Style = tbsSeparator + end + object btnReport: TToolButton + Left = 233 + Top = 0 + DropdownMenu = reportMenu + ImageIndex = 6 + Style = tbsDropDown + end + end + object DBGridEh1: TDBGridEh + AlignWithMargins = True + Left = 3 + Top = 36 + Width = 729 + Height = 443 + Align = alClient + DataSource = dm.taskDS + DynProps = <> + GridLineParams.ColorScheme = glcsFlatEh + IndicatorParams.Color = clBtnFace + OddRowColor = 15724527 + ReadOnly = True + STFilter.Local = True + STFilter.Visible = True + TabOrder = 1 + OnApplyFilter = DBGridEh1ApplyFilter + OnDblClick = DBGridEh1DblClick + OnDrawColumnCell = DBGridEh1DrawColumnCell + OnKeyDown = DBGridEh1KeyDown + OnTitleClick = DBGridEh1TitleClick + Columns = < + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'user_id' + Footers = <> + Visible = False + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'fio' + Footers = <> + STFilter.DataField = 'fio' + STFilter.ListSource = dm.taskFDS + Title.Caption = #1060#1048#1054 + Width = 300 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'dt' + Footers = <> + STFilter.DataField = 'dt' + STFilter.ListSource = dm.taskFDS + Title.Caption = #1044#1072#1090#1072 + Width = 90 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'dep' + Footers = <> + STFilter.DataField = 'dep' + STFilter.ListSource = dm.taskFDS + Title.Caption = #1055#1086#1076#1088#1072#1079#1076#1077#1083#1077#1085#1080#1077 + Width = 250 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'client' + Footers = <> + STFilter.DataField = 'client' + STFilter.ListSource = dm.taskFDS + Title.Caption = #1050#1083#1080#1077#1085#1090 + Width = 120 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'work' + Footers = <> + STFilter.DataField = 'work' + STFilter.ListSource = dm.taskFDS + Title.Caption = #1042#1080#1076' '#1088#1072#1073#1086#1090 + Width = 120 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'time_work' + Footers = <> + STFilter.DataField = 'time_work' + STFilter.ListSource = dm.taskFDS + Title.Caption = #1042#1088#1077#1084#1103' '#1074#1099#1087#1086#1083#1085#1077#1085#1080#1103'('#1084#1080#1085')' + Width = 140 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'id' + Footers = <> + Visible = False + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'id_client' + Footers = <> + Visible = False + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'id_work' + Footers = <> + Visible = False + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'comment' + Footers = <> + STFilter.DataField = 'comment' + STFilter.ListSource = dm.taskFDS + Title.Caption = #1050#1086#1084#1084#1077#1085#1090#1072#1088#1080#1081 + Width = 250 + WordWrap = True + end> + object RowDetailData: TRowDetailPanelControlEh + end + end + object toolImages: TsAlphaImageList + Height = 24 + Width = 24 + Items = < + item + ImageFormat = ifPNG + ImageName = 'if_administrator_43620' + ImgData = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000B1300000B1301009A9C18000000206348524D0000 + 7A25000080830000F9FF000080E9000075300000EA6000003A980000176F925F + C546000004F84944415478DA8495DB6F54451CC7BF6766CE65CFD9EEADED6E2F + 68255C152B1483625488C648559EBC3C29BE18827F018FBE9810C517A3AF3E68 + A209512351341A131351A288800884B674DB2558DB6EF772F6D63D979933E3C3 + 72ADB0FD3DCD24F3FD7D7E33BFCB684A295CB743EF7D70632D8400348507B68C + A2522E83502D914EA7B7C513894CAD5A99D74DF3AF6AB9CC4B4B45945C17D7FD + BC7FE86DDC6A0CAB1821044110E422EEBFC5209FD2A448328262E87BDF09CE3F + 04B0D44DDF15A0EB3AB810FD7357F2DF0F0DE6C678E063A9D88665C5861289C4 + 58C2B15FAED76B2F4AA52670CB4BDC152004BFB6D2A09422F37373AFCC5C9ED8 + BFDCA88F158B8B687B3E3442A01B0632995E6CDCB06E734FDCF9A4DE6CEE924A + F9DA6A809E541A004019C3D5D9FCF8993F4E1CF18300C9640A8432C462315831 + 1B328A50735D4C4C4E2197CDED4825122F01F86CD51B94968A9DF835026FB9F9 + AA520AD96C0EE37BC6B1582CA25CA9808B08BAAEC376E270E24ECBB0ACE33AD3 + DD288A567FA2C0F73B89A504D56AC5755D17070EBC897DFB5E03E71C7E104070 + 010505AFEDE1DC850BD30B4B95BD328AD06AB6A011AD3BC06BB720A582AE3368 + 947D643BF1FDBB77EF3228A5A094C2B2AC1B67DBED65504AFDAA5B05A30C918C + 4034F2FF2ABC7593EBEBC7D0F01074C3402A9D39F7E043631FEB8671C7AB73CE + E1D61B3F091181E93A068686E138F1EE806422812DA3A37876FC39647A7BA19B + D63BB55AADB15224A308E58AEBD79BCB9FE67203D8BAFD610C0C0EC234CDEE00 + 29252211A12F9BC5C87D6B114551F2F8AF27FC46A3812008208480EFFB68349B + 3879EA14ADD56A9B720339168BD9904A41DDA117D8CAAE15823F3D93BFFC7CA5 + 5CDA69C7ACED5F7EFE456CC3FA0D58B77604BA6922F03CB4DA1E8E7D734CB77B + 7ABECAA4D3175BADD669C3308E6B9A760400BF2B4031BAF7E2F9BFBF765D9798 + A685300C51A994315B28C08A3928CF5D45EFF01A8461882B8502EE1919A1B333 + 335BC330D84A297B6368787814C0C1BB021AF5DAF8E2C222914A818B08221270 + 1C07A54A0D49514262E63002FA3A2ED553A09480E9269ACD260005AF5D03A5F4 + 859580DB72402899E29C230C02049E072515720383989C9E056B4E60F3A38318 + 8AFD8BC9C929A43219188601DFF73AE7031F9492E9AE49360DF34FA24105BE07 + C14304BE8754A61741BB8D324258638FC11FC8A25A2EA1BF3F8730F0C1C31041 + E043700EDB714E760518A631C574B6E0FB1E38EF083DAF8D543A8D8BB302FC9F + 3C2E4CB4108BA7208480D75E86E02142DF875212A6699EEE0AA084BAB66D5F0A + FC4E44828768D56B68D52B684769E4CF87A8B67AC08316AA951204E7E061083F + F0C118732DCBBAD4B54C9552B06DE734E7E133611840700E4043A9388FB36714 + C8FA614CCE4FE2EAEC2C28A5003A751FF2107D7DFD53A6652E74EF034A914826 + 4F4929B1DC6A81730E4DEB0CB02B3379140A05408A6BCE3B0199A680940AF19E + C4591949D51510498998639FB32C9B1717E775A5E40D40C7E3ED62A5243CDD83 + 134F209DC9FC7EA74FED36403A6E039A5678FCC9270EFF72FCE783D35393BAA6 + 1174A6B07613A6DD1C2DEB376EC2B6B1ED3F8EDC7BCFB7F198D91D605B263480 + 8EDEBFF9DD35830367A6F3F93D52CA34A3CCA28C5A84109D522629630163CCD7 + 3434B3FDD9DFE24EEC070D68AF3A8B94525040A441B652C9C4D19D8FEC384A08 + 61328A74A9A44E0825524A05401042B8528A0B211494D2D435FD4AFB6F006A81 + 88BB81BDBFF50000000049454E44AE426082} + end + item + ImageFormat = ifPNG + ImageName = 'if_address-book-alt_299047' + ImgData = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000B1300000B1301009A9C18000000206348524D0000 + 7A25000080830000F9FF000080E9000075300000EA6000003A980000176F925F + C546000004964944415478DA94954B8C54451486BF7ADC4737DD0D3D330D0C32 + 2033BC65418C4A5CA009C4A880C2428DEE8C71E7CEB5895BA386C4F888262806 + 638C8931BAE31579BB909D31C618119899E63533CCAB1FB7BB6FD571D13D323D + 40809354726FDD5BF5579DFF3FFF51A77E3D4780E2C05F2927CBEEE98CD187A2 + 42A947DBD08170AF10A5089B294F9E1FD50F95A79A974BE6AD8FBEDBF7FDDC77 + ED049C088FF55913FBD6FE30575C65822807B218B8E750228B9338587C6EDB40 + 3E0D6DEFAA09BF7FFE01B4087B9A5E1DD8DCC3C537D74E6F2D846DC00709E33C + 2E303472213695455D0068DB27A8C17FCAE58113C7CEE87AA582D2FA81000450 + 02AAFD44F70D90AF357E97B2D94746563C75B515E651E2BB7E524A8352777D6F + 87C7A5A074F75AABBC7B11D4BED5A5E2B697D7554B47124F4540B77702119A95 + 49D2FA2CD201D636205854C44619A4934E1145145778FC891F81976E01A06DAF + 777EF585F2F0D0A9E3676C7DEB4AF4E23C88475C4A7DE20A88C366F298288B88 + C72535929B656C264FB46459476CC2EED7DF67C392DF6F4BD141853C9B89F39B + A6D6EEBC9AC605100F22241365B40DC82E5B435428A14D808DF3C4C5E564FA06 + 48EB155A95C976CA001B367069D00DA0BCDF0DEAD38152CFB157D7FBA585C0E3 + D1A4F559BC77C4C5E5884BA98D0D53BD7E89646294DA8DCB8877C43DFDB4AAD3 + 88778042BC6EB3DDAD22B35460FD852B2343278F9D32F54A05AD35ADDA0C4126 + 8F3296C6CC38E21DD9A5ABD1618C6BD410EF30418C78874F9B6DF118017FBB8A + 0E6AFCF3CA64B70CAFD87EAD15E6C1A7884BD1617B03D7A861E31C26CA10E68A + 2863E7E4B45048344FF4DFA6A21740EDEDA8A8EF48E2A9A0504A232E45298DD6 + 16EF9A2801D76A22E2514A93261594B1E8200484E4DB415AA33716A4C8D89257 + 6AF0427964FDE9E3A76DBD52456B838932A4F55900827C0F69BD426D7C9864EA + 3AA068CC8CD3981E272AF4B50B5340664294E9E6C08A97AF94C8A138CEADBA39 + B4F36C1A17FA8D7704B922AD1BD3B4AA9304B91E9436B8469520D783F814F11E + 1BE7D0C6E2BDB4EBD7C8428ED1BAE57721EA9355A5DEA3AF6DECA848046502A2 + 25CB684C8FD198BA81B60151A18409E33658B3D6AE9579BE659DE074372FD647 + A617E7D7FD7B6564E8D4D133D4B7F4A30A39F08E2053406B4B63668C5675AA4D + AE78C43B82454B3A9ED5F61F25E0B4E28BE70678673E005EBED1223F88C90E5E + EADF7E5C87F9E5A66309221E1365C9F40DE0D326E25240A16D80B6E1FFD63177 + E6B7DFD8C8F5FE4A37806EC91EB4DABBA6D4B3ED950DD5BEC375A13AE7451D10 + 001D441044B71C7481218A828942489876CF6B1FEA655EB1EEF2B591CD678F9F + B6C9DDEC5AA47BDCB12FDC3EAFA3507F99B53C73B5AA074757EFB8A2B305F01E + E964F7BE8680788B28416401C9BF8D26D41ABEF5D368BEDC0CB48B95B943DBB8 + 8FA6D3F737B95CC2EC1F9BE0D179001F9FAF001019E5C0CDDAB4C6BB3B56F270 + 3124F5F7D73A95125CBC8603A7B31CFB3349BA6E707D7DB56D235AE81DCFBCA7 + C66E7EF6E1E16953C806E9FDB66605D41BA8E1C90467AB1F7401D4B36E8E6E1A + 56FFE2C57E7EF166ADC864D278A014092AB6B62ECAFF3C7FFEBF010078973DC1 + 6838A9120000000049454E44AE426082} + end + item + ImageFormat = ifPNG + ImageName = 'if_Plus_206460' + ImgData = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000B1300000B1301009A9C18000000206348524D0000 + 7A25000080830000F9FF000080E9000075300000EA6000003A980000176F925F + C5460000039C4944415478DA94954D685C5514C77FE7BEFBDEBCCCA44968DA9A + 4045F1A3A2A128C418C52AF8D18A2485BAEAC60F44E8CA5529C4EE8A2BC9C685 + 2E140411AC22984DDDA6A82D285649A875232EDCA96D33C6A49399791FF71E17 + 6F92C94C26697A56EFBD73DFFF7FCFF99F0F51DA56BF6784B5FB0E12F6DF8255 + A80F0D0FE2E4A8208F814E808C00022CA9B220B088D1F9D82E5DCF5C05471FDE + 29155B66A8B41754B1749B2A089534DA735ABC7903B8BF7048C731119E6B3DFD + 9DE57BCE63F53D1CD56E38D3F153EE7071FC44920FFD98C7E577D175F01D4C19 + CDB5EF8C73F12F28D3DD6ECBC80828E45649F60D4CFB92FD529CE917F5ECD604 + 052FF70217043D057CB21EB1F56363A0508FDD93B5D07F153857EE89E23D9A67 + A020D64210F4E6423E06963D6E0E14A93F730417C860ADC2CF2AFA60CF2CA409 + E1E1714A275F076348BEF99AEC87EF9052BC4D48522D3B99B08E3FCD4A45A995 + FDCC76E000388FEC1D269C788A707C127360145CBE832E3ADC50776E55534C6E + 82516FE4ADDB26DA3B34CBD0DCB5C06567ED0379358BF49011E38F091CD88D94 + 77682694F0A41595A711ED644F12F0AEFDDEA84396B689B2B4F8269B488DD9A2 + 89AA4E59839FD4CDB753251C9F4406863648344D09C61E05E74094E0D0C34447 + A790A8D4020FD0DA2AF9B545F07E835890BBE4AFE923D7594F912AA85299FD88 + 70EC309A65ED4A77AE1D850D8B52A5157918E2FFF89D5B674E419E83D9E8DF25 + 0B045BABAC1591988DB920DEA36881295280E8A6D49A9E1A89059681E1752080 + 64EE3CE9B7C3454A00B294E0A147885E9C0284ECF23CD9D505248A0A7F10A02B + CBAD39D641D4B40AD7041ED83CC5D24BF35B448E8E1D277AE9041821BFBA4032 + F73952AE748A1CF7751088EABF56D55C16F1AF74C415C7DD39434AA522E70A44 + 1152AE7412F4AA53CF4F46E12290DE5989EBAE4E25D67D6644F915B870FB3E33 + 602DD8A02DFECE77B8A2AA57CC606D8DBE7A724ED1C6F6E0026982566FA2D52A + DA6C768BD9852D5A72E1D9A1B4924AF3C4CB8050F7E9DB0DDFF8407A8D045508 + C38D4ED524297AA21789378403FFCDF68FDE98C1832D450320862C59F9B0EEEA + 074564A66704595600B72A66BB0854E50B1BD7CFC6FBFE811C0CEA415B4D04EF + 80CE80E45B00448A251304F4F409A8EAFB0AAFA1E27180EFDAC9C561371BC6B5 + 174C33FF7ED72B33778BA6911C57AFA70BD8CD3BB957FD9AF492BD517F7EEDEE + FDCF1AE54D84C781FD9BC68A57A80AFCA6AA9FC637962FE6FDA52651B4A582FF + 1F0038338D059D4696E40000000049454E44AE426082} + end + item + ImageFormat = ifPNG + ImageName = 'if_icon-32-clipboard-edit_315153' + ImgData = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000000097048597300000B1300000B + 1301009A9C180000022A494441544889B5953F68136118C69FE74D2E2460544C + 32285A9D74138AAB88200EE22C2E16A4C4C5C13F83604BE291A6D2C1A2E22208 + D20CCE16B21475AA5484D2A1A350147489E4CF26815C92F775B06A53EFCEBB56 + DFEDBEFBDEDFEF7BEEBBFB0EF8CFC5D0BBAE497EE85D25658CC0BB66D579F34F + 05F9526F9222CF7F5CA999DA89F66C7A238E20E9379873F510303C8EA19DD91C + 7A0CC82DD02EE6DCFE7A0AC9D54685DD28825F09F6B9B63FA5FDA20AD7683A4D + C8F9E0369B865A0302B666523580F6D704CEB0FF04C209313C34B011BE2EFB0A + 911B00C60B25CF5AB3A81DBEAD995E765053B5B392908956C5793D22A0700C00 + A05A247053135C08C28BC93900E39B8DC78EBA96EEDA6089C647E8258BC80C97 + 0BAED76D55522B7FEE81C85E000B12187A5B1620FD4DBD4590ED4ED5A903B47C + D9BB067012C08A44C30417A9D721F294E046BE3C98CBDDD12C8DCFC4EC0500EC + 4EA0EA29E54AA7E2D4DB33CE1481A464FA9F49DC6D5653EF772750F53421973A + 15A70E0005D7F618F5244D2E6FFD207726F0839BF7524C1E6CFFDAE30BFCE0EA + 2D9232EF7794C41304C121F33FDFFB9D0B7CE0AA832550D65A55E755505B3441 + 005C88D334F4C25A230994ACFBC1A3F4FA9EA6A38BC73AC98FF97BFD3932793F + 0E1C88904004ABED6A720A6A0761FD0F71E0408404805D2894BC36440EC401C7 + 10F00824FCCF1A56BF1F9169C4F373B48C16DAB7650F64393E5E87667C1B3663 + 247BBEEC9D3261362A3E81C1976625F3296CCE77FF0F08AC0D4ED1BF00000000 + 49454E44AE426082} + end + item + ImageFormat = ifPNG + ImageName = 'if_f-cross_256_282471' + ImgData = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000000097048597300000B1300000B + 1301009A9C1800000374494441544889A5944D4F1B471C877F0B46024BBB5E9B + D81036383659BF606F9A188528226F52455F0E1CA2A4DF203D987E8C7C076A59 + E2D653AB5E535544EA21A25253C5A4C56F183B053760073678D6EB8241B6777A + 48D635BBB6A1ED4F5AAD34F39FE799D99D19C09018107A76733A1B0304635FAF + 2C01932B37431B5F0381BE853120B4FEC5A775F5499426166E2BE791C4017762 + E19EAA3E89D2F5479F1C1925839DF0B9071F273C41CF309A1A1C63CEE111EBF0 + E3C8EB37DF3C056ABDE0373EBF9312AF07583435F017F8219BDDF6F86A6EFBFB + A7C00100306DF8C2DD84C73F356C846CFEB6A1BCFCE985B408EC9AE0F3B752E2 + 4701D638A6B8B1555FFDE179E42B20C7C480D0DC6773098FE835C1F5E47ECF29 + 89D5976DC9327039727F36294A7E13BC2DC96FD757577E8E30CF446F76F6FE6C + B057617B25E98292F8654D1A022CD76FCF24C5A0D813AEE7C5F35F339642616B + 9EB3B3E94040B4F52BF68B1E1ECD466A60607050F47A589C34FB4F285B205BF9 + ED79FD1F0833D7C269BF6FAAAFC4140AD05613D0284035800260807C7187BC5A + CF84A34099D16B638030139E4EF9BD1EBE27506B81361A40A3F1FEAD69A6925C + A94CD68B3BE12850063EECA24E49241048F9DD93FF4828053D39013D3E069A67 + 7C96BD3D922995A52F8192DEC6188B628010117D29DFD8459ED6EBA0F53A4069 + 5F30006C566492DDDF3F05EF2AD025D71CAEA48FE3ED679201E4AB8464886C82 + 0380A5DB8021C0425B74506B9ABF71B7D01645A3C7644D8D71C01DB639935758 + 1B772EFA87BC56159254DF5D359EF8538238E09EE69DC92996FF57F0B6A44648 + 46392D690BE2803BC83B93DEFF08D7F3478D906C878401DEDFE712EF4CB9B9FF + 07D753AC294A96C8D222B0CB2C019321DE752E7851251500B8CCD91D674B8892 + 23B26499B0722B828DE75A670C78A3924A5E912500D018A4DD9CBDEF16BEC4D9 + F9EAC9F18F03E523F5C1EE5FEA910606BD9E3F5552C913598A02E528502E1039 + 5C5415D26F4CA9A61EBE3DAA3D6400200E047DA3E38931D66635CE64A75A215B + 446EDF2D7A968109B7C39512BAAC64AF563DCC1DBC8D2C02F9CE5D14BC323ABE + 36C6F2237ADB6EB5427688F9F8774A2E395C698173B4EFAEFD5AF570F3A01C59 + 04F280F91C04BD17C6D75C2C3F52AA5648A9D21BDE2911465DE98B9C8397D5EA + 61A103DE354BC0F4B7562EBD0C4CF40377260608DF59B9640CF019FBFE0635A4 + 856102F313DA0000000049454E44AE426082} + end + item + ImageFormat = ifPNG + ImageName = 'if_Arrows_Refresh_Replace_Round_Circle_1329089' + ImgData = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000000097048597300000B1300000B + 1301009A9C1800000321494441544889AD954B685C6514C77FE7DC9B747011AA + A52028D959882082963699A48A4866A2B8A8AF4553AA66A6524491BA517C4029 + 2A8A5DB445306A3B93526D91806E2A319D442AB63369A1462BB8D155A12B4524 + 4A4C99CC9CE3A2337726D37964C0B3FAEE79FCFEE7FBEEFDCE15BAB4D974FE5D + F07D209F8C6586DFEC94AFDD0A60F2AAA29B1479E36CFAC2E1FF5D40D44E476B + 747F27116915984D176E1393BB048F894A2DCF3C74E175C446407B011C3B92CC + 8CBCD251C071994B2FEC027FD9F06D8AB66CA0D11C5E4B66E21F34FAA3239A99 + F87EF35C6A611E3805B2BD1B78A5D32180E9A7A7839B76F0F50BE76F0DAF4B5E + 5507AA01335B55D15F4C6CE9E6AE2466C8BD0AB14AEE9204E1C342798BB964D5 + EC67E98925463FDDBA1402F4148363A20C54C9AE7A2828F51C1AFD6CFB9F8DF0 + DC73857B08F8760D9C20993C3EF8436E22FF9E2A3154B7954BC549603CCCED3D + 3F88F364AD3DDD93CCC44F3782ABE601670436AF814F0D5D0270212B300AA0C2 + AEB9E7F38715D7BDB56A3E4FB48103B8D9DACE2B70806476F80B872FA3DC92A7 + 15F307AB0EC13E6A07AF942571DEF6C087EBE19189470C431E0A51FAAB8EB0BC + FA6327FCD8D48E2BC09556F1DED5E2E26AB8E1C6834ABF62EAD5E04ADF8AB72A + 5CAF2DDF12D67DDEE6A1E15715D902D0B3DC771FB0D058343F71F16E537F9C32 + D3891343BFB513D8703DB8DF2BB74B5DAFAA8A7C57D3E3A5C6825CEAC2D6925A + 1EFC1DA43CD36907AEBC18ADF1730A76ACEA10D5F15C7AE1897AB889CE296C04 + 30A5ED119E4D17F6013BA3864D8E6B223B72D9AD36211D1F6F06C7F93D2478AA + 19F8DCB3976ECFA50A471D9BAC71ECE42327E28B0230B3FB625F18B333C000E2 + 7BCA25F9436EDCD68D95560CB86CCA4A235CD14DC000509B41CE4FFF620FECCC + 8EFCD374A0CDA60AB32A24DB1D476BF36F8ABDB6FBB1C91D7F0184CD52D47D11 + 91F50B9819A279448E2432F1AFEA434D05F2FDF1B7E2D7F27708FA4C04509D37 + B7F70309A217EDE68ED872A918FEFAE8A9C1BF9BB15ACEFC03075CE3D7F25391 + 086070742C13DFBFEE9DD1E69F7CF0A058E1CEE109C74ED625A7BA81B715582B + E21F1BB662F887DD0AFC07064149F4FA78C4B60000000049454E44AE426082} + end + item + ImageFormat = ifPNG + ImageName = 'if_Finance_financial_report_1889193' + ImgData = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000B1300000B1301009A9C1800000283494441544889 + CD55CF6B1341187D33B39B4DB21B9B4A2D55531B43696BF560A9A7220551507A + B2877A147A10F12FF0508540F122F4AE7892828A291E3C14F5280A821504A988 + 42DA52A4256D134D36D9CDFE98F590FE4A339BA415C177D99D99F7BDF7CDB733 + DF02FF13C627A686C627A686F61323ED87EC513EB9F97AB1D91802008F52B377 + A500BBDC88BC96FDD50A00470E47738DB88EE5BEBE313632290140BE541C7474 + 6FA0C97C90C9FE8E37624A94AC6F47A4D3E92ECBB6171B1B348F802CC71389C4 + D2F637082A0AF492816F8BCB0080881A466F576C5FA2DAD7F7B0DABB60B5C5C0 + 390700D0BFCD9415B2209609700E6A146AD6AB4E91160EE15C7F4F0DE9D0C759 + 04D696B13E72B392956DC26332E03A507FCCC1A30CD4D451387B093CA8FA1BF8 + 41CEAD42594DEF24F2E52D78200856CA233F78051E9340CD628D785D03A9B001 + 75FE1D8AA7CFD7ACE96786C103C1AA3991787D83FC06A21F5EA2DC79AA66EDF3 + D20A2CDB16C6F5C53BA18543FE06CA6A1A5C09FBF90200A211158EE38A1363AC + 7ABC97D036FB1066AC57589A2DB4682A38F7C40652038366B0B492397889CA1D + 09D8AD1DE04A0866AC175C09C16EED007176047797E8C4D1F69AB2F8EE402F19 + 988B5FA80C3206D07FB5F254BB01B51B7D25035A385455224A48DDDD3675D1F6 + A245131F495F83379FE6A7EB6DF320705C771AC0B00400B9BCFEC4B6DDEC6E42 + D9B222859271BC25A22EC84C2A8B445CC751727AF164440DFD54E44055239265 + F60AD86AF0025CBF73FF013C3E6A7C4F1C4BA5AE090F7D3299A4693BB842405E + 3CBE77FB968823ECA66363CF192564945236E327BE69C02965338492D1643229 + D4124E467A1606001880F7CC4F7C5B8093A70031175CAD893FE23FC01FF2EDDB + AF4F531BCA0000000049454E44AE426082} + end> + Left = 464 + Top = 368 + Bitmap = { + 494C010100000800080001000100FFFFFFFF0400FFFFFFFFFFFFFFFF424D7600 + 0000000000007600000028000000040000000100000001000400000000000400 + 0000000000000000000000000000000000000000000000008000008000000080 + 8000800000008000800080800000C0C0C000808080000000FF0000FF000000FF + FF00FF000000FF00FF00FFFF0000FFFFFF0000000000} + end + object handBookMenu: TPopupMenu + Left = 352 + Top = 368 + object G1: TMenuItem + Caption = #1055#1086#1076#1088#1072#1079#1076#1077#1083#1077#1085#1080#1103 + OnClick = G1Click + end + object R1: TMenuItem + Tag = 1 + Caption = #1050#1083#1080#1077#1085#1090#1099 + OnClick = G1Click + end + object N1: TMenuItem + Tag = 2 + Caption = #1042#1080#1076#1099' '#1088#1072#1073#1086#1090 + OnClick = G1Click + end + end + object AllImages: TsAlphaImageList + Items = < + item + ImageFormat = ifPNG + ImageName = 'if_Plus_206460 (1)' + ImgData = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000000097048597300000B1300000B + 1301009A9C18000001B849444154388D7D92BF6B535114C73FF7BCD73C6ACD90 + 4142DB411004916C4E8A76483BA4A915042BE2E22218C1C13FC0BD83382BAD43 + 055BD0384809A5082D2DC49452BA8838280541699D147C069A1FEF5C8790F691 + DE97331DCEF99EEFF77CCFBD869EF8313576DE33D17DC5E441CF02A0F25D8475 + AFADF3D9D5DA5E1C6FBAC9E7998BA94C3D336B318F45905E6200558D44CCB3E1 + 83C3276677B77544F0B550084EF97FDF0B52700DF68685953F83BF6FE6CA5F9A + 0270DA0F9FBA86831B3304D3B74E10182866EA995900733075391719EF93C4EC + 74233DF706AC257C70C761071524278A57720D77A4DC650011041395C458C693 + DD02D626B6143B61F68B571B082980E0F63D521393C70B0CA53B1CF5F0A8D6FC + 50A1F1EE7597A2E1ABE8F1AB5985283A2915AFC536B288989FD7AFEC0972CEB5 + 62FA6519DA2DC2D2DD2413DF44908D248F26E1B631C4861865AE2FA6CF1141E7 + 6578A5BA0D2CBADACDEA1AADDAA69B175E8D54B6767C8001D1872D950BC0A538 + E870E1B95B57D91918F21E019DF39F59AE85A976336F2D6FFBDAE9482F05BE8E + 67CB9BFFC0F103F78BD7C6305149ADE445C80228FA4B90358B7D315AF9588DE3 + FF0319D79682A3E8D74F0000000049454E44AE426082} + end + item + ImageFormat = ifPNG + ImageName = 'if_Delete_1493279' + ImgData = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000000097048597300000B1300000B + 1301009A9C180000020049444154388D6360185460B98C64F25A15F9C9B8E4E7 + 3330706CD5523BB85A5EB61126C602632C93114F3232D09AC3C1CECEB0FAD7DF + 2FA18F9E54226B9E2824C427252D7A5C4F4743EBD2A59BE20C0C0CF50C0C0C0C + 4C3005AC0CCC2A2CFFFE33B03330301869AB56AC94962884C94DE3E616D39612 + BDACAFA6AC75E3EA9DE78F1E3FB382C931C318AB3F7DDE6BFDEDDB0F012E2E17 + 5E767606015E1E77EB1F3FEEF930B37E525790B9A0A9202379E7E1A30FB76FDD + 3748FDFAF5154C1F23BA3F97898B24E92ACACF11E6E5667CFDF9CBFFCF5FBE7D + 539214E37EF8F2CDF7EBF71FEB277DFE7C1B593D86010C0C0C0C0B8585FDF5A4 + C5D78AF1F332333030303C7DF7E1F7D5572FCC125F7FBC80AE9605533B030303 + D3EF1FFF7EFDFAFFFFE72F06060606867F7F7FFFFBFFEDCF5FAC4AD105960A0B + 44EB098A6E1363636379FBF1F3FF076FDE7D9766E3605715133E3E8B9F5F11AF + 01CB84840AF4F8F997083332327DFAFA8DE1CAABB719D7DFBCD7BBFBFAED0779 + 36366E351E8ED3B3B9B9C5B1BA7A859050FD3559A9FF0F1564FFDF9093FEBF52 + 48A00A26378793536AB7B8E8B3870AB2FF778A893C9E2928C88FE182BF7FFEBC + FEFBF337C38FEF3F192E7CFC3C29FCDD8736985CCAF7EFCF1E7CFFA973E5E3E7 + 3B6A4CCC32D28CFF8E6275C5523EBE9C3502DC73FFE3889D45E2E2DC9B05F84F + AD14E0EBC46AC0800000BAA0B99FED47BF460000000049454E44AE426082} + end + item + ImageFormat = ifPNG + ImageName = 'if_slice426_2859107' + ImgData = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000B1300000B1301009A9C18000000D649444154388D + CD91B14AC3601446CFFD13EC141FA25BFB0042860E195D3209AE35739752088E + 6E92B5D0312AE2E8123AF541149FA1D0B985D6FF76692089AD495CEA375EBE73 + B8DC0BE78E342D3E5CBF5DAE2F7629304FB2E16B3E374D059BCE760ADC002FF7 + E17394CFDD3A300E534FC4198BC84455AF809E8A4C80A75A411CA61EE22C00FF + DBDABE63CCC05A7DC732AADD2087057C00416ED5DA5592DD05C5DED11B54E143 + 9682CEAADD1F5F38051B6CF098459FBF0ADAC225C15F6028DC408C9BB6854B02 + 54BB6DE1B2003E8015F0D514FE1FD90332F653EBB29C55C40000000049454E44 + AE426082} + end> + Left = 552 + Top = 376 + Bitmap = { + 494C010100000800080001000100FFFFFFFF0400FFFFFFFFFFFFFFFF424D7600 + 0000000000007600000028000000040000000100000001000400000000000400 + 0000000000000000000000000000000000000000000000008000008000000080 + 8000800000008000800080800000C0C0C000808080000000FF0000FF000000FF + FF00FF000000FF00FF00FFFF0000FFFFFF0000000000} + end + object q: TMyQuery + Connection = dm.cn + Left = 560 + Top = 232 + end + object reportMenu: TPopupMenu + Left = 256 + Top = 368 + object J1: TMenuItem + Caption = #1054#1090#1095#1077#1090' '#1087#1086' '#1082#1083#1080#1077#1085#1090#1072#1084' '#1079#1072' '#1084#1077#1089#1103#1094 + OnClick = J1Click + end + object N2: TMenuItem + Caption = #1054#1090#1095#1077#1090' '#1087#1086' '#1082#1083#1080#1077#1085#1090#1072#1084'-'#1074#1080#1076#1072#1084' '#1088#1072#1073#1086#1090 + OnClick = N2Click + end + object N3: TMenuItem + Caption = #1048#1090#1086#1075#1080' '#1087#1086' '#1089#1086#1090#1088#1091#1076#1085#1080#1082#1072#1084 + end + object N4: TMenuItem + Caption = #1048#1090#1086#1075#1080' '#1087#1086' '#1074#1080#1076#1072#1084' '#1088#1072#1073#1086#1090' '#1073#1091#1093#1075#1072#1083#1090#1077#1088#1072 + end + end +end diff --git a/MainUnit.pas b/MainUnit.pas new file mode 100644 index 0000000..186c051 --- /dev/null +++ b/MainUnit.pas @@ -0,0 +1,316 @@ +unit MainUnit; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, UserModel, Vcl.ComCtrls, Vcl.ToolWin, + System.ImageList, Vcl.ImgList, acAlphaImageList, Vcl.Menus, UfrHandbook, + DBGridEhGrouping, ToolCtrlsEh, DBGridEhToolCtrls, DynVarsEh, EhLibVCL, + GridsEh, DBAxisGridsEh, DBGridEh, DataUnit, UfrEditTask, TaskUnit, Data.DB, + MemDS, DBAccess, MyAccess, StrUtils, DbUtilsEh, UfrReportClient, UfrClientWorkReport; + +type + TfrMain = class(TForm) + ToolBar1: TToolBar; + btnAdmin: TToolButton; + toolImages: TsAlphaImageList; + ToolButton2: TToolButton; + btnBooks: TToolButton; + ToolButton4: TToolButton; + btnAdd: TToolButton; + handBookMenu: TPopupMenu; + G1: TMenuItem; + AllImages: TsAlphaImageList; + R1: TMenuItem; + N1: TMenuItem; + DBGridEh1: TDBGridEh; + ToolButton1: TToolButton; + ToolButton3: TToolButton; + ToolButton5: TToolButton; + ToolButton6: TToolButton; + ToolButton7: TToolButton; + q: TMyQuery; + btnReport: TToolButton; + reportMenu: TPopupMenu; + J1: TMenuItem; + N2: TMenuItem; + N3: TMenuItem; + N4: TMenuItem; + + procedure CreateParams(var Params: TCreateParams); override; + procedure btnAdminClick(Sender: TObject); + procedure G1Click(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure btnAddClick(Sender: TObject); + procedure ToolButton1Click(Sender: TObject); + procedure ToolButton6Click(Sender: TObject); + procedure DBGridEh1DblClick(Sender: TObject); + procedure ToolButton3Click(Sender: TObject); + procedure DBGridEh1TitleClick(Column: TColumnEh); + procedure DBGridEh1ApplyFilter(Sender: TObject); + procedure DBGridEh1KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormCreate(Sender: TObject); + procedure DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect; + DataCol: Integer; Column: TColumnEh; State: TGridDrawState); + procedure J1Click(Sender: TObject); + procedure N2Click(Sender: TObject); + private + { Private declarations } + function getTaskSql:string; + function getTaskSqlSorted(ack:boolean; column:string):string; + public + { Public declarations } + CurrentUser:TUser; + end; + +const + settFolder:string='clientscrm'; + FOddRowColor:TColor= $00EFEFEF; + +var + frMain: TfrMain; + +implementation + +{$R *.dfm} + +uses UfrManageUsers; + +function TfrMain.getTaskSql:string; +begin +if(CurrentUser.Role<>urAdmin) then +begin + Result:=dataUnit.taskSql + +' WHERE tasks.`user_id`='+inttostr(CurrentUser.id) + +' '+DataUnit.taskSqlGrop; + //ShowMessage(dm.taskQ.SQL.Text); +end else Result:=dataUnit.taskSql+' '+DataUnit.taskSqlGrop; +end; + +function TfrMain.getTaskSqlSorted(ack:boolean; column:string):string; +begin +if(CurrentUser.Role<>urAdmin) then +begin + Result:=dataUnit.taskSql + +' WHERE tasks.`user_id`='+inttostr(CurrentUser.id) + +' '+DataUnit.taskSqlGrop + +' '+IfThen(ack, 'order by '+column+' asc', 'order by '+column+' desc'); + //ShowMessage(dm.taskQ.SQL.Text); +end else Result:=dataUnit.taskSql+' '+DataUnit.taskSqlGrop + +' '+IfThen(ack, 'order by '+column+' asc', 'order by '+column+' desc'); +end; + + +procedure TfrMain.J1Click(Sender: TObject); +var frReport:TfrReportClient; +begin +frReport:=TfrReportClient.Create(Application); +frReport.ShowModal; +end; + +procedure TfrMain.N2Click(Sender: TObject); +var frReport:TfrClientWorkReport; +begin +frReport:=TfrClientWorkReport.Create(Application); +frReport.ShowModal; +end; + +procedure TfrMain.CreateParams(var Params: TCreateParams); +begin + inherited; + Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; +end; + +procedure TfrMain.DBGridEh1ApplyFilter(Sender: TObject); +var s : string; +cond:string; +i:integer; +begin +cond:=''; +s:=''; +s:=GetExpressionAsFilterString(TDBGridEh(Sender), GetOneExpressionAsLocalFilterString, nil); +//showmessage(s); +dm.taskQ.Filter:=s; +dm.taskQ.Filtered:=dm.taskQ.Filter<>''; +//gfilter[1]:=s; +end; + +procedure TfrMain.DBGridEh1DblClick(Sender: TObject); +var frTask:TfrEditTask; + task:TTask; +begin +if(dm.taskQ.RecordCount=0)then exit; + +frTask:=TfrEditTask.Create(Application); +frTask.idTask:=dm.taskQ.FieldByName('id').AsInteger; +with dm.taskQ do + task:=TTask.Create( + FieldByName('id').AsInteger, FieldByName('dt').AsDateTime, + FieldByName('id_client').AsInteger, FieldByName('id_work').AsInteger, + FieldByName('work').AsString, FieldByName('client').AsString, + FieldByName('comment').AsString, + FieldByName('time_work').AsInteger, FieldByName('user_id').AsInteger + ); + +frTask.task:=task; +frTask.Show; +end; + +procedure TfrMain.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect; + DataCol: Integer; Column: TColumnEh; State: TGridDrawState); +var + IsOdd: Boolean; +begin +{IsOdd := Odd((Sender as TDBGridEh).DataSource.Dataset.RecNo); +if IsOdd then +begin +(Sender as TDBGridEh).Canvas.Brush.Color := FOddRowColor; +end; + +if gdSelected in State Then + TDBGridEh(Sender).Canvas.Brush.Color:= clDefault; +TDBGridEh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);} +end; + +procedure TfrMain.DBGridEh1KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin +if(Key=VK_INSERT) then btnAdd.Click; +if(Key=VK_DELETE) then ToolButton3.Click; +end; + +procedure TfrMain.DBGridEh1TitleClick(Column: TColumnEh); +begin +//DBGridEh1.SortLocal:=true; +//DBGridEh1.OptionsEh:=DBGridEh1.OptionsEh + [dghAutoSortMarking]; +//DBGridEh1.FieldColumns[Column.FieldName].Title.SortMarker := smDownEh; +// or like this +DBGridEh1.FieldColumns[Column.FieldName].Title.SetNextSortMarkerValue(True); +case Column.Title.SortMarker of + smDownEh: begin + dm.taskQ.SQL.Text:=getTaskSqlSorted(true, Column.FieldName); + //showmessage(dm.taskQ.SQL.Text); + dm.taskQ.open; + end; + smUpEh: begin + dm.taskQ.SQL.Text:=getTaskSqlSorted(false, Column.FieldName); + //showmessage(dm.taskQ.SQL.Text); + dm.taskQ.open; + end; + smNoneEh: begin + //showmessage(dm.taskQ.SQL.Text); + dm.taskQ.SQL.Text:=getTaskSql; + dm.taskQ.open; + end; +end; +//2. Apply sorting + //DBGridEh1.DefaultApplySorting; +end; + +procedure TfrMain.FormClose(Sender: TObject; var Action: TCloseAction); +begin +DBGridEh1.SaveColumnsLayoutIni(getmys+settFolder+'\'+'gridMain.ini', 'main',false); +end; + +procedure TfrMain.FormCreate(Sender: TObject); +var + RestoreParams:TDBGridEhRestoreParams; +begin +RestoreParams:=[grpColWidthsEh]; +DBGridEh1.RestoreGridLayoutIni(getmys+settFolder+'\'+'gridMain.ini','main', RestoreParams); +end; + +procedure TfrMain.FormShow(Sender: TObject); +begin +btnAdmin.Enabled:=CurrentUser.Role=urAdmin; +n1.Enabled:=CurrentUser.Role=urAdmin; +g1.Enabled:=CurrentUser.Role=urAdmin; + +if(CurrentUser.Role<>urAdmin) then +begin + dm.taskQ.SQL.Text:=dataUnit.taskSql + +' WHERE tasks.`user_id`='+inttostr(CurrentUser.id) + +' '+DataUnit.taskSqlGrop; + //ShowMessage(dm.taskQ.SQL.Text); +end; +dm.tasksFilter.SQL.Text:=getTaskSql; +dm.taskQ.Open; +dm.tasksFilter.Open; +end; + +procedure TfrMain.G1Click(Sender: TObject); +var currItem:TmenuItem; + table:string; + frHandBook:TfrHandBook; +begin + currItem:=TMenuItem(sender); + case currItem.Tag of + 0:table:='department'; + 1:table:='clients'; + 2:table:='works'; + end; + frHandBook:=TfrHandbook.Create(Application); + frHandBook.tableName:=table; + frHandBook.tableId:=currItem.Tag; + frHandBook.ShowModal; +end; + +procedure TfrMain.ToolButton1Click(Sender: TObject); +var frTask:TfrEditTask; + task:TTask; +begin +if(dm.taskQ.RecordCount=0)then exit; + +frTask:=TfrEditTask.Create(Application); +frTask.idTask:=dm.taskQ.FieldByName('id').AsInteger; +with dm.taskQ do + task:=TTask.Create( + FieldByName('id').AsInteger, FieldByName('dt').AsDateTime, + FieldByName('id_client').AsInteger, FieldByName('id_work').AsInteger, + FieldByName('work').AsString, FieldByName('client').AsString, + FieldByName('comment').AsString, + FieldByName('time_work').AsInteger, FieldByName('user_id').AsInteger + ); + +frTask.task:=task; +frTask.ShowModal; +end; + +procedure TfrMain.ToolButton3Click(Sender: TObject); +begin +if(dm.taskQ.RecordCount=0) then exit; + +if(MessageDlg('Äåéñòâèòåëüíî óäàëèòü?',mtconfirmation, [mbyes, mbno],0)=mrYes) then +begin + q.SQL.Text:='delete from tasks where id='+dm.taskQ.FieldByName('id').AsString; + q.Execute; + dm.taskQ.Refresh; +end; +end; + +procedure TfrMain.ToolButton6Click(Sender: TObject); +begin +if(dm.taskQ.Active)then dm.taskQ.Refresh; +end; + +procedure TfrMain.btnAddClick(Sender: TObject); +var frTask:TfrEditTask; +begin + frTask:=TfrEditTask.Create(Application); + frTask.idTask:=-1; + frTask.task:=TTask.Create; + frTask.task.idUser:=CurrentUser.id; + frTask.ShowModal; +end; + +procedure TfrMain.btnAdminClick(Sender: TObject); +var frManageU:TfrManageUsers; +begin +frManageU:=TfrManageUsers.Create(Application); +frManageU.ShowModal; +end; + +end. diff --git a/TaskUnit.pas b/TaskUnit.pas new file mode 100644 index 0000000..6f3148b --- /dev/null +++ b/TaskUnit.pas @@ -0,0 +1,67 @@ +unit TaskUnit; + +interface + +Uses + System.SysUtils, System.Classes; + +type + TTask = class(TObject) + private + FId:Integer; + FIdUser:integer; + FDate:TDate; + FIdClient, FIdWork, FTime:integer; + Fclient, Fwork, FComment:string; + + + public + constructor Create; overload; + constructor Create(Id:integer; date:TDate; idClient, idWork:integer; work, + client, comment:string; time, idUser:integer); overload; + + + destructor Destroy; override; + + property id:Integer read FId write FId; + property idClient:integer read FIdClient write FIdClient; + property idWork:integer read FIdWork write FIdWork; + property client:string read Fclient write fClient; + property work:string read Fwork write Fwork; + property date:TDate read FDate write FDate; + property comment:string read FComment write FComment; + property time:integer read FTime write FTime; + property idUser:integer read FIdUser write FIdUser; + end; + +implementation + +{ TUser } + +constructor TTask.Create; +begin + +end; + +constructor TTask.Create(Id: integer; date: TDate; idClient, idWork: integer; + work, client, comment: string; time, idUser: integer); +begin +inherited Create; + FId:=id; + FDate:=date; + FIdClient:=idClient; + FIdWork:=idWork; + Fwork:=work; + Fclient:=client; + FComment:=comment; + FTime:=time; + FIdUser:=idUser; +end; + +destructor TTask.Destroy; +begin + + inherited; +end; + +end. diff --git a/UfrClientWorkReport.dfm b/UfrClientWorkReport.dfm new file mode 100644 index 0000000..75769cc --- /dev/null +++ b/UfrClientWorkReport.dfm @@ -0,0 +1,148 @@ +object frClientWorkReport: TfrClientWorkReport + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = #1054#1090#1095#1077#1090' '#1087#1086' '#1082#1083#1080#1077#1085#1090#1072#1084'-'#1074#1080#1076#1072#1084' '#1088#1072#1073#1086#1090 + ClientHeight = 358 + ClientWidth = 527 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + OnClose = FormClose + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 14 + object Label3: TLabel + Left = 169 + Top = 32 + Width = 15 + Height = 14 + Caption = #1055#1086 + end + object Label2: TLabel + Left = 8 + Top = 8 + Width = 43 + Height = 14 + Caption = #1055#1077#1088#1080#1086#1076 + end + object Label1: TLabel + Left = 8 + Top = 64 + Width = 89 + Height = 14 + Caption = #1055#1086#1076#1088#1072#1079#1076#1077#1083#1077#1085#1080#1077 + end + object Label4: TLabel + Left = 8 + Top = 104 + Width = 49 + Height = 14 + Caption = #1050#1083#1080#1077#1085#1090#1099 + end + object Label5: TLabel + Left = 272 + Top = 104 + Width = 66 + Height = 14 + Caption = #1042#1080#1076#1099' '#1088#1072#1073#1086#1090 + end + object dt2: TDateTimePicker + Left = 200 + Top = 28 + Width = 155 + Height = 22 + Date = 43286.332057719900000000 + Time = 43286.332057719900000000 + TabOrder = 0 + end + object dt1: TDateTimePicker + Left = 8 + Top = 28 + Width = 155 + Height = 22 + Date = 43286.331979479170000000 + Time = 43286.331979479170000000 + TabOrder = 1 + end + object cb: TComboBox + Left = 8 + Top = 80 + Width = 347 + Height = 22 + Style = csDropDownList + TabOrder = 2 + end + object lbClient: TCheckListBox + Left = 8 + Top = 124 + Width = 258 + Height = 157 + ItemHeight = 14 + TabOrder = 3 + end + object lbWorks: TCheckListBox + Left = 272 + Top = 124 + Width = 247 + Height = 157 + ItemHeight = 14 + TabOrder = 4 + end + object Button1: TButton + Left = 8 + Top = 287 + Width = 105 + Height = 18 + Caption = #1054#1090#1084#1077#1090#1080#1090#1100' '#1074#1089#1077 + TabOrder = 5 + OnClick = Button1Click + end + object Button2: TButton + Left = 119 + Top = 287 + Width = 105 + Height = 18 + Caption = #1057#1085#1103#1090#1100' '#1074#1089#1077 + TabOrder = 6 + OnClick = Button2Click + end + object Button3: TButton + Left = 272 + Top = 287 + Width = 105 + Height = 18 + Caption = #1054#1090#1084#1077#1090#1080#1090#1100' '#1074#1089#1077 + TabOrder = 7 + OnClick = Button3Click + end + object Button4: TButton + Left = 383 + Top = 287 + Width = 105 + Height = 18 + Caption = #1057#1085#1103#1090#1100' '#1074#1089#1077 + TabOrder = 8 + OnClick = Button4Click + end + object Button5: TButton + Left = 444 + Top = 325 + Width = 75 + Height = 25 + Caption = 'OK' + Default = True + TabOrder = 9 + OnClick = Button5Click + end + object q: TMyQuery + Connection = dm.cn + Left = 424 + Top = 24 + end +end diff --git a/UfrClientWorkReport.pas b/UfrClientWorkReport.pas new file mode 100644 index 0000000..77d029f --- /dev/null +++ b/UfrClientWorkReport.pas @@ -0,0 +1,142 @@ +unit UfrClientWorkReport; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Data.DB, MemDS, DBAccess, + MyAccess, Vcl.ComCtrls, DataUnit, UtilsUnit, Vcl.CheckLst, UfrClientWorkReportR; + +type + TfrClientWorkReport = class(TForm) + dt2: TDateTimePicker; + q: TMyQuery; + dt1: TDateTimePicker; + cb: TComboBox; + Label3: TLabel; + Label2: TLabel; + Label1: TLabel; + lbClient: TCheckListBox; + lbWorks: TCheckListBox; + Label4: TLabel; + Label5: TLabel; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + Button5: TButton; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure Button5Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + frClientWorkReport: TfrClientWorkReport; + i:integer; + dep, clients, works:TLockupValue; + +implementation + +{$R *.dfm} + +procedure TfrClientWorkReport.Button1Click(Sender: TObject); +begin +lbClient.CheckAll(cbChecked); +end; + +procedure TfrClientWorkReport.Button2Click(Sender: TObject); +begin +lbClient.CheckAll(cbUnChecked); +end; + +procedure TfrClientWorkReport.Button3Click(Sender: TObject); +begin +lbWorks.CheckAll(cbChecked); +end; + +procedure TfrClientWorkReport.Button4Click(Sender: TObject); +begin +lbWorks.CheckAll(cbUnChecked); +end; + +procedure TfrClientWorkReport.Button5Click(Sender: TObject); +var + frRep:TfrClientWorkReportR; + selClients, selWorks:TLockupValue; +begin +selClients:=TLockupValue.Create; +selWorks:=TLockupValue.Create; + frRep:=TfrClientWorkReportR.Create(Application); + frRep.dt1:=dt1.Date; + frRep.dt2:=dt2.Date; + frRep.idDep:=dep.getIdFromPosValue(cb.ItemIndex); + frRep.nameDep:=cb.Text; + for I := 0 to lbClient.Items.Count-1 do + if(lbClient.Checked[i]) then selClients.addPair(clients.getPair(i)); + for I := 0 to lbWorks.Items.Count-1 do + if(lbWorks.Checked[i]) then selWorks.addPair(works.getPair(i)); + + frRep.clients.Assign(selClients); + frRep.works.Assign(selWorks); + + frRep.ShowModal; +end; + +procedure TfrClientWorkReport.FormClose(Sender: TObject; + var Action: TCloseAction); +begin +Action:=caFree; +end; + +procedure TfrClientWorkReport.FormCreate(Sender: TObject); +begin +dt1.Date:=now; +dt2.Date:=now; +dep:=TLockupValue.Create; +clients:=TLockupValue.Create; +works:=TLockupValue.Create; +q.SQL.Text:='select * from department order by name asc'; +q.Open; +//if q.RecordCount=0 then exit; +dep.addPair(-1, 'Ïî âñåì'); +for I := 0 to q.RecordCount-1 do + begin + dep.addPair(q.FieldByName('id').AsInteger, q.FieldByName('name').AsString); + q.Next; + end; +q.Close; +cb.Items.Assign(dep.slValues); +cb.ItemIndex:=0; + +q.SQL.Text:='select * from clients order by name asc'; +q.Open; +for I := 0 to q.RecordCount-1 do + begin + clients.addPair(q.FieldByName('id').AsInteger, q.FieldByName('name').AsString); + q.Next; + end; +lbClient.Items.Assign(clients.slValues); +lbClient.CheckAll(cbChecked); +q.Close; + +q.SQL.Text:='select * from works order by name asc'; +q.Open; +for I := 0 to q.RecordCount-1 do + begin + works.addPair(q.FieldByName('id').AsInteger, q.FieldByName('name').AsString); + q.Next; + end; +lbWorks.Items.Assign(works.slValues); +q.Close; +lbWorks.CheckAll(cbChecked); +end; + +end. diff --git a/UfrClientWorkReportR.dfm b/UfrClientWorkReportR.dfm new file mode 100644 index 0000000..deadaf4 --- /dev/null +++ b/UfrClientWorkReportR.dfm @@ -0,0 +1,64 @@ +object frClientWorkReportR: TfrClientWorkReportR + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu, biMaximize] + Caption = 'frClientWorkReportR' + ClientHeight = 493 + ClientWidth = 686 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + OnClose = FormClose + OnCreate = FormCreate + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object DBGridEh1: TDBGridEh + Left = 8 + Top = 280 + Width = 670 + Height = 192 + DataSource = ds + DynProps = <> + TabOrder = 0 + Visible = False + object RowDetailData: TRowDetailPanelControlEh + end + end + object lv: TListView + AlignWithMargins = True + Left = 3 + Top = 3 + Width = 680 + Height = 487 + Align = alClient + Columns = <> + GridLines = True + ReadOnly = True + RowSelect = True + TabOrder = 1 + ViewStyle = vsReport + OnColumnClick = lvColumnClick + OnCompare = lvCompare + OnCustomDrawSubItem = lvCustomDrawSubItem + ExplicitLeft = 8 + ExplicitTop = 8 + ExplicitWidth = 670 + ExplicitHeight = 225 + end + object q: TMyQuery + Connection = dm.cn + Left = 600 + Top = 440 + end + object ds: TMyDataSource + DataSet = q + Left = 640 + Top = 440 + end +end diff --git a/UfrClientWorkReportR.pas b/UfrClientWorkReportR.pas new file mode 100644 index 0000000..1b1ddb6 --- /dev/null +++ b/UfrClientWorkReportR.pas @@ -0,0 +1,234 @@ +unit UfrClientWorkReportR; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DataUnit, DBGridEhGrouping, ToolCtrlsEh, + DBGridEhToolCtrls, DynVarsEh, Vcl.ComCtrls, EhLibVCL, GridsEh, DBAxisGridsEh, + DBGridEh, Data.DB, DBAccess, MyAccess, MemDS, UtilsUnit; + +type + TfrClientWorkReportR = class(TForm) + q: TMyQuery; + ds: TMyDataSource; + DBGridEh1: TDBGridEh; + lv: TListView; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormShow(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure lvColumnClick(Sender: TObject; Column: TListColumn); + procedure lvCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; + var Compare: Integer); + procedure lvCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; + SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); + private + { Private declarations } + procedure createSqlReport; + procedure fillReport; + function getReportItemByPair(pair:TLockupPair):TListItem; + + public + { Public declarations } + idDep, nameDep:string; + dt1, dt2:TDate; + clients, works:TLockupValue; + end; + +const + sqlReport:string= + 'select tasks.id, tasks.id_client, tasks.id_work, tasks.time_work, tasks.dt, tasks.user_id,'+chr(13)+ + 'clients.`name` as `client`,'+chr(13)+ + 'works.`name` as `work`'+chr(13)+ + 'from tasks'+chr(13)+ + 'LEFT JOIN works ON (works.`id`=tasks.`id_work`)'+chr(13)+ + 'LEFT JOIN clients ON (clients.`id`=tasks.`id_client`)'+chr(13)+ + 'WHERE (tasks.dt BETWEEN :dt1 AND :dt2)'; + sqlGroup:string=' GROUP BY tasks.id'; + sqlOrder:string=' ORDER BY clients.name ASC'; + +var + frClientWorkReportR: TfrClientWorkReportR; + i:integer; + sort:TSortState=ssNone; + ColumnToSort:integer; + +implementation + +{$R *.dfm} + +procedure TfrClientWorkReportR.createSqlReport; +var slUserIds:TStringList; +begin +if(idDep='-1') then +begin + q.SQL.Text:=sqlReport+sqlGroup+sqlOrder; + q.ParamByName('dt1').Value:=toMySqlDate(dt1); + q.ParamByName('dt2').Value:=toMySqlDate(dt2); +end else + begin + slUserIds:=TStringList.Create; + q.SQL.Text:='select users.id, users.id_dep from users where users.id_dep='+idDep; + q.Open; + if(q.RecordCount=0) then + begin + ShowMessage('Íå íàéäåíî íè îäíîãî ïîëüçîâàòåëÿ â ýòîì ïîäðàçäåëåíèè'); + q.Close; + slUserIds.Free; + exit; + end; + + for I := 0 to q.RecordCount-1 do + begin + slUserIds.Add(q.FieldByName('id').AsString); + q.Next; + end; + q.Close; + slUserIds.Delimiter:=','; + //showmessage(slUserIds.DelimitedText); + q.SQL.Text:=sqlReport+chr(13)+ + 'AND (tasks.user_id in('+slUserIds.DelimitedText+'))' + +sqlGroup+sqlOrder; + q.ParamByName('dt1').Value:=toMySqlDate(dt1); + q.ParamByName('dt2').Value:=toMySqlDate(dt2); + slUserIds.Free; + end; + +end; + +procedure TfrClientWorkReportR.fillReport; +var i:integer; + +function addColumn(caption:string; width:integer):TListColumn; +begin + result:=lv.Columns.Add; + Result.Caption:=caption; + Result.Width:=width; +end; + +begin +addColumn('Êëèåíòû', 120); +for I := 0 to works.slValues.Count-1 do addColumn(works.slValues.Strings[i], 100); +addColumn('Èòîãî', 100); + +for I := 0 to clients.count-1 do + getReportItemByPair(clients.getPair(i)); + +q.Close; +end; + +procedure TfrClientWorkReportR.FormClose(Sender: TObject; + var Action: TCloseAction); +begin +Action:=caFree; +clients.Free; +works.Free; +end; + +procedure TfrClientWorkReportR.FormCreate(Sender: TObject); +begin +clients:=TLockupValue.Create; +works:=TLockupValue.Create; +end; + +procedure TfrClientWorkReportR.FormShow(Sender: TObject); +begin +Caption:='Îò÷åò ïî êëèåíòà-âèäàì ðàáîò'; + +//ShowMessage('selected clients count='+inttostr(clients.count)+' works count='+IntToStr(works.count)); +createSqlReport; +//ShowMessage(q.SQL.Text); +q.Open; +fillReport; +end; + + +function TfrClientWorkReportR.getReportItemByPair(pair: TLockupPair): TListItem; +var item:TListItem; + i, posWork, tm, sumTm:integer; +begin +item:=lv.Items.Add; +item.Caption:=pair.value; +sumTm:=0; + +for I := 0 to works.count-1 do + item.SubItems.Add('0'); + +item.SubItems.Add('0'); + +//ShowMessage('works text='+works.slIds.Text); + +q.First; + for I := 0 to q.RecordCount-1 do + begin + if(pair.id=q.FieldByName('id_client').AsInteger) then + begin + //showmessage(q.FieldByName('id_work').AsString); + posWork:=works.getPositionFromId(q.FieldByName('id_work').AsInteger); + //ShowMessage(inttostr(posWork)); + if(posWork=-1) then + begin + q.Next; + Continue; + end; + + tm:=strtoint(item.SubItems.Strings[posWork]); + tm:=tm+q.FieldByName('time_work').AsInteger; + sumTm:=sumTm+q.FieldByName('time_work').AsInteger; + item.SubItems.Strings[posWork]:=inttostr(tm); + + end; + q.Next; + end; + +item.SubItems[item.SubItems.Count-1]:=inttostr(sumTm); +Result:=item; +end; + +procedure TfrClientWorkReportR.lvColumnClick(Sender: TObject; + Column: TListColumn); +begin +ColumnToSort := Column.Index; +//if(ColumnToSort>0) then +if(sort=ssNone) then sort:=ssUp +else if(sort=ssUp) then sort:=ssDown +else if(sort=ssDown) then sort:=ssUp; + +(Sender as TCustomListView).AlphaSort; +end; + +procedure TfrClientWorkReportR.lvCompare(Sender: TObject; Item1, + Item2: TListItem; Data: Integer; var Compare: Integer); +var + ix: Integer; + f1, f2:real; +begin +if(ColumnToSort=0) then +begin + if(sort=ssUp) then + Compare := CompareText(Item1.Caption, Item2.Caption) + else Compare := CompareText(Item2.Caption, Item1.Caption); +end else +begin + ix := ColumnToSort - 1; + f1:=strtofloat(Item1.SubItems[ix]); + f2:=strtofloat(Item2.SubItems[ix]); + if(sort=ssUp) then + Compare:=CompareDoubleInc(f1, f2) + else Compare:=CompareDoubleInc(f2, f1); +end; + +end; + +procedure TfrClientWorkReportR.lvCustomDrawSubItem(Sender: TCustomListView; + Item: TListItem; SubItem: Integer; State: TCustomDrawState; + var DefaultDraw: Boolean); +begin +if(SubItem=Item.SubItems.Count) then +begin + Sender.Canvas.Font.Style:= Sender.Canvas.Font.Style + [fsBold]; + Sender.Canvas.Brush.Color:=cl3dLight; +end; +end; + +end. diff --git a/UfrEditTask.dfm b/UfrEditTask.dfm new file mode 100644 index 0000000..517bf2f --- /dev/null +++ b/UfrEditTask.dfm @@ -0,0 +1,129 @@ +object frEditTask: TfrEditTask + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = #1047#1072#1076#1072#1095#1072 + ClientHeight = 390 + ClientWidth = 294 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + OnClose = FormClose + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnKeyDown = FormKeyDown + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 14 + object Label1: TLabel + Left = 16 + Top = 8 + Width = 26 + Height = 14 + Caption = #1044#1072#1090#1072 + end + object Label2: TLabel + Left = 16 + Top = 56 + Width = 41 + Height = 14 + Caption = #1050#1083#1080#1077#1085#1090 + end + object Label3: TLabel + Left = 16 + Top = 112 + Width = 58 + Height = 14 + Caption = #1042#1080#1076' '#1088#1072#1073#1086#1090 + end + object label23: TLabel + Left = 16 + Top = 168 + Width = 183 + Height = 14 + Caption = #1042#1088#1077#1084#1103' '#1074#1099#1087#1086#1083#1077#1085#1077#1085#1080#1103'('#1074' '#1084#1080#1085#1091#1090#1072#1093')' + end + object Label4: TLabel + Left = 16 + Top = 216 + Width = 77 + Height = 14 + Caption = #1050#1086#1084#1084#1077#1085#1090#1072#1088#1080#1081 + end + object dtPicker: TDateTimePicker + Left = 16 + Top = 28 + Width = 257 + Height = 22 + Date = 43280.554542488440000000 + Time = 43280.554542488440000000 + TabOrder = 0 + OnKeyDown = FormKeyDown + end + object cbClients: TComboBox + Left = 16 + Top = 76 + Width = 257 + Height = 22 + Style = csDropDownList + TabOrder = 1 + OnKeyDown = FormKeyDown + end + object cbWorks: TComboBox + Left = 16 + Top = 132 + Width = 257 + Height = 22 + Style = csDropDownList + TabOrder = 2 + OnKeyDown = FormKeyDown + end + object edTime: TEdit + Left = 16 + Top = 188 + Width = 257 + Height = 22 + NumbersOnly = True + TabOrder = 3 + end + object edComment: TMemo + Left = 16 + Top = 236 + Width = 257 + Height = 101 + MaxLength = 255 + ScrollBars = ssVertical + TabOrder = 4 + OnKeyDown = FormKeyDown + end + object Button1: TButton + Left = 198 + Top = 360 + Width = 75 + Height = 25 + Caption = 'OK' + Default = True + TabOrder = 5 + OnClick = Button1Click + end + object Button2: TButton + Left = 117 + Top = 360 + Width = 75 + Height = 25 + Cancel = True + Caption = #1054#1090#1084#1077#1085#1072 + TabOrder = 6 + OnClick = Button2Click + end + object q: TMyQuery + Connection = dm.cn + Left = 144 + end +end diff --git a/UfrEditTask.pas b/UfrEditTask.pas new file mode 100644 index 0000000..4fabb68 --- /dev/null +++ b/UfrEditTask.pas @@ -0,0 +1,164 @@ +unit UfrEditTask; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, UtilsUnit, + DataUnit, Data.DB, MemDS, DBAccess, MyAccess, TaskUnit; + +type + TfrEditTask = class(TForm) + Label1: TLabel; + dtPicker: TDateTimePicker; + Label2: TLabel; + cbClients: TComboBox; + Label3: TLabel; + cbWorks: TComboBox; + label23: TLabel; + edTime: TEdit; + Label4: TLabel; + edComment: TMemo; + Button1: TButton; + Button2: TButton; + q: TMyQuery; + procedure CreateParams(var Params: TCreateParams); override; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure Button2Click(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure FormCreate(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + private + { Private declarations } + public + { Public declarations } + idTask:integer; + task:TTask; + end; + +var + frEditTask: TfrEditTask; + works, clients:TLockupValue; + i:integer; + +implementation + +{$R *.dfm} + + +procedure TfrEditTask.Button1Click(Sender: TObject); +begin +if(cbClients.ItemIndex=-1)or(cbWorks.ItemIndex=-1)or(edTime.Text='') +then begin + messagedlg('Çàïîëíèòå ïîëÿ êëèåíò, âèä ðàáîòû, âðåìÿ', mtwarning, [mbok], 0); + exit; + end; + //if(dtPicker.=nil)then dtPicker.Date:=now; + + if(idTask=-1) then + begin + //ShowMessage(toMySqlDate(dtPicker.Date)); + q.SQL.Text:='insert into `tasks` '+ + '(`dt`, `id_client`, `id_work`, `time_work`, `comment`, `user_id`) '+ + 'values(' + + qs(toMySqlDate(dtPicker.Date)) + +', '+qs(clients.getIdFromPosValue(cbClients.ItemIndex)) + +', '+qs(works.getIdFromPosValue(cbWorks.ItemIndex)) + +', '+qs(edTime.Text) + +', '+qs(edComment.Text) + +', '+qs(inttostr(task.idUser)) + +')'; + q.Execute; + end else + begin + q.SQL.Text:='UPDATE `tasks` SET '+ + '`dt`='+qs(toMySqlDate(dtPicker.Date))+', '+ + '`id_client`='+qs(clients.getIdFromPosValue(cbClients.ItemIndex))+', '+ + '`id_work`='+qs(works.getIdFromPosValue(cbWorks.ItemIndex))+', '+ + '`time_work`='+qs(edTime.Text)+', '+ + '`comment`='+qs(edComment.Text)+', '+ + '`user_id`='+qs(inttostr(task.idUser))+ + ' WHERE `id`='+inttostr(idTask); + q.Execute + end; + + dm.taskQ.Refresh; + close; +end; + +procedure TfrEditTask.Button2Click(Sender: TObject); +begin +Close; +end; + +procedure TfrEditTask.CreateParams(var Params: TCreateParams); +begin + inherited; + Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; +end; + +procedure TfrEditTask.FormClose(Sender: TObject; var Action: TCloseAction); +begin +Action:=caFree; +end; + +procedure TfrEditTask.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin +works.Free; +clients.Free; +end; + +procedure TfrEditTask.FormCreate(Sender: TObject); +begin +dtPicker.Date:=now; +works:=TLockupValue.Create; +clients:=TLockupValue.Create; + +q.sql.Text:='select * from clients'; +q.Open; +for I := 0 to q.RecordCount-1 do +begin + clients.addPair(q.FieldByName('id').AsInteger, q.FieldByName('name').AsString); + q.Next; +end; +q.Close; +cbClients.Items.Assign(clients.slValues); + +q.sql.Text:='select * from works'; +q.Open; +for I := 0 to q.RecordCount-1 do +begin + works.addPair(q.FieldByName('id').AsInteger, q.FieldByName('name').AsString); + q.Next; +end; +q.Close; +cbWorks.Items.Assign(works.slValues); + +end; + +procedure TfrEditTask.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin +if ([ssCtrl] = Shift) and (Key = VK_RETURN) then begin + //Íàæàòà êîìáèíàöèÿ Ctrl+Enter. + //... + //... + Button1.Click; + end; +end; + +procedure TfrEditTask.FormShow(Sender: TObject); +begin +if(idTask<>-1) then +begin + dtPicker.Date:=task.date; + edComment.Text:=task.comment; + cbClients.ItemIndex:=clients.getPositionFromId(task.idClient); + cbWorks.ItemIndex:=works.getPositionFromId(task.idWork); + edTime.Text:=inttostr(task.time); +end; +end; + +end. diff --git a/UfrEditUser.dfm b/UfrEditUser.dfm new file mode 100644 index 0000000..7c19144 --- /dev/null +++ b/UfrEditUser.dfm @@ -0,0 +1,118 @@ +object frEditUser: TfrEditUser + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = #1056#1077#1076#1072#1082#1090#1080#1088#1086#1074#1072#1085#1080#1077' '#1087#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1103 + ClientHeight = 293 + ClientWidth = 316 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + OnClose = FormClose + OnCreate = FormCreate + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 14 + object Label1: TLabel + Left = 8 + Top = 8 + Width = 27 + Height = 14 + Caption = #1060#1048#1054 + end + object Label2: TLabel + Left = 8 + Top = 56 + Width = 34 + Height = 14 + Caption = #1051#1086#1075#1080#1085 + end + object Label3: TLabel + Left = 8 + Top = 104 + Width = 41 + Height = 14 + Caption = #1055#1072#1088#1086#1083#1100 + end + object Label4: TLabel + Left = 8 + Top = 152 + Width = 33 + Height = 14 + Caption = #1055#1088#1072#1074#1072 + end + object Label5: TLabel + Left = 8 + Top = 200 + Width = 89 + Height = 14 + Caption = #1055#1086#1076#1088#1072#1079#1076#1077#1083#1077#1085#1080#1077 + end + object edFio: TEdit + Left = 8 + Top = 28 + Width = 300 + Height = 22 + TabOrder = 0 + end + object edLogin: TEdit + Left = 8 + Top = 76 + Width = 300 + Height = 22 + TabOrder = 1 + end + object edPass: TEdit + Left = 8 + Top = 124 + Width = 300 + Height = 22 + TabOrder = 2 + end + object ComboBox1: TComboBox + Left = 8 + Top = 172 + Width = 300 + Height = 22 + Style = csDropDownList + TabOrder = 3 + end + object ComboBox2: TComboBox + Left = 8 + Top = 220 + Width = 300 + Height = 22 + Style = csDropDownList + TabOrder = 4 + end + object Button1: TButton + Left = 233 + Top = 264 + Width = 75 + Height = 25 + Caption = 'OK' + Default = True + TabOrder = 5 + OnClick = Button1Click + end + object Button2: TButton + Left = 152 + Top = 264 + Width = 75 + Height = 25 + Cancel = True + Caption = #1054#1090#1084#1077#1085#1072 + TabOrder = 6 + OnClick = Button2Click + end + object q: TMyQuery + Connection = dm.cn + Left = 136 + Top = 16 + end +end diff --git a/UfrEditUser.pas b/UfrEditUser.pas new file mode 100644 index 0000000..bbd02f7 --- /dev/null +++ b/UfrEditUser.pas @@ -0,0 +1,150 @@ +unit UfrEditUser; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Data.DB, MemDS, + DBAccess, MyAccess, + DataUnit; + +type + TfrEditUser = class(TForm) + Label1: TLabel; + edFio: TEdit; + Label2: TLabel; + edLogin: TEdit; + Label3: TLabel; + edPass: TEdit; + Label4: TLabel; + ComboBox1: TComboBox; + Label5: TLabel; + ComboBox2: TComboBox; + Button1: TButton; + Button2: TButton; + q: TMyQuery; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormCreate(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure FormShow(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + idUser:integer; + end; + +var + frEditUser: TfrEditUser; + roles, departments: TStringList; + i:integer; + +implementation + +{$R *.dfm} + +uses UfrManageUsers; + +function qs(s:string):string; +begin + Result:=chr(39)+s+chr(39); +end; + +procedure TfrEditUser.Button1Click(Sender: TObject); +var idRole, idDep:string; +begin +if(edFio.Text='')or(edPass.Text='')or(edLogin.Text='') then +begin + ShowMessage('Çàïîëíèòå âñå ïîëÿ'); + exit; +end; + +idRole:=roles[ComboBox1.ItemIndex]; +if(ComboBox2.ItemIndex=-1) then idDep:='-1' +else idDep:=departments[ComboBox2.ItemIndex]; + +if(idUser=-1) then begin +q.SQL.Text:='insert into `users` '+ + '(`id_role`, `login`, `pass`, `user_name`, `id_dep`) '+ + 'values(' + +qs(idRole) + +', '+qs(edLogin.Text) + +', '+qs(edPass.Text) + +', '+qs(edFio.Text) + +', '+qs(idDep) + +')'; +q.Execute; +end else +begin + q.SQL.Text:='UPDATE `users` SET '+ + '`user_name`='+qs(edfio.Text)+', '+ + '`login`='+qs(edLogin.Text)+', '+ + '`pass`='+qs(edPass.Text)+', '+ + '`id_role`='+qs(idRole)+', '+ + '`id_dep`='+qs(idDep)+ + ' WHERE `id`='+inttostr(iduser); + q.Execute +end; + +dm.usersQ.Refresh; +close; +end; + +procedure TfrEditUser.Button2Click(Sender: TObject); +begin +Close; +end; + +procedure TfrEditUser.FormClose(Sender: TObject; var Action: TCloseAction); +begin +Action:=caFree; +end; + +procedure TfrEditUser.FormCreate(Sender: TObject); +begin +roles:=TStringList.Create(); +departments:=TStringList.Create(); + +q.SQL.Text:='select * from user_roles'; +q.Open; +for I := 0 to q.RecordCount-1 do + begin + roles.add(q.FieldByName('id').AsString); + ComboBox1.Items.Add(q.FieldByName('name').AsString); + q.Next; + end; +ComboBox1.ItemIndex:=0; +q.Close; + +q.SQL.Text:='select * from department'; +q.Open; +for I := 0 to q.RecordCount-1 do + begin + departments.add(q.FieldByName('id').AsString); + ComboBox2.Items.Add(q.FieldByName('name').AsString); + q.Next; + end; +q.Close; + + +end; + +procedure TfrEditUser.FormShow(Sender: TObject); +begin +if(idUser<>-1) then + begin + q.SQL.Text:='select * from users where id='+inttostr(idUser); + q.Open; + if(q.RecordCount=0) then exit; + + edFio.Text:=q.FieldByName('user_name').AsString; + edLogin.Text:=q.FieldByName('login').AsString; + edPass.Text:=q.FieldByName('pass').AsString; + ComboBox1.ItemIndex:=roles.IndexOf(q.FieldByName('id_role').AsString); + ComboBox2.ItemIndex:=departments.IndexOf(q.FieldByName('id_dep').AsString); + q.Close; + end; +end; + +end. diff --git a/UfrHandbook.dfm b/UfrHandbook.dfm new file mode 100644 index 0000000..0b15ee2 --- /dev/null +++ b/UfrHandbook.dfm @@ -0,0 +1,59 @@ +object frHandbook: TfrHandbook + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu, biMaximize] + Caption = #1057#1087#1088#1072#1074#1086#1095#1085#1080#1082 + ClientHeight = 381 + ClientWidth = 540 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + OnClose = FormClose + OnCloseQuery = FormCloseQuery + OnShow = FormShow + DesignSize = ( + 540 + 381) + PixelsPerInch = 96 + TextHeight = 14 + object DBGridEh1: TDBGridEh + AlignWithMargins = True + Left = 3 + Top = 3 + Width = 534 + Height = 339 + Align = alTop + Anchors = [akLeft, akTop, akRight, akBottom] + DataSource = dm.handbookDS + DynProps = <> + TabOrder = 0 + Columns = < + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'name' + Footers = <> + Title.Caption = #1053#1072#1079#1074#1072#1085#1080#1077 + Width = 500 + end> + object RowDetailData: TRowDetailPanelControlEh + end + end + object DBNavigator1: TDBNavigator + Left = 3 + Top = 348 + Width = 225 + Height = 25 + DataSource = dm.handbookDS + VisibleButtons = [nbInsert, nbDelete, nbEdit, nbPost, nbRefresh] + Anchors = [akLeft, akBottom] + TabOrder = 1 + ExplicitTop = 388 + end +end diff --git a/UfrHandbook.pas b/UfrHandbook.pas new file mode 100644 index 0000000..666b736 --- /dev/null +++ b/UfrHandbook.pas @@ -0,0 +1,74 @@ +unit UfrHandbook; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DataUnit, DBGridEhGrouping, ToolCtrlsEh, + DBGridEhToolCtrls, DynVarsEh, Vcl.ExtCtrls, Vcl.DBCtrls, EhLibVCL, GridsEh, + DBAxisGridsEh, DBGridEh; + +type + TfrHandbook = class(TForm) + DBGridEh1: TDBGridEh; + DBNavigator1: TDBNavigator; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormShow(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + private + { Private declarations } + public + { Public declarations } + tableName:string; + tableId:integer;//id òàáëèöû=tag menuItem + end; + +var + frHandbook: TfrHandbook; + +implementation + +{$R *.dfm} + +procedure TfrHandbook.FormClose(Sender: TObject; var Action: TCloseAction); +begin +action:=caFree; +end; + +procedure TfrHandbook.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin +case tableId of + 0:begin + dm.departmentsQ.Close; + end; + 1:begin + dm.clientsQ.Close; + end; + 2:begin + dm.worksQ.Close; + end; +end; +end; + +procedure TfrHandbook.FormShow(Sender: TObject); +begin +case tableId of + 0:begin + dm.handbookDS.DataSet:=dm.departmentsQ; + dm.departmentsQ.Open; + Caption:='Ïîäðàçäåëåíèÿ'; + end; + 1:begin + dm.handbookDS.DataSet:=dm.clientsQ; + dm.clientsQ.Open; + Caption:='Êëèåíòû'; + end; + 2:begin + dm.handbookDS.DataSet:=dm.worksQ; + dm.worksQ.Open; + Caption:='Âèäû ðàáîò'; + end; +end; +end; + +end. diff --git a/UfrLogin.dfm b/UfrLogin.dfm new file mode 100644 index 0000000..411cf56 --- /dev/null +++ b/UfrLogin.dfm @@ -0,0 +1,2210 @@ +object frLogin: TfrLogin + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = #1040#1074#1090#1086#1088#1080#1079#1072#1094#1080#1103 + ClientHeight = 145 + ClientWidth = 399 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + OnClose = FormClose + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object sSpeedButton1: TsSpeedButton + Left = 278 + Top = 112 + Width = 33 + Height = 25 + OnClick = sSpeedButton1Click + Images = sAlphaImageList1 + ImageIndex = 0 + end + object Image1: TImage + AlignWithMargins = True + Left = 3 + Top = 3 + Width = 153 + Height = 139 + Align = alLeft + Center = True + Picture.Data = { + 0B54504E474772617068696336000100424D3600010000000000360000002800 + 0000800000008000000001002000000000000000010000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000013131328111111B1111110F3131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF111110F3111111AF1414 + 1426000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000013131328131312F0131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12EE141414260000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000121212B2131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF111111AF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000111110F4131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF111110F30000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000111110F5131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000121212B4131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001212122A131310F1131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000001212122A121212B4111110F5131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000030E0E0E12000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000001515150C12121296111110F4131312FF111110E81313 + 1174000000010000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000002121212C0131312FF131312FF131312FF131312FF1313 + 12FF1313109C0000000100000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000012121253131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF1212129800000001000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000013131192131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF12121295000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000013131190131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131311920000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001414104B131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF1313108E00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000111111B1131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF1212128B000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000001F1F1F08131310BA131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF121212870000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000001C1C1C09111111BD131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 1183000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000001919190A121212C0131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131311800000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000001717170B121212C21313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF1212127C00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000001515150C1313 + 12C4131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF13131178000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001313 + 130D131310C7131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131311740000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00001111110F131310C9131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF1212127100000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000F0F0F10111111CC131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF1212126E000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000F0F0F11121212CE131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF1313106A0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000D0D0D13121212D0131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FE1414 + 1166000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000C0C0C14131312D2131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FE121212630000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000018180C15131312D41313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FE1212126000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000161616171313 + 10D6131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FD1313135D000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001515 + 1518111110D9131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FC1313105A0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00001313131A111111DB131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FC1111115700000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001212121C121212DC131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FB12121254000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000001111111E131312DE131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FB131313500000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000001010101F131312E0131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FA1313 + 134E000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000F0F0F21131312E2131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12F91414104B0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000015150E23131310E41313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF121212F81111114800000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000001515150C15151518151515181515 + 1518151515181515151815151518151515181515151815151518151515181515 + 1518151515181515151815151518151515181515151815151518151515181515 + 1518151515181515151815151518151515181515151815151518151515181515 + 1518151515181515151815151518151515181515151815151518151515181515 + 1518151515181515151815151518151515181515151815151518151515181515 + 1518151515181515151815151518151515181515151815151518151515181515 + 1518151515181515151815151518151515181515151815151518151515181515 + 1518151515181515151815151518151515181515151815151518151515181515 + 1518151515181515151815151518151515181515151815151518151515181515 + 15181515151815151518151515181515151815151518151515181414103D1313 + 12EF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF111110F712121245000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000012121237131310C8131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF111110F6131313420000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF14141432111110F6131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF111110F51010102D00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131310B9131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF111111B100000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF111110F6131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312EF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF111110F3131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312EC00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF111111B0131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312A800000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF13131327131312EE131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312ED15150E2300000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000014141426131311AE131310F1131312FC131312FC1313 + 12FC131312FC131312FC131312FC131312FC131312FC131312FC131312FC1313 + 12FC131312FC131312FC131312FC131312FC131312FC131312FC131312FC1313 + 12FC131312FC131312FC131312FC131312FC131312FC131312FC131312FC1313 + 12FC131312FC131312FC131312FC131312FC131312FC131312FC131312FC1313 + 12FC131312FC131312FC131312FC131312FC131312FC131312FC131312FC1313 + 12FC131312FC131312FC131312FC131312FC131312FC131312FC131312FC1313 + 12FC131312FC131312FC131312FC131312FC131312FC131312FC131312FC1313 + 12FC131312FC131312FC131312FC131312FC131312FC131312FC131312FC1313 + 12FC131312FC131312FC131312FC131312FC131312FC131312FC131312FC1313 + 12FC131312FC131312FC131312FC131312FC131312FC131312FC131312FC1313 + 12FE131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312EF141414320000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000131313351313 + 12F0131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312F013131335000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000014141433131312EF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131310F11212123700000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000015150F30131312EE131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1111 + 10F21111113A0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000001010102E131312EC131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF111110F31111 + 113C000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000001111112B121212EA131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF111110F51414103E0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000012121229111111E9131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF111110F613131341000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000013131327111110E7131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF111110F71313134300000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001414 + 1425111110E6131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF121212F8121212460000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000015150E231313 + 10E4131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF121212F811111149000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000F0F0F21131312E21313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312F91414104C00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000001010101F131312E0131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FA1313134E0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000001111111D131312DE131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FB1212 + 1252000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000001212121B121212DC131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FB121212540000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001313131A111111DA131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FC11111157000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000015151518111110D8131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FD1313105A00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000001717 + 1716131310D6131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FD1313135D0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000018180C151313 + 12D4131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FE12121260000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000D0D0D13131312D11313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FE1212126300000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000E0E0E12121212CF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FE131311670000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000F0F0F11111111CD131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 106A000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000001111110F111111CB131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF1212126D0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000002121212C1131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF12121270000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000012121253131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF1313117400000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000013131192131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131311780000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001313118F131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF1212127B000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000011111149131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF1212127F00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000131311AE131312FF131312FF131312FF131312FF1313 + 12FF131311820000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000051212127D131312DF131312F9131312D11313 + 105C000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000013131328111111B1111110F3131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000013131328131312F0131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000121212B2131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000111110F4131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000111110F5131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF111110F30000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000121212B4131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF111111B10000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001212122A131310F1131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12F0131313280000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000001212122A121212B4111110F5131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF131312FF131312FF1313 + 12FF131312FF131312FF131312FF131312FF131312FF111110F4121212B21313 + 132800000000} + ExplicitLeft = 8 + ExplicitTop = 0 + ExplicitHeight = 137 + end + object edLogin: TLabeledEdit + Left = 162 + Top = 24 + Width = 230 + Height = 21 + EditLabel.Width = 30 + EditLabel.Height = 13 + EditLabel.Caption = #1051#1086#1075#1080#1085 + TabOrder = 0 + end + object edPassword: TLabeledEdit + Left = 162 + Top = 64 + Width = 230 + Height = 21 + EditLabel.Width = 37 + EditLabel.Height = 13 + EditLabel.Caption = #1055#1072#1088#1086#1083#1100 + PasswordChar = '*' + TabOrder = 1 + end + object OK: TButton + Left = 317 + Top = 112 + Width = 75 + Height = 25 + Caption = 'OK' + Default = True + TabOrder = 2 + OnClick = OKClick + end + object chSave: TCheckBox + Left = 162 + Top = 91 + Width = 230 + Height = 17 + Caption = #1047#1072#1087#1086#1084#1085#1080#1090#1100 + Checked = True + State = cbChecked + TabOrder = 3 + end + object sAlphaImageList1: TsAlphaImageList + Items = < + item + ImageFormat = ifPNG + ImageName = 'if_FEZ-04_196912' + ImgData = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000B1300000B1301009A9C18000000206348524D0000 + 7A25000080830000F9FF000080E9000075300000EA6000003A980000176F925F + C5460000042C4944415478DA8C964D681D5518869FF79C994952D2DE7B090513 + 7F7A8B5068146A690CE24FAC0B5DD49F55176DB5D542978A5DAB2491823B5DB4 + 50BAD286147F7051FC291514852A04BBAAD2EE226D159B841228DCFCDCDC3B73 + 3E179DB94ED334FAC2C07C33E77CEF39EFF9BE77466363631430332411424012 + ABF0B4A42FF2717B81A90D1B3670F6EC59EAF53ADBB66D636161816AB54A08A1 + 33C9B10ECCAC1C0E0203F935C8FFC45A0495E24652E702EE2F08250D949E9751 + 5D8F2002DE03A681B7CAEFCCEC01492F1609CDEC25A0DFCC68B55AA469EABBBB + BB8F6EDCB8F18F2CCBDEF1DE47DE7BBCF74425821E4947813EE7DC71337B02F8 + 0188251D04769576360C7CDE6AB5CE6CDFBE3DADD56A2F6459B64F126676746E + 6EEEB8992D14AB2EB010421877CE9DC8931C000EAC23EF489AA6238383838410 + C8B20C3323CBB2D1D9D9D9C5100221843B080C38093C09EC5F95EC6A08E11749 + 97800CD8296944D2D676BB5D1E376966A7CC8CAEAE2EBABBBB894A0787A4007C + 6766FB0BBDB32CFBC439774CD2D555A475331B9574388F83A4F3CE39FAFAFAA8 + 542A542A953B7640AE6152AA8ED3C01120ACD647D2354947CC4C66F60620A0CB + 39C7E6CD9B89E398344DEF2AD3078183F9FD35603CDFD55D48D39476BB1DDAED + F638704DB7F1BA990DA469DA69B608780A78D4CC0624BD2C69675E8A17245D77 + CEDDD5749268341AE4FA5FAFD56A17E238AE9BD96E495FC771FC2D30035C8E24 + 7D09F4AF21C16F6BC8D769AEDEDEDE0EA973EEF7D259EE8AE378571EFF15E5D5 + B316B2B2659493871088A28852E3DDAB9443941BD72392EE035E011ECF27ED28 + ECA0D56AD16EB73BAB6E369B2449421CC705F98E12D9C576BBFD4D9224332184 + 2B91994D45513415451166F67108E1D3344D9F95B43B84F09073EECF42A2B25C + 790903D49D7323F9AB1FCDECD556AB359B24C96DF9BABABA68341A4C4F4F333D + 3D7D637E7E7ED27B0FB015185FCF71CDCC03EF035B6E873609CC96C744B76EDD + 626262829B376F02303C3CDCDABB77AF2D2E2ECA39773897E098995D5D95FC61 + EFFDA8A4432527680114AB0788E6E7E7191A1A2249126AB59AAF56AB7B969797 + 5592E3701CC7CFC571FCB3995D3233C571FC98F7FE19495BCACE2C698FA4CFBC + F7561445E4BDA75EAF23C9F5F7F7BF6966FB726DFF9DE95C1DA80307251145D1 + BD247B1598927452920144954AE7FBD29BA6E968A9EC26257D9F5BC721606455 + BE9FCCEC0C904A7A1E782DEF95B1959595898E5D6FDAB4A998B01442F8D0CCDE + 0E218C4B3A55ACC2CCCE035F491ACAE35F73C79D2BB9E845E05D491F359BCDE5 + A237A2D2073AF5DE7F3033337322499246B55A4512CD66932CCB6E2449722E49 + 922180959595734B4B4B73711CD3DBDB0B60CEB913CBCBCBA7BDF78D7249476B + E8D82877B0F7BEB0F299CEC145D18D9E9E1E0A9F2AA1B1FA41F45F7F15A503BD + 0CFC9D6559F0DE5FC91BF30E0B590BFF0C005EC00B781CA2D77F000000004945 + 4E44AE426082} + end> + Left = 242 + Top = 8 + Bitmap = { + 494C010100000800080001000100FFFFFFFF0400FFFFFFFFFFFFFFFF424D7600 + 0000000000007600000028000000040000000100000001000400000000000400 + 0000000000000000000000000000000000000000000000008000008000000080 + 8000800000008000800080800000C0C0C000808080000000FF0000FF000000FF + FF00FF000000FF00FF00FFFF0000FFFFFF0000000000} + end + object q: TMyQuery + Connection = dm.cn + SQL.Strings = ( + 'select users.*, user_roles.`role` as `role`' + + 'from users INNER JOIN user_roles ON (user_roles.`id`=users.`id_r' + + 'ole`)' + 'where users.`login`=:login and users.`pass`=:pass') + Left = 314 + Top = 8 + ParamData = < + item + DataType = ftUnknown + Name = 'login' + Value = nil + end + item + DataType = ftUnknown + Name = 'pass' + Value = nil + end> + end +end diff --git a/UfrLogin.pas b/UfrLogin.pas new file mode 100644 index 0000000..efdb7a2 --- /dev/null +++ b/UfrLogin.pas @@ -0,0 +1,131 @@ +unit UfrLogin; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DataUnit, UserModel, + System.ImageList, Vcl.ImgList, acAlphaImageList, Vcl.Buttons, sSpeedButton, + Vcl.StdCtrls, Vcl.ExtCtrls, Data.DB, MemDS, DBAccess, MyAccess, inifiles, + EncryptUnit, UfrSett, MainUnit, acPNG; + + + +type + TfrLogin = class(TForm) + edLogin: TLabeledEdit; + edPassword: TLabeledEdit; + OK: TButton; + sSpeedButton1: TsSpeedButton; + sAlphaImageList1: TsAlphaImageList; + chSave: TCheckBox; + q: TMyQuery; + Image1: TImage; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure OKClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure sSpeedButton1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + + + +var + frLogin: TfrLogin; + ini:TIniFile; + +const key:string='3082'; + +implementation + +{$R *.dfm} + + +procedure TfrLogin.FormClose(Sender: TObject; var Action: TCloseAction); +begin +Action:=caFree; +end; + +procedure TfrLogin.FormCreate(Sender: TObject); +var fn:string; +begin +fn:=getmys+settFolder+'\'; +createdir(fn); +ini:=TIniFile.Create(fn+'sett.ini'); +chSave.Checked:=ini.ReadBool('cred', 'save', true); +if(chSave.Checked) then +begin + edLogin.Text:=ini.ReadString('cred', 'login', ''); + edPassword.Text:=xebi(ini.ReadString('cred', 'pass', ''), key); +end; + +{q.sql.text:='CREATE TABLE IF NOT EXISTS user_roles('+ +'id INT AUTO_INCREMENT NOT NULL,'+ +'role VARCHAR(255) NOT NULL,'+ +'name VARCHAR(255) NOT NULL,'+ +'PRIMARY KEY (id)'+ +');'; +q.Execute;} +end; + +procedure TfrLogin.OKClick(Sender: TObject); +var param:TParam; + user:TUser; + +procedure SetAsMainForm(aForm:TForm); +var + P:Pointer; +begin + P := @Application.Mainform; + Pointer(P^) := aForm; +end; +begin +if(edLogin.Text='')or(edPassword.Text='') then exit; + +ini.WriteBool('cred', 'save', chSave.Checked); + +if(chSave.Checked) then +begin + ini.WriteString('cred', 'login', edLogin.Text); + ini.WriteString('cred','pass', xebi(edPassword.Text, key)); +end; + +q.ParamByName('login').AsString:=edLogin.text; +q.ParamByName('pass').AsString:=edPassword.Text; +q.Execute; +if(q.RecordCount=0) then +begin + MessageDlg('Íå âåðíûé ëîèãí èëè ïàðîëü', mtError, [mbok], 0); + q.Close; + exit; +end else + begin + user:=TUser.Create(q.FieldByName('id').AsInteger, q.FieldByName('login').AsString, + q.FieldByName('pass').AsString, q.FieldByName('user_name').AsString, + q.FieldByName('role').AsString); + //get user department id and name + user.IdDepartment:=q.FieldByName('id_dep').AsInteger; + q.sql.Text:='select * from department where id='+inttostr(user.IdDepartment); + q.Execute; + if(q.RecordCount<>0) then user.Department:=q.FieldByName('name').AsString; + + Application.CreateForm(TfrMain, frMain); + frMain.CurrentUser:=user; + frMain.Show; + q.Close; + SetAsMainForm(frMain); + frLogin.hide; + end; +end; + +procedure TfrLogin.sSpeedButton1Click(Sender: TObject); +var frSett:TfrSett; +begin +frSett:=TfrSett.Create(application); +frSett.ShowModal; +end; + +end. diff --git a/UfrManageUsers.dfm b/UfrManageUsers.dfm new file mode 100644 index 0000000..8a78276 --- /dev/null +++ b/UfrManageUsers.dfm @@ -0,0 +1,151 @@ +object frManageUsers: TfrManageUsers + AlignWithMargins = True + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu, biMaximize] + Caption = #1059#1087#1088#1072#1074#1083#1077#1085#1080#1077' '#1087#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1103#1084#1080 + ClientHeight = 392 + ClientWidth = 660 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + ShowHint = True + OnClose = FormClose + OnCloseQuery = FormCloseQuery + OnShow = FormShow + DesignSize = ( + 660 + 392) + PixelsPerInch = 96 + TextHeight = 14 + object sSpeedButton1: TsSpeedButton + Left = 8 + Top = 368 + Width = 23 + Height = 22 + Hint = #1044#1086#1073#1072#1074#1080#1090#1100 + Anchors = [akLeft, akBottom] + OnClick = sSpeedButton1Click + Images = frMain.AllImages + ImageIndex = 0 + ExplicitTop = 366 + end + object sSpeedButton2: TsSpeedButton + Left = 66 + Top = 368 + Width = 23 + Height = 22 + Hint = #1059#1076#1072#1083#1080#1090#1100 + Anchors = [akLeft, akBottom] + OnClick = sSpeedButton2Click + Images = frMain.AllImages + ImageIndex = 1 + ExplicitTop = 366 + end + object sSpeedButton3: TsSpeedButton + Left = 37 + Top = 368 + Width = 23 + Height = 22 + Hint = #1056#1077#1076#1072#1082#1090#1080#1088#1086#1074#1072#1090#1100 + Anchors = [akLeft, akBottom] + OnClick = sSpeedButton3Click + Images = frMain.AllImages + ImageIndex = 2 + ExplicitTop = 366 + end + object DBGridEh1: TDBGridEh + Left = 0 + Top = 0 + Width = 660 + Height = 362 + Align = alTop + Anchors = [akLeft, akTop, akRight, akBottom] + DataSource = dm.usersDS + DynProps = <> + ReadOnly = True + TabOrder = 0 + Columns = < + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'id' + Footers = <> + Visible = False + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'id_role' + Footers = <> + Visible = False + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'login' + Footers = <> + Title.Caption = #1051#1086#1075#1080#1085 + Width = 90 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'pass' + Footers = <> + Title.Caption = #1055#1072#1088#1086#1083#1100 + Width = 90 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'user_name' + Footers = <> + Title.Caption = #1060#1048#1054 + Width = 250 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'id_dep' + Footers = <> + Visible = False + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'dname' + Footers = <> + Title.Caption = #1055#1086#1076#1088#1072#1079#1076#1077#1083#1077#1085#1080#1077 + Width = 100 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'role' + Footers = <> + Title.Caption = #1055#1088#1072#1074#1072 + Width = 120 + end> + object RowDetailData: TRowDetailPanelControlEh + end + end + object q: TMyQuery + Connection = dm.cn + Left = 424 + Top = 192 + end +end diff --git a/UfrManageUsers.pas b/UfrManageUsers.pas new file mode 100644 index 0000000..bf87e12 --- /dev/null +++ b/UfrManageUsers.pas @@ -0,0 +1,82 @@ +unit UfrManageUsers; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DBGridEhGrouping, ToolCtrlsEh, + DBGridEhToolCtrls, DynVarsEh, EhLibVCL, GridsEh, DBAxisGridsEh, DBGridEh, DataUnit, + MainUnit, Vcl.Buttons, sSpeedButton, UfrEditUser, Data.DB, MemDS, DBAccess, + MyAccess; + +type + TfrManageUsers = class(TForm) + DBGridEh1: TDBGridEh; + sSpeedButton1: TsSpeedButton; + sSpeedButton2: TsSpeedButton; + sSpeedButton3: TsSpeedButton; + q: TMyQuery; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormShow(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure sSpeedButton1Click(Sender: TObject); + procedure sSpeedButton3Click(Sender: TObject); + procedure sSpeedButton2Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + frManageUsers: TfrManageUsers; + +implementation + +{$R *.dfm} + +procedure TfrManageUsers.FormClose(Sender: TObject; var Action: TCloseAction); +begin +Action:=caFree; +end; + +procedure TfrManageUsers.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin +DataUnit.dm.usersQ.Close; +end; + +procedure TfrManageUsers.FormShow(Sender: TObject); +begin +DataUnit.dm.usersq.open; +end; + +procedure TfrManageUsers.sSpeedButton1Click(Sender: TObject); +var frEdit:TfrEditUser; +begin + frEdit:=TfrEditUser.Create(Application); + frEdit.idUser:=-1; + frEdit.ShowModal; +end; + +procedure TfrManageUsers.sSpeedButton2Click(Sender: TObject); +begin +if(dm.usersQ.RecordCount=0)then exit; +if(MessageDlg('Äåéñòâèòåëüíî óäàëèòü?',mtconfirmation, [mbyes, mbno],0)=mrYes) then +begin + q.SQL.Text:='delete from users where id='+dm.usersQ.FieldByName('id').AsString; + q.Execute; + dm.usersQ.Refresh; +end; +end; + +procedure TfrManageUsers.sSpeedButton3Click(Sender: TObject); +var frEdit:TfrEditUser; +begin +if(dm.usersQ.RecordCount=0) then exit; + frEdit:=TfrEditUser.Create(Application); + //Caption:=dm.usersQ.FieldByName('id').AsString; + frEdit.idUser:=dm.usersQ.FieldByName('id').AsInteger; + frEdit.ShowModal; +end; + +end. diff --git a/UfrReportClient.dfm b/UfrReportClient.dfm new file mode 100644 index 0000000..96ab108 --- /dev/null +++ b/UfrReportClient.dfm @@ -0,0 +1,82 @@ +object frReportClient: TfrReportClient + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = #1055#1072#1088#1072#1084#1077#1090#1088#1099' '#1086#1090#1095#1077#1090#1072 + ClientHeight = 149 + ClientWidth = 363 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + OnClose = FormClose + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 14 + object Label1: TLabel + Left = 8 + Top = 64 + Width = 89 + Height = 14 + Caption = #1055#1086#1076#1088#1072#1079#1076#1077#1083#1077#1085#1080#1077 + end + object Label2: TLabel + Left = 8 + Top = 8 + Width = 43 + Height = 14 + Caption = #1055#1077#1088#1080#1086#1076 + end + object Label3: TLabel + Left = 169 + Top = 32 + Width = 15 + Height = 14 + Caption = #1055#1086 + end + object Button1: TButton + Left = 280 + Top = 120 + Width = 75 + Height = 25 + Caption = 'OK' + Default = True + TabOrder = 0 + OnClick = Button1Click + end + object cb: TComboBox + Left = 8 + Top = 80 + Width = 347 + Height = 22 + Style = csDropDownList + TabOrder = 1 + end + object dt1: TDateTimePicker + Left = 8 + Top = 28 + Width = 155 + Height = 22 + Date = 43286.331979479170000000 + Time = 43286.331979479170000000 + TabOrder = 2 + end + object dt2: TDateTimePicker + Left = 200 + Top = 28 + Width = 155 + Height = 22 + Date = 43286.332057719900000000 + Time = 43286.332057719900000000 + TabOrder = 3 + end + object q: TMyQuery + Connection = dm.cn + Left = 176 + Top = 104 + end +end diff --git a/UfrReportClient.pas b/UfrReportClient.pas new file mode 100644 index 0000000..8b6d179 --- /dev/null +++ b/UfrReportClient.pas @@ -0,0 +1,74 @@ +unit UfrReportClient; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, MemDS, DBAccess, MyAccess, + Vcl.StdCtrls, UtilsUnit, DataUnit, Vcl.ComCtrls, UfrReportClientR; + +type + TfrReportClient = class(TForm) + Button1: TButton; + cb: TComboBox; + Label1: TLabel; + q: TMyQuery; + Label2: TLabel; + dt1: TDateTimePicker; + dt2: TDateTimePicker; + Label3: TLabel; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + frReportClient: TfrReportClient; + i:integer; + dep:TLockupValue; + +implementation + +{$R *.dfm} + +procedure TfrReportClient.Button1Click(Sender: TObject); +var frRep:TfrReportClientR; +begin +frRep:=TfrReportClientR.Create(Application); +frRep.idDep:=dep.getIdFromPosValue(cb.ItemIndex); +frRep.dt1:=dt1.Date; +frRep.dt2:=dt2.Date; +frRep.nameDep:=cb.Text; +frRep.ShowModal; +end; + +procedure TfrReportClient.FormClose(Sender: TObject; var Action: TCloseAction); +begin +dep.Free; +Action:=caFree; +end; + +procedure TfrReportClient.FormCreate(Sender: TObject); +begin +dt1.Date:=now; +dt2.Date:=now; +dep:=TLockupValue.Create; +q.SQL.Text:='select * from department order by name asc'; +q.Open; +//if q.RecordCount=0 then exit; +dep.addPair(-1, 'Ïî âñåì'); +for I := 0 to q.RecordCount-1 do + begin + dep.addPair(q.FieldByName('id').AsInteger, q.FieldByName('name').AsString); + q.Next; + end; +q.Close; +cb.Items.Assign(dep.slValues); +cb.ItemIndex:=0; +end; + +end. diff --git a/UfrReportClientR.dfm b/UfrReportClientR.dfm new file mode 100644 index 0000000..bca5e19 --- /dev/null +++ b/UfrReportClientR.dfm @@ -0,0 +1,147 @@ +object frReportClientR: TfrReportClientR + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu, biMaximize] + Caption = 'frReportClientR' + ClientHeight = 411 + ClientWidth = 605 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object DBGridEh1: TDBGridEh + AlignWithMargins = True + Left = 8 + Top = 283 + Width = 589 + Height = 120 + DataSource = ds + DynProps = <> + TabOrder = 0 + Visible = False + Columns = < + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'id' + Footers = <> + Visible = False + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'client' + Footers = <> + Width = 150 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'work' + Footers = <> + Width = 150 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'time_work' + Footers = <> + Width = 55 + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'id_client' + Footers = <> + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'id_work' + Footers = <> + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'dt' + Footers = <> + end + item + CellButtons = <> + DynProps = <> + EditButtons = <> + FieldName = 'user_id' + Footers = <> + end> + object RowDetailData: TRowDetailPanelControlEh + end + end + object lv: TListView + AlignWithMargins = True + Left = 3 + Top = 3 + Width = 599 + Height = 405 + Align = alClient + Columns = < + item + Caption = #1050#1083#1080#1077#1085#1090 + Width = 250 + end + item + Caption = #1042#1088#1077#1084#1103'('#1084#1080#1085')' + Width = 100 + end + item + Caption = #1042#1088#1077#1084#1103'('#1095#1072#1089')' + Width = 100 + end + item + Caption = #1042#1088#1077#1084#1103'('#1092#1072#1082#1090')' + Width = 100 + end> + GridLines = True + ReadOnly = True + TabOrder = 1 + ViewStyle = vsReport + OnColumnClick = lvColumnClick + OnCompare = lvCompare + OnCustomDrawItem = lvCustomDrawItem + end + object q: TMyQuery + Connection = dm.cn + SQL.Strings = ( + + 'select tasks.id, tasks.id_client, tasks.id_work, tasks.time_work' + + ', tasks.dt, tasks.user_id,' + 'clients.`name` as `client`,' + 'works.`name` as `work`' + 'from tasks ' + 'LEFT JOIN works ON (works.`id`=tasks.`id_work`)' + 'LEFT JOIN clients ON (clients.`id`=tasks.`id_client`)' + 'WHERE (tasks.dt BETWEEN '#39'2018-06-28'#39' AND '#39'2018-06-30'#39')' + 'AND (tasks.user_id in(1, 3))' + 'GROUP BY tasks.id') + Left = 416 + Top = 352 + end + object ds: TMyDataSource + DataSet = q + Left = 456 + Top = 352 + end +end diff --git a/UfrReportClientR.pas b/UfrReportClientR.pas new file mode 100644 index 0000000..ea5e296 --- /dev/null +++ b/UfrReportClientR.pas @@ -0,0 +1,204 @@ +unit UfrReportClientR; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DBGridEhGrouping, ToolCtrlsEh, + DBGridEhToolCtrls, DynVarsEh, EhLibVCL, GridsEh, DBAxisGridsEh, DBGridEh, DataUnit, + Data.DB, DBAccess, MyAccess, MemDS, UtilsUnit, Vcl.ComCtrls; + +type + TfrReportClientR = class(TForm) + DBGridEh1: TDBGridEh; + q: TMyQuery; + ds: TMyDataSource; + lv: TListView; + procedure FormShow(Sender: TObject); + procedure lvCustomDrawItem(Sender: TCustomListView; Item: TListItem; + State: TCustomDrawState; var DefaultDraw: Boolean); + procedure lvCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; + var Compare: Integer); + procedure lvColumnClick(Sender: TObject; Column: TListColumn); + private + { Private declarations } + procedure createSqlReport; + public + { Public declarations } + idDep, nameDep:string; + dt1, dt2:TDate; + end; + +const + sqlReport:string= + 'select tasks.id, tasks.id_client, tasks.id_work, tasks.time_work, tasks.dt, tasks.user_id,'+chr(13)+ + 'clients.`name` as `client`,'+chr(13)+ + 'works.`name` as `work`'+chr(13)+ + 'from tasks'+chr(13)+ + 'LEFT JOIN works ON (works.`id`=tasks.`id_work`)'+chr(13)+ + 'LEFT JOIN clients ON (clients.`id`=tasks.`id_client`)'+chr(13)+ + // 'WHERE (tasks.dt BETWEEN ' + qs(':dt1') + ' AND ' + qs(':dt2') + ')'; + 'WHERE (tasks.dt BETWEEN :dt1 AND :dt2)'; + sqlGroup:string=' GROUP BY tasks.id'; + sqlOrder:string=' ORDER BY clients.name ASC'; + +var + frReportClientR: TfrReportClientR; + i:integer; + ColumnToSort: Integer; + sort:TSortState=ssNone; + +implementation + +{$R *.dfm} + +procedure TfrReportClientR.createSqlReport; +var slUserIds:TStringList; +begin +if(idDep='-1') then +begin + q.SQL.Text:=sqlReport+sqlGroup+sqlOrder; + q.ParamByName('dt1').Value:=toMySqlDate(dt1); + q.ParamByName('dt2').Value:=toMySqlDate(dt2); +end else + begin + slUserIds:=TStringList.Create; + q.SQL.Text:='select users.id, users.id_dep from users where users.id_dep='+idDep; + q.Open; + if(q.RecordCount=0) then + begin + ShowMessage('Íå íàéäåíî íè îäíîãî ïîëüçîâàòåëÿ â ýòîì ïîäðàçäåëåíèè'); + q.Close; + slUserIds.Free; + exit; + end; + + for I := 0 to q.RecordCount-1 do + begin + slUserIds.Add(q.FieldByName('id').AsString); + q.Next; + end; + q.Close; + slUserIds.Delimiter:=','; + //showmessage(slUserIds.DelimitedText); + q.SQL.Text:=sqlReport+chr(13)+ + 'AND (tasks.user_id in('+slUserIds.DelimitedText+'))' + +sqlGroup+sqlOrder; + q.ParamByName('dt1').Value:=toMySqlDate(dt1); + q.ParamByName('dt2').Value:=toMySqlDate(dt2); + slUserIds.Free; + end; +end; + +procedure TfrReportClientR.FormShow(Sender: TObject); +var tm, currWork, nextWork, allTime:integer; + client:string; + + +function addItem(name:string; tm:integer):TListItem; +var item:TListItem; +begin + item:=lv.Items.Add; + item.Caption:=name; + item.SubItems.Add(inttostr(tm)); + item.SubItems.Add(FormatFloat('#0.##', tm/60)); + item.SubItems.Add(minToHour(tm)); + Result:=item; +end; + +begin +Caption:='Îò÷åò '+nameDep; + +createSqlReport; +//ShowMessage(q.SQL.Text); +q.Open; +if(q.RecordCount=0) then exit; + +tm:=0; +allTime:=0; +currWork:=q.FieldByName('id_client').AsInteger; +client:=q.FieldByName('client').AsString; +for I := 0 to q.RecordCount-1 do +begin + nextWork:= q.FieldByName('id_client').AsInteger; + + if(currWork=nextWork) then + begin + tm:=tm+q.FieldByName('time_work').AsInteger; + if(i=q.RecordCount-1) then addItem(client, tm); + end else + begin + addItem(client, tm); + + tm:=q.FieldByName('time_work').AsInteger; + currWork:=q.FieldByName('id_client').AsInteger; + client:=q.FieldByName('client').AsString; + + if(i=q.RecordCount-1) then addItem(client, tm); + end; + +allTime:=allTime+q.FieldByName('time_work').AsInteger; +if(i=q.RecordCount-1) then addItem('Èòîãî:', allTime); +q.Next; +end; + +q.Close; +end; + + + +procedure TfrReportClientR.lvColumnClick(Sender: TObject; Column: TListColumn); +begin +ColumnToSort := Column.Index; +//if(ColumnToSort>0) then +if(sort=ssNone) then sort:=ssUp +else if(sort=ssUp) then sort:=ssDown +else if(sort=ssDown) then sort:=ssUp; + +(Sender as TCustomListView).AlphaSort; +end; + + +procedure TfrReportClientR.lvCompare(Sender: TObject; Item1, Item2: TListItem; + Data: Integer; var Compare: Integer); +var + ix: Integer; + f1, f2:real; +begin +case ColumnToSort of + 0:begin + if(sort=ssUp) then + Compare := CompareText(Item1.Caption, Item2.Caption) + else Compare := CompareText(Item2.Caption, Item1.Caption); + //showmessage(inttostr(Compare)); + end; + 1,2:begin + ix := ColumnToSort - 1; + f1:=strtofloat(Item1.SubItems[ix]); + f2:=strtofloat(Item2.SubItems[ix]); + if(sort=ssUp) then + Compare:=CompareDoubleInc(f1, f2) + else Compare:=CompareDoubleInc(f2, f1); + end; + 3:begin + ix := ColumnToSort - 2; + f1:=strtofloat(Item1.SubItems[ix]); + f2:=strtofloat(Item2.SubItems[ix]); + if(sort=ssUp) then + Compare:=CompareDoubleInc(f1, f2) + else Compare:=CompareDoubleInc(f2, f1); + end; +end; +end; + +procedure TfrReportClientR.lvCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); +begin +if(Item.Caption='Èòîãî:') then +begin + Sender.Canvas.Font.Style:= Sender.Canvas.Font.Style + [fsBold]; + Sender.Canvas.Brush.Color:=cl3dLight; +end; +end; + +end. diff --git a/UfrSett.dfm b/UfrSett.dfm new file mode 100644 index 0000000..d9a6df3 --- /dev/null +++ b/UfrSett.dfm @@ -0,0 +1,163 @@ +object frSett: TfrSett + Left = 0 + Top = 0 + BorderStyle = bsToolWindow + Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080 + ClientHeight = 259 + ClientWidth = 362 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + OnClose = FormClose + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 16 + object sButton1: TsButton + Left = 284 + Top = 231 + Width = 75 + Height = 25 + Caption = 'OK' + Default = True + TabOrder = 0 + OnClick = sButton1Click + SkinData.SkinSection = 'BUTTON' + end + object PageControl1: TPageControl + AlignWithMargins = True + Left = 3 + Top = 3 + Width = 356 + Height = 222 + ActivePage = TabSheet1 + Align = alTop + TabOrder = 1 + object TabSheet1: TTabSheet + Caption = #1041#1044 + object sGroupBox1: TsGroupBox + Left = 3 + Top = 6 + Width = 341 + Height = 182 + Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080' '#1087#1086#1076#1082#1083#1102#1095#1077#1085#1080#1103 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + TabOrder = 0 + SkinData.SkinSection = 'GROUPBOX' + object Label4: TLabel + Left = 16 + Top = 121 + Width = 75 + Height = 16 + Caption = #1041#1072#1079#1072' '#1076#1072#1085#1085#1099#1093 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label1: TLabel + Left = 16 + Top = 25 + Width = 43 + Height = 16 + Caption = #1057#1077#1088#1074#1077#1088 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label2: TLabel + Left = 16 + Top = 57 + Width = 83 + Height = 16 + Caption = #1055#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1100 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label3: TLabel + Left = 16 + Top = 89 + Width = 43 + Height = 16 + Caption = #1055#1072#1088#1086#1083#1100 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label6: TLabel + Left = 16 + Top = 153 + Width = 28 + Height = 16 + Caption = #1055#1086#1088#1090 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object edHost: TEdit + Left = 105 + Top = 25 + Width = 221 + Height = 24 + TabOrder = 0 + end + object edUser: TEdit + Left = 105 + Top = 55 + Width = 221 + Height = 24 + TabOrder = 1 + end + object edDatabase: TEdit + Left = 105 + Top = 120 + Width = 221 + Height = 24 + TabOrder = 2 + end + object edPassword: TEdit + Left = 105 + Top = 87 + Width = 221 + Height = 24 + PasswordChar = '*' + TabOrder = 3 + end + object edPort: TEdit + Left = 105 + Top = 150 + Width = 221 + Height = 24 + NumbersOnly = True + TabOrder = 4 + end + end + end + end +end diff --git a/UfrSett.pas b/UfrSett.pas new file mode 100644 index 0000000..ff26e98 --- /dev/null +++ b/UfrSett.pas @@ -0,0 +1,116 @@ +unit UfrSett; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DataUnit, Vcl.StdCtrls, sButton, + sGroupBox, Vcl.ComCtrls, IniFiles; + +const + settFolder:string='clientscrm'; + dbName:string='clientscrm'; + +type + TfrSett = class(TForm) + sButton1: TsButton; + PageControl1: TPageControl; + TabSheet1: TTabSheet; + sGroupBox1: TsGroupBox; + Label4: TLabel; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label6: TLabel; + edHost: TEdit; + edUser: TEdit; + edDatabase: TEdit; + edPassword: TEdit; + edPort: TEdit; + procedure FormShow(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure sButton1Click(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormCreate(Sender: TObject); + private + { Private declarations } + function IsAll:boolean; + public + { Public declarations } + end; + +var + frSett: TfrSett; + clb:boolean=false; + ini:TIniFile; + +implementation + +{$R *.dfm} + +Uses MainUnit; + + +function TfrSett.IsAll:boolean; +begin + if(edhost.Text='')or(edUser.Text='')or(edPassword.Text='')or + (edDatabase.Text='')or(edPort.Text='') + then result:=false else result:=true; +end; + +procedure TfrSett.sButton1Click(Sender: TObject); +begin +if not isall then begin + showmessage('Çàïîëíèåò âñå ïîëÿ!'); + exit; +end; +clb:=true; +ini.WriteString('connection', 'host', edhost.Text); +ini.WriteString('connection', 'user', edUser.Text ); +ini.WriteString('connection', 'password', edPassword.Text); +ini.WriteString('connection', 'db', edDatabase.Text); +ini.WriteString('connection', 'port', edPort.Text); +ini.WriteInteger('connection', 'ok', 1); //çíà÷èò íàñòðîéêè ñîõðàíèëè + + +ini.WriteInteger('connection', 'ok', 1); //çíà÷èò íàñòðîéêè ñîõðàíèëè +close; +showmessage('Èçìåíåíèÿ âñòóïÿò â ñèëó ïîñëå ïåðåçàïóñêà ïðîãðàììû'); +end; + +procedure TfrSett.FormClose(Sender: TObject; var Action: TCloseAction); +begin +ini.Free; +Action:=caFree; +end; + +procedure TfrSett.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin +if clb=true then exit; + +if not isall then begin + showmessage('Çàïîëíèåò âñå ïîëÿ!'); + canclose:=false; +end else sbutton1.Click; +end; + +procedure TfrSett.FormCreate(Sender: TObject); +var fn:string; +begin +fn:=getmys+settFolder+'\'; +createdir(fn); +ini:=TIniFile.Create(fn+'sett.ini'); +end; + +procedure TfrSett.FormShow(Sender: TObject); +begin +clb:=false; + edhost.Text := ini.ReadString('connection', 'host', 'localhost'); + edUser.Text := ini.ReadString('connection', 'user', 'root'); + edPassword.Text := ini.ReadString('connection', 'password', 'root'); + edDatabase.Text := ini.ReadString('connection', 'db', dbName); + edPort.Text := ini.ReadString('connection', 'port', '3306'); +end; + +end. + diff --git a/UserModel.pas b/UserModel.pas new file mode 100644 index 0000000..b336f64 --- /dev/null +++ b/UserModel.pas @@ -0,0 +1,138 @@ +unit UserModel; + +interface + +Uses + TypInfo, Generics.Collections, System.Classes; + +type + TUserRole = (urAdmin, urUser); + +type + TUser = class(TObject) + private + FId:Integer; + FLogin:String; + FUserName:String; + FPassword:String; + FRole:TUserRole; + + FDepartment:string; + FIdDepartment:integer; + + FRoleNames: TDictionary<TUserRole, String>; + + procedure initRoleNames; + + public + constructor Create; overload; + constructor Create(Login, Password:String); overload; + constructor Create(id: integer; Login, Password, UserName:String; Role:TUserRole); overload; + constructor Create(id: integer; Login, Password, UserName, roleName:String); overload; + + destructor Destroy; override; + + property id:Integer read FId write FId; + property Login:String read FLogin write FLogin; + property Password:String read FPassword write FPassword; + property UserName:String read FUserName write FUserName; + property Role:TUserRole read FRole write FRole; + property Department:string read FDepartment write FDepartment; + property IdDepartment:integer read FIdDepartment write FIdDepartment; + + function roleToString(role: TUserRole):string; + function getRoleName(role:TUserRole):string; + function getAllRoleNames:TStringList; + procedure setRoleFromString(role:String); + + end; + +implementation + +constructor TUser.Create; +begin + inherited; + initRoleNames; +end; + +constructor TUser.Create(Login: string; Password: string); +begin +inherited Create; +//initRoleNames; +self.FLogin:=login; +Self.FPassword:=Password; +end; + +constructor TUser.Create(id: integer; Login: string; Password: string; UserName: string; Role: TUserRole); +begin +inherited Create; +//initRoleNames; +self.FLogin:=login; +Self.FPassword:=Password; +Self.FUserName:=UserName; +Self.FRole:=Role; +Self.FId:=id; +end; + +constructor TUser.Create(id: Integer; Login: string; Password: string; UserName: string; roleName: string); +begin +//initRoleNames; +self.FLogin:=login; +Self.FPassword:=Password; +Self.FUserName:=UserName; +Self.setRoleFromString(roleName); +Self.FId:=id; +end; + +destructor TUser.Destroy; +begin + inherited; + FRoleNames.Free; +end; + +procedure TUser.initRoleNames; +begin +FRoleNames:= TDictionary<TUserRole, String>.Create; +FRoleNames.Add(urAdmin, 'Àäìèíèñòðàòîð'); +FRoleNames.Add(urUser, 'Ïîëüçîâàòåëü'); +end; + +function TUser.roleToString(role: TUserRole):string;//Äëÿ ñîõðàíåíèÿ â ÁÄ +var i:TUserRole; + s, amp:string; +begin +{s:=''; +amp:=''; + for i := Low(FRoles) to High(FRoles) do begin + if(i=High(FRoles)) then amp:='' else amp:=', '; + s:=s+GetEnumName(TypeInfo(TUserRole), ord(i))+amp; + end; } + +Result:=GetEnumName(TypeInfo(TUserRole), ord(role)); +end; + +procedure TUser.setRoleFromString(role: string);//Äëÿ çàãðóçêè èç ÁÄ +begin + self.FRole:=TUserrole(GetEnumValue(TypeInfo(TUserrole), role)); +end; + + +function TUser.getRoleName(role: TUserRole):string;//Äëÿ îòîáðàæåíèÿ èìåí ðîëåé ïîëüçîâàòåëþ +begin + Result:=FRoleNames.ExtractPair(role).Value; +end; + + +function TUser.getAllRoleNames:TStringList; +var i:TUserRole; +sl:TstringList; +begin + sl:=TStringList.Create; + for i := Low(TUserRole) to High(TUserRole) do begin + sl.Add(getRoleName(i)); + end; +Result:=sl; +end; + +end. + diff --git a/UtilsUnit.pas b/UtilsUnit.pas new file mode 100644 index 0000000..6a4635a --- /dev/null +++ b/UtilsUnit.pas @@ -0,0 +1,179 @@ +unit UtilsUnit; + +interface + +Uses + System.Classes, System.SysUtils; + + function qs(s:string):string; + function toMySqlDate(dt:TDate):string; + function minToHour(min:integer):string; + function CompareDoubleInc(Item1, Item2: Double): Integer; + //function toMySqlDate(dt:string):string; +type + TSortState =(ssUp, ssDown, ssNone); + +type + TLockupPair = class(TObject) + private + fid:integer; + fvalue:string; + public + constructor Create(id:integer; value:string); + destructor Destroy; override; + + property id:integer read fid write fid; + property value:string read fvalue write fvalue; + end; + +type + TLockupValue = class(TObject) + private + fslValues, fslIds:TStringList; + + public + constructor Create; overload; + + destructor Destroy; override; + + property slValues:TStringList read fslValues write fslValues; + property slIds:TStringList read fslIds write fslIds; + + function getIdFromValue(value:string):string; + function getIdFromPosValue(position:integer):string; + function getValueFromId(id:integer):string; + function getPositionFromId(id:integer):integer; + function getPair(index:integer):TLockupPair; + function count:integer; + procedure addPair(id:integer; value:string); overload; + procedure addPair(id:string; value:string); overload; + procedure addPair(pair:TLockupPair); overload; + procedure Assign(obj:TLockupValue); + end; + + +implementation + +function CompareDoubleInc(Item1, Item2: Double): Integer; +begin + if Item1=Item2 then begin + Result := 0; + end else if Item1<Item2 then begin + Result := -1 + end else begin + Result := 1; + end; +end; + +function toMySqlDate(dt:TDate):string; +var s:string; +begin + s:=datetostr(dt); + Result:=copy(s,7,4)+'-'+copy(s, 4,2)+'-'+copy(s, 1,2); +end; + +function qs(s:string):string; +begin + Result:=chr(39)+s+chr(39); +end; + +function minToHour(min:integer):string; +var h, m:integer; +begin + h:= min div 60; + m:=min-h*60; + Result:=Format('%.2d:%.2d', [h, m]); +end; + +procedure TLockupValue.addPair(id: integer; value: string); +begin + fslValues.Add(value); + fslIds.Add(inttostr(id)); +end; + +procedure TLockupValue.addPair(id, value: string); +begin + fslValues.Add(value); + fslIds.Add(id); +end; + +procedure TLockupValue.addPair(pair: TLockupPair); +begin +addPair(pair.id, pair.value); +end; + +procedure TLockupValue.Assign(obj: TLockupValue); +var i:integer; +begin +//Self:=TLockupValue.Create; +for I := 0 to obj.count-1 do + self.addPair(obj.getPair(i)); +end; + +function TLockupValue.count: integer; +begin +Result:=slIds.Count; +end; + +constructor TLockupValue.Create; +begin + inherited; + fslValues:=TStringList.Create; + fslIds:=TStringList.Create; +end; + +destructor TLockupValue.Destroy; +begin + inherited; + fslValues.Free; + fslIds.Free; +end; + +function TLockupValue.getIdFromPosValue(position: integer): string; +begin +if(position>=slIds.Count) then result:='' +else Result:=slIds.Strings[position]; +end; + +function TLockupValue.getIdFromValue(value: string): string; +var ind:integer; +begin + ind:=slValues.IndexOf(value); + if(ind=-1) then Result:='' + else Result:=slIds.Strings[ind]; +end; + + +function TLockupValue.getPair(index: integer): TLockupPair; +begin +Result:=TLockupPair.Create(strtoint(slIds.Strings[index]), slValues.Strings[index]); +end; + +function TLockupValue.getPositionFromId(id: integer): integer; +begin + Result:=slIds.IndexOf(inttostr(id)); +end; + +function TLockupValue.getValueFromId(id: integer): string; +var ind:integer; +begin + ind:=slIds.IndexOf(inttostr(id)); + if(ind=-1) then Result:='' + else Result:=slValues.Strings[ind]; +end; + +{ TLockupPair } + +constructor TLockupPair.Create(id: integer; value: string); +begin +fid:=id; +fvalue:=value; +end; + +destructor TLockupPair.Destroy; +begin + + inherited; +end; + +end.