Patch level : 12.0 nopatch

Files correlati     :
Commento        :

Implementazioone invio regolarizzazioni al 07/11/2021
This commit is contained in:
Alessandro Bonazzi 2021-11-08 02:03:21 +01:00
parent 855fd20481
commit e69c5ff43c
208 changed files with 4770 additions and 2658 deletions

View File

@ -41,9 +41,9 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
</PropertyGroup> </PropertyGroup>
@ -216,6 +216,7 @@
<ClInclude Include="..\src\include\regexp.h" /> <ClInclude Include="..\src\include\regexp.h" />
<ClInclude Include="..\src\include\relapp.h" /> <ClInclude Include="..\src\include\relapp.h" />
<ClInclude Include="..\src\include\relation.h" /> <ClInclude Include="..\src\include\relation.h" />
<ClInclude Include="..\src\include\repapp.h" />
<ClInclude Include="..\src\include\report.h" /> <ClInclude Include="..\src\include\report.h" />
<ClInclude Include="..\src\include\reprint.h" /> <ClInclude Include="..\src\include\reprint.h" />
<ClInclude Include="..\src\include\reputils.h" /> <ClInclude Include="..\src\include\reputils.h" />
@ -566,6 +567,7 @@
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile> </ClCompile>
<ClCompile Include="..\src\include\repapp.cpp" />
<ClCompile Include="..\src\include\report.cpp"> <ClCompile Include="..\src\include\report.cpp">
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>

View File

@ -526,6 +526,9 @@
<ClInclude Include="..\src\include\transaction.h"> <ClInclude Include="..\src\include\transaction.h">
<Filter>Headers</Filter> <Filter>Headers</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\src\include\repapp.h">
<Filter>Headers</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\src\include\about.cpp"> <ClCompile Include="..\src\include\about.cpp">
@ -780,6 +783,9 @@
<ClCompile Include="..\src\include\transaction.cpp"> <ClCompile Include="..\src\include\transaction.cpp">
<Filter>Sources</Filter> <Filter>Sources</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\src\include\repapp.cpp">
<Filter>Sources</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Library Include="..\libraries\SQLite3\LibX86\sqlite3.lib"> <Library Include="..\libraries\SQLite3\LibX86\sqlite3.lib">

View File

@ -40,14 +40,14 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</EmbedManifest> <EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</EmbedManifest>
<EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</EmbedManifest> <EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</EmbedManifest>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>

Binary file not shown.

View File

@ -40,9 +40,9 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
</PropertyGroup> </PropertyGroup>

View File

@ -48,11 +48,11 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
</PropertyGroup> </PropertyGroup>

View File

@ -43,11 +43,11 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
</PropertyGroup> </PropertyGroup>

View File

@ -74,14 +74,4 @@
<Filter>Headers</Filter> <Filter>Headers</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup>
<TrrCompiler Include="..\src\include\f182.trr">
<Filter>Trr</Filter>
</TrrCompiler>
</ItemGroup>
<ItemGroup>
<DirCompiler Include="..\src\include\f182.dir">
<Filter>Dir</Filter>
</DirCompiler>
</ItemGroup>
</Project> </Project>

View File

@ -44,11 +44,11 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
</PropertyGroup> </PropertyGroup>

View File

@ -51,6 +51,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cglib", "cglib.vcxproj", "{
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vedocext", "vedocext.vcxproj", "{0042619A-6B7C-4D3D-9CD9-9BDD8D200C15}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vedocext", "vedocext.vcxproj", "{0042619A-6B7C-4D3D-9CD9-9BDD8D200C15}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lilib", "lilib.vcxproj", "{B61F0AD4-0CCE-4371-8E92-85A26CAF1A7C}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32 Debug|Win32 = Debug|Win32
@ -105,6 +107,10 @@ Global
{0042619A-6B7C-4D3D-9CD9-9BDD8D200C15}.Debug|Win32.Build.0 = Debug|Win32 {0042619A-6B7C-4D3D-9CD9-9BDD8D200C15}.Debug|Win32.Build.0 = Debug|Win32
{0042619A-6B7C-4D3D-9CD9-9BDD8D200C15}.Release|Win32.ActiveCfg = Release|Win32 {0042619A-6B7C-4D3D-9CD9-9BDD8D200C15}.Release|Win32.ActiveCfg = Release|Win32
{0042619A-6B7C-4D3D-9CD9-9BDD8D200C15}.Release|Win32.Build.0 = Release|Win32 {0042619A-6B7C-4D3D-9CD9-9BDD8D200C15}.Release|Win32.Build.0 = Release|Win32
{B61F0AD4-0CCE-4371-8E92-85A26CAF1A7C}.Debug|Win32.ActiveCfg = Debug|Win32
{B61F0AD4-0CCE-4371-8E92-85A26CAF1A7C}.Debug|Win32.Build.0 = Debug|Win32
{B61F0AD4-0CCE-4371-8E92-85A26CAF1A7C}.Release|Win32.ActiveCfg = Release|Win32
{B61F0AD4-0CCE-4371-8E92-85A26CAF1A7C}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -42,9 +42,9 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>

Binary file not shown.

View File

@ -92,6 +92,7 @@
<DataExecutionPrevention> <DataExecutionPrevention>
</DataExecutionPrevention> </DataExecutionPrevention>
<TargetMachine>MachineX86</TargetMachine> <TargetMachine>MachineX86</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link> </Link>
<Bscmake> <Bscmake>
<SuppressStartupBanner>true</SuppressStartupBanner> <SuppressStartupBanner>true</SuppressStartupBanner>

View File

@ -92,6 +92,7 @@
<DataExecutionPrevention> <DataExecutionPrevention>
</DataExecutionPrevention> </DataExecutionPrevention>
<TargetMachine>MachineX86</TargetMachine> <TargetMachine>MachineX86</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link> </Link>
<Bscmake> <Bscmake>
<SuppressStartupBanner>true</SuppressStartupBanner> <SuppressStartupBanner>true</SuppressStartupBanner>

View File

@ -42,10 +42,10 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</EmbedManifest> <EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</EmbedManifest>

View File

@ -42,10 +42,10 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
<EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</EmbedManifest> <EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</EmbedManifest>
@ -158,7 +158,6 @@
<ItemGroup> <ItemGroup>
<ClInclude Include="..\src\li\lilib01.h" /> <ClInclude Include="..\src\li\lilib01.h" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
<Import Project="CampoRules.targets" /> <Import Project="CampoRules.targets" />

View File

@ -43,10 +43,10 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</EmbedManifest> <EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</EmbedManifest>

View File

@ -40,9 +40,9 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
</PropertyGroup> </PropertyGroup>

View File

@ -42,9 +42,9 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>

View File

@ -43,9 +43,9 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
</PropertyGroup> </PropertyGroup>

View File

@ -42,10 +42,10 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>

View File

@ -43,10 +43,10 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>

View File

@ -42,9 +42,9 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\lib\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
</PropertyGroup> </PropertyGroup>

View File

@ -44,10 +44,10 @@
<PropertyGroup> <PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\common\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)</TargetName>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest> <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>

Binary file not shown.

View File

@ -1512,6 +1512,18 @@ bool TMenu_application::dongle_update_needed() const
bool TMenu_application::user_create() bool TMenu_application::user_create()
{ {
TFilename dir;
if (xvt_sys_get_env("TEMP", dir.get_buffer(), dir.size()))
if (!dexist(dir))
return error_box(FR("La cartella temporanea %s definita dalla variabile d'ambiente TEMP non esiste."), (const char *)dir);
if (xvt_sys_get_env("TMP", dir.get_buffer(), dir.size()))
if (!dexist(dir))
return error_box(FR("La cartella temporanea %s definita dalla variabile d'ambiente TMP non esiste."), (const char *)dir);
dir.cut(0);
dir.tempdir();
if (!dexist(dir))
return error_box(FR("La cartella temporanea %s definita in campo.ini non esiste."), (const char *)dir);
disable_menu_item(M_FILE_PRINT); // Questa voce di menu non serve per ora disable_menu_item(M_FILE_PRINT); // Questa voce di menu non serve per ora
disable_menu_item(M_FILE_PREVIEW); // Figuriamoci questa disable_menu_item(M_FILE_PREVIEW); // Figuriamoci questa

View File

@ -13,11 +13,9 @@
#include "ba1100.h" #include "ba1100.h"
#include "ba1103.h" #include "ba1103.h"
#include <applicat.h>
#include <dongle.h> #include <dongle.h>
#include <printer.h> #include <relapp.h>
#include <progind.h> #include <progind.h>
#include <reputils.h>
#include <utility.h> #include <utility.h>
#include <user.h> #include <user.h>
@ -35,59 +33,6 @@
#define Dir_file "dir.gen" #define Dir_file "dir.gen"
#define Trc_file "trc.gen" #define Trc_file "trc.gen"
class TManutenzione_app : public TSkeleton_application
{
TDir_sheet* _browse;
TArray _dirs;
TArray _recs;
TMask* _mask;
long _firm;
long _level;
long _history_firm;
TRec_sheet* _rec;
TLog_report* _log;
bool _print_log;
bool _superprassi;
protected:
virtual void main_loop();
virtual bool create () ;
virtual bool destroy();
void insert_riga(long, TToken_string&);
void edit_riga(long, TToken_string&);
void edit_riga(const TString&);
void delete_riga(long);
virtual bool extended_firm() const { return true; }
bool set_converting();
bool reset_converting();
bool try_to_recover(TSystemisamfile& f, int err);
void update();
void update_dir();
void convert_dir();
virtual void print();
virtual void do_print(TPrinter & p, TRec_sheet & r);
const char* dumpfilename(const FileDes& dep) const;
void load_des();
void open_history();
void put_history(const char* firm);
void close_history();
void dump_trc(const char * dir, const bool des_too, const long modules);
void repair_file(int i);
void save_file(const char * file);
void open_log();
void write_log(const char* line, const int severity = 0);
void close_log();
bool moveable_file(int file) const;
public:
TManutenzione_app();
};
HIDDEN bool browse_file_handler(TMask_field& f, KEY k) HIDDEN bool browse_file_handler(TMask_field& f, KEY k)
{ {
if (k == K_F9) if (k == K_F9)
@ -318,11 +263,11 @@ void TManutenzione_app::print()
bool TManutenzione_app::create() // initvar e arrmask bool TManutenzione_app::create() // initvar e arrmask
{ {
_firm = get_firm();
TString sw(argc()>2 ? argv(2) : ""); TString sw(argc()>2 ? argv(2) : "");
// Posso fare le operazione avanzate solo se sono ammistratore // Posso fare le operazione avanzate solo se sono ammistratore
// e NON mi trovo su di una installazione di tipo client // e NON mi trovo su di una installazione di tipo client
xvt_vobj_show(TASK_WIN);
_superprassi = user() == ::dongle().administrator() && !::dongle().demo(); _superprassi = user() == ::dongle().administrator() && !::dongle().demo();
if (_superprassi) if (_superprassi)
{ {
@ -361,6 +306,7 @@ bool TManutenzione_app::create() // initvar e arrmask
else else
if (!::dongle().demo() && !set_firm()) if (!::dongle().demo() && !set_firm())
return false; return false;
_firm = atol(prefix().name());
load_des(); load_des();
_mask = new TMask("ba1100a"); _mask = new TMask("ba1100a");
@ -384,6 +330,24 @@ bool TManutenzione_app::destroy()
return TApplication::destroy(); return TApplication::destroy();
} }
void TManutenzione_app::show_log()
{
if (db_log())
{
if (admin())
{
TLog_mask m;
m.run();
}
else
message_box(TR("Il log delle transazioni è visualizzabile dall'amministratore"));
}
else
message_box(TR("Il log delle transazioni è disattivato"));
}
void TManutenzione_app::open_log() void TManutenzione_app::open_log()
{ {
_print_log = false; _print_log = false;

View File

@ -1,6 +1,10 @@
#ifndef __BA1100_H #ifndef __BA1100_H
#define __BA1100_H #define __BA1100_H
#ifndef __APPLICAT_H
#include <applicat.h>
#endif
#ifndef __CONFIG_H #ifndef __CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
@ -17,6 +21,14 @@
class TMask_field; class TMask_field;
#endif #endif
#ifndef __PRINTER_H
#include <printer.h>
#endif
#ifndef __REPUTILS_H
#include <reputils.h>
#endif
#include "ba1100a.h" #include "ba1100a.h"
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -92,4 +104,62 @@ public:
virtual ~TEdit_file() {} virtual ~TEdit_file() {}
}; };
class TManutenzione_app : public TSkeleton_application
{
TDir_sheet* _browse;
TArray _dirs;
TArray _recs;
TMask* _mask;
long _firm;
long _level;
long _history_firm;
TRec_sheet* _rec;
TLog_report* _log;
bool _print_log;
bool _superprassi;
protected:
virtual void main_loop();
virtual bool create();
virtual bool destroy();
void insert_riga(long, TToken_string&);
void edit_riga(long, TToken_string&);
void edit_riga(const TString&);
void delete_riga(long);
virtual bool extended_firm() const { return true; }
bool set_converting();
bool reset_converting();
bool try_to_recover(TSystemisamfile& f, int err);
void update();
void update_dir();
void convert_dir();
virtual void print();
virtual void do_print(TPrinter & p, TRec_sheet & r);
const char* dumpfilename(const FileDes& dep) const;
void load_des();
void open_history();
void put_history(const char* firm);
void close_history();
void dump_trc(const char * dir, const bool des_too, const long modules);
void repair_file(int i);
void save_file(const char * file);
virtual void show_log();
void open_log();
void write_log(const char* line, const int severity = 0);
void close_log();
bool moveable_file(int file) const;
public:
long get_firm() const { return _firm; }
TManutenzione_app();
};
inline TManutenzione_app & app() { return (TManutenzione_app &)main_app(); }
#endif #endif

View File

@ -275,9 +275,17 @@ void TRec_sheet::edit()
} }
f2.set_notify(key_notify); f2.set_notify(key_notify);
f2.set_append(FALSE); f2.set_append(FALSE);
int nkeys = _rec.keys(); int nkeys = _rec.keys();
for (i = 0; i < nkeys; i++) f2.row(i) = _rec.keydef(i);
for (i = 0; i < nkeys; i++)
f2.row(i) = _rec.keydef(i);
f2.disable_cell(0, 1); f2.disable_cell(0, 1);
const bool enable_save = (_dir.is_com() && app().get_firm() == 0) ||
(_dir.is_firm() && app().get_firm() > 0);
_mask->enable(DLG_SAVEREC, enable_save);
while (true) while (true)
{ {
f1.force_update(0); // Non togliere, serve per fare l'update della descrizione quando si fa l'import!! f1.force_update(0); // Non togliere, serve per fare l'update della descrizione quando si fa l'import!!

View File

@ -136,7 +136,7 @@ protected:
bool dir_gen() const; bool dir_gen() const;
bool trc_gen() const; bool trc_gen() const;
bool export_manager(const TString generalErrors) const; bool export_manager(const TString generalErrors) const;
bool show_log(); bool show_export_log();
void log(int severity, const char* msg); void log(int severity, const char* msg);
public: public:
@ -980,7 +980,7 @@ bool TMSSQLExport_app::export_manager(TString generalErrors) const
return true; return true;
} }
bool TMSSQLExport_app::show_log() bool TMSSQLExport_app::show_export_log()
{ {
if (_log) if (_log)
{ {
@ -1089,7 +1089,7 @@ void TMSSQLExport_app::main_loop()
} }
message_box("Migrazione effettuata correttamente!"); message_box("Migrazione effettuata correttamente!");
} while (loop); } while (loop);
show_log(); show_export_log();
} }
else else
message_box("Fallita connessione"); message_box("Fallita connessione");

View File

@ -1742,6 +1742,7 @@ class TMailer : public TSkeleton_application
bool _start_full_screen; bool _start_full_screen;
protected: protected:
virtual bool task_win_iconized() const { return !_start_full_screen && xvt_win_is_taskbar_visible(); }
virtual bool create(); virtual bool create();
virtual void main_loop(); virtual void main_loop();
}; };
@ -1767,7 +1768,7 @@ void TMailer::main_loop()
WINDOW tray = xvt_trayicon_create(TASK_WIN, 9013, appname); // CampoServer.ico WINDOW tray = xvt_trayicon_create(TASK_WIN, 9013, appname); // CampoServer.ico
open_files(LF_USER, 0); open_files(LF_USER, 0);
if (!_start_full_screen && xvt_win_is_taskbar_visible()) /* if (!_start_full_screen && xvt_win_is_taskbar_visible())
{ {
if (tray != NULL_WIN) if (tray != NULL_WIN)
{ {
@ -1778,7 +1779,7 @@ void TMailer::main_loop()
if (xvt_rect_get_width(&rct_postman) >= xvt_rect_get_width(&rct_screen) - 64) if (xvt_rect_get_width(&rct_postman) >= xvt_rect_get_width(&rct_screen) - 64)
xvt_vobj_set_visible(TASK_WIN, FALSE); xvt_vobj_set_visible(TASK_WIN, FALSE);
} }
} } */
TMailer_mask mm; TMailer_mask mm;

View File

@ -46,7 +46,7 @@ BEGIN
WARNING "Manca la descrizione" WARNING "Manca la descrizione"
END END
LIST LST_TABIVA_S1 2 20 LIST LST_TABIVA_S1 2 28
BEGIN BEGIN
PROMPT 2 2 "Tipo " PROMPT 2 2 "Tipo "
FIELD S1 FIELD S1
@ -70,11 +70,15 @@ BEGIN
MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0 MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0
MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4|SHOW,CHK_TABIVA_B5 MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4|SHOW,CHK_TABIVA_B5
MESSAGE ENABLE,FLD_TABIVA_S6 MESSAGE ENABLE,FLD_TABIVA_S6
ITEM "RC|Reverse Charge (vendite)"
MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0
MESSAGE CLEAR,FLD_TABIVA_I3|CLEAR,FLD_TABIVA_I4|HIDE,CHK_TABIVA_B5
MESSAGE ENABLE,FLD_TABIVA_S6
END END
STRING FLD_TABIVA_S6 4 STRING FLD_TABIVA_S6 4
BEGIN BEGIN
PROMPT 39 2 "C.IVA a cui ventilare " PROMPT 44 2 "C.IVA a cui ventilare "
FLAGS "U" FLAGS "U"
FIELD S6 FIELD S6
COPY USE FLD_TABIVA_CODTAB COPY USE FLD_TABIVA_CODTAB
@ -188,6 +192,8 @@ BEGIN
INPUT FLD_TABIVA_I3 INPUT FLD_TABIVA_I3
OUTPUT FLD_TABIVA_I3 OUTPUT FLD_TABIVA_I3
ITEM " |Nessuno" ITEM " |Nessuno"
ITEM "14|Passaggi interni"
ITEM "16|Cessioni beni ammortizzabili"
ITEM "20|Operazioni non imponibili (comma 1, artt.8, 8bis e 9)" ITEM "20|Operazioni non imponibili (comma 1, artt.8, 8bis e 9)"
ITEM "21|Operazioni non imponibili a seguito di dich. d'intento" ITEM "21|Operazioni non imponibili a seguito di dich. d'intento"
ITEM "22|Altre operazioni non imponibili" ITEM "22|Altre operazioni non imponibili"
@ -201,6 +207,7 @@ BEGIN
ITEM "36|Cessione di microprocessori" ITEM "36|Cessione di microprocessori"
ITEM "37|Prestazioni comparto edile e settori connessi" ITEM "37|Prestazioni comparto edile e settori connessi"
ITEM "38|Operazioni settore energetico" ITEM "38|Operazioni settore energetico"
ITEM "39|Reverse charge altri casi"
ITEM "B1|Ammontare op. es. escluse da nr. 1 a 9 e 11 art. 10" ITEM "B1|Ammontare op. es. escluse da nr. 1 a 9 e 11 art. 10"
ITEM "B2|Ammontare op. es. di cui al nr. 11 art. 10" ITEM "B2|Ammontare op. es. di cui al nr. 11 art. 10"
ITEM "B3|Ammontare op. es. di cui ai nr. 1 a 9 art. 10" ITEM "B3|Ammontare op. es. di cui ai nr. 1 a 9 art. 10"

View File

@ -1025,7 +1025,7 @@ bool TMovanal_msk::row2imp(int r, TImporto& imp) const
return !imp.is_zero(); return !imp.is_zero();
} }
const TToken_string& TMovanal_msk::rec2key(const TRectype& rec) const const TToken_string& TMovanal_msk::rec2key(const TRectype& rec) const //qui
{ {
TToken_string& key = get_tmp_string(); TToken_string& key = get_tmp_string();
key = get(F_TIPO); key = get(F_TIPO);
@ -1127,7 +1127,6 @@ void TMovanal_msk::aggiorna_saldo_riga(int r)
sld += TImporto('D', dare); sld += TImporto('D', dare);
} }
} }
sld.normalize(); sld.normalize();
set(F_DARE, sld.sezione() == 'D' ? sld.valore() : ZERO); set(F_DARE, sld.sezione() == 'D' ? sld.valore() : ZERO);
set(F_AVERE, sld.sezione() == 'A' ? sld.valore() : ZERO); set(F_AVERE, sld.sezione() == 'A' ? sld.valore() : ZERO);

View File

@ -50,11 +50,8 @@ bool TRic_saldi_msk::on_field_event(TOperable_field& o, TField_event e, long jol
const long recset_items = recset.items(); const long recset_items = recset.items();
TProgind pi(recset_items, "Ricerca movimenti che interessano l'esercizio selezionato...", true, true); TProgind pi(recset_items, "Ricerca movimenti che interessano l'esercizio selezionato...", true, true);
for (bool ok = recset.move_first(); ok; ok = recset.move_next()) for (bool ok = recset.move_first(); pi.addstatus(1) && ok; ok = recset.move_next())
{ {
if (!pi.addstatus(1))
break;
const TDate curr_date = recset.get(MOVANA_DATACOMP).as_date(); const TDate curr_date = recset.get(MOVANA_DATACOMP).as_date();
const TDate fcomp_date = recset.get(MOVANA_DATAFCOMP).as_date(); const TDate fcomp_date = recset.get(MOVANA_DATAFCOMP).as_date();

View File

@ -2,6 +2,7 @@
#include <defmask.h> #include <defmask.h>
#include <execp.h> #include <execp.h>
#include <progind.h> #include <progind.h>
#include <repapp.h>
#include <reprint.h> #include <reprint.h>
#include "../cg/cglib.h" #include "../cg/cglib.h"
@ -24,89 +25,16 @@ class TPrint_mastrini_ca_mask : public TAnal_report_mask
{ {
protected: protected:
bool on_field_event(TOperable_field& o, TField_event e, long jolly); bool on_field_event(TOperable_field& o, TField_event e, long jolly);
const TString& get_report_class() const;
bool test_compatible_report();
public: public:
TPrint_mastrini_ca_mask(); TPrint_mastrini_ca_mask();
virtual ~TPrint_mastrini_ca_mask() {} virtual ~TPrint_mastrini_ca_mask() {}
}; };
const TString& TPrint_mastrini_ca_mask::get_report_class() const
{
TString& classe = get_tmp_string();
classe = "ca3200a";
// const int stp = get_int(F_TIPOCONTI);
// classe << (stp == 1 ? 'a' : 'b'); // tipo di report da usare in caso di report multipli
return classe;
}
bool TPrint_mastrini_ca_mask::test_compatible_report()
{
TFilename lib = get_report_class();
const TString& name = get(F_REPORT);
bool ok = name.not_empty();
if (ok)
{
TReport rep;
ok = rep.load(name);
if (ok)
{
const TString& classe = rep.get_class();
ok = classe == lib;
}
}
if (!ok)
{
set(F_REPORT, lib);
lib.ext("rep");
ok = lib.custom_path();
}
return ok;
}
bool TPrint_mastrini_ca_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TPrint_mastrini_ca_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
switch (o.dlg()) switch (o.dlg())
{ {
case DLG_PRINT:
if (e == fe_button)
{
main_app().print();
return false;
}
break;
case DLG_PREVIEW:
if (e == fe_button)
{
main_app().preview();
return false;
}
break;
case F_TIPOCONTI:
if (e == fe_init || e == fe_modify)
{
test_compatible_report(); //in base al tipo di conti da stampare setta i report compatibili (solo nel caso di rep multipli)
}
break;
case F_REPORT:
if (e == fe_button)
{
const TString8 lib = get_report_class();
TFilename path = o.get();
if (select_custom_file(path, "rep", lib))
{
path = path.name();
path.ext("");
o.set(path);
}
} else
if (e == fe_close)
{
if (!test_compatible_report())
return error_box(TR("Impossibile trovare un report compatibile"));
}
break;
case F_ANNO: case F_ANNO:
if (e == fe_modify && !o.empty()) if (e == fe_modify && !o.empty())
{ {
@ -180,7 +108,7 @@ protected:
int _tipimov; int _tipimov;
TDate _dadata, _adata; TDate _dadata, _adata;
long _danumreg, _anumreg; long _danumreg, _anumreg;
TString _daconto, _aconto, _codcosto, _codcms, _codfas; TString _daconto, _aconto, _codcosto, _codcms, _codfas, _contsep;
protected: //da libreria protected: //da libreria
virtual const TVariant& get(const char* column_name) const; virtual const TVariant& get(const char* column_name) const;
@ -288,7 +216,8 @@ void TPrint_mastrini_ca_recordset::set_custom_filter(TCursor& cur) const
const TImporto& TPrint_mastrini_ca_recordset::saldo_iniziale(const char* conto) const const TImporto& TPrint_mastrini_ca_recordset::saldo_iniziale(const char* conto) const
{ {
TAnal_bill bill(conto, _codcosto, _codcms, _codfas); TAnal_bill bill(conto, _codcosto, _codcms, _codfas);
const TSaldanal& saldo = ca_saldo(bill, _dadata, _adata, _tipimov); const TSaldanal& saldo = ca_saldo(bill, "", _dadata, _adata, _tipimov); // qui
return saldo._ini; return saldo._ini;
} }
@ -394,7 +323,8 @@ TPrint_mastrini_ca_alternative_recordset::TPrint_mastrini_ca_alternative_records
const TImporto& TPrint_mastrini_ca_alternative_recordset::saldo_finale(const char* conto) const const TImporto& TPrint_mastrini_ca_alternative_recordset::saldo_finale(const char* conto) const
{ {
TAnal_bill bill(conto, _codcosto, _codcms, _codfas); TAnal_bill bill(conto, _codcosto, _codcms, _codfas);
const TSaldanal& saldo = ca_saldo(bill, _dadata, _adata, _tipimov); const TSaldanal& saldo = ca_saldo(bill, "", _dadata, _adata, _tipimov); // qui
return saldo._fin; return saldo._fin;
} }
@ -470,7 +400,7 @@ void TPrint_mastrini_ca_alternative_recordset::set_filter(const TPrint_mastrini_
{ {
TPconana_recordset pconana; TPconana_recordset pconana;
pconana.set_filter(' ', _daconto, _aconto, _codcosto, _codcms, _codfas, pconana.set_filter(' ', _daconto, _aconto, _codcosto, _codcms, _codfas, _contsep,
_dadata, _adata, _tipimov, _tipoconti==1, _tipoconti==2); _dadata, _adata, _tipimov, _tipoconti==1, _tipoconti==2);
const long pconana_items = pconana.items(); const long pconana_items = pconana.items();
@ -485,20 +415,26 @@ void TPrint_mastrini_ca_alternative_recordset::set_filter(const TPrint_mastrini_
a_rmovana.put(RMOVANA_DATACOMP, _adata); a_rmovana.put(RMOVANA_DATACOMP, _adata);
TString filtro; TString filtro;
if (_codcosto.not_empty()) if (_codcosto.full())
filtro << "(" << RMOVANA_CODCCOSTO << "?=\"" << _codcosto << "*\")"; filtro << "(" << RMOVANA_CODCCOSTO << "?=\"" << _codcosto << "*\")";
if (_codcms.not_empty()) if (_codcms.full())
{ {
if (filtro.not_empty()) if (filtro.full())
filtro << "&&"; filtro << "&&";
filtro << "(" << RMOVANA_CODCMS << "?=\"" << _codcms << "*\")"; filtro << "(" << RMOVANA_CODCMS << "?=\"" << _codcms << "*\")";
} }
if (_codfas.not_empty()) if (_codfas.full())
{ {
if (filtro.not_empty()) if (filtro.full())
filtro << "&&"; filtro << "&&";
filtro << "(" << RMOVANA_CODFASE << "?=\"" << _codfas << "*\")"; filtro << "(" << RMOVANA_CODFASE << "?=\"" << _codfas << "*\")";
} }
if (_contsep.full())
{
if (filtro.full())
filtro << "&&";
filtro << "(" << MOVANA_CONTSEP << "?=\"" << _contsep << "*\")";
}
//scandisce il piano dei conti.. //scandisce il piano dei conti..
for (bool pok = pconana.move_first(); pok; pok = pconana.move_next()) for (bool pok = pconana.move_first(); pok; pok = pconana.move_next())
@ -594,47 +530,59 @@ void TPrint_mastrini_ca_rep::set_filter(const TPrint_mastrini_ca_mask& msk, int
//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
// APPLICAZIONE // APPLICAZIONE
//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
class TPrint_mastrini_ca : public TSkeleton_application class TPrint_mastrini_ca : public TReport_application
{ {
TPrint_mastrini_ca_mask* _mask; TPrint_mastrini_ca_mask* _mask;
TPrint_mastrini_ca_rep * _rep;
protected: protected:
virtual const char * extra_modules() const {return "cm";} //funziona anche con autorizzazione CM virtual const char * extra_modules() const {return "cm";} //funziona anche con autorizzazione CM
virtual TReport & get_report(const TAutomask & m);
//virtual TTrec * get_dbase_recdesc(TReport & rep);
virtual TAutomask & get_mask();
virtual void execute_print(TReport_book & book, TAutomask & mask, TReport & rep, export_type type = _export_printer);
virtual short output_id() const { return 0; }
virtual const char * output_name(const TReport & rep) const { return "listamov"; }
// @cmember Distruzione dei dati dell'utente
virtual bool user_destroy() { return true; }
void print_or_preview(const bool stampa); public:
virtual void print(); TPrint_mastrini_ca() : _mask(nullptr), _rep(nullptr) {}
virtual void preview(); ~TPrint_mastrini_ca() {}
virtual void main_loop();
}; };
void TPrint_mastrini_ca::print() TReport & TPrint_mastrini_ca::get_report(const TAutomask & m)
{ {
print_or_preview(true); if (_rep == nullptr)
} _rep = new TPrint_mastrini_ca_rep;
void TPrint_mastrini_ca::preview() TString path = _mask->get(DLG_REPORT);
{
print_or_preview(false);
}
void TPrint_mastrini_ca::print_or_preview(const bool stampa)
{
//report e book dei report
TReport_book book;
TString path = _mask->get(F_REPORT);
if (path.empty()) if (path.empty())
path = "ca3200a"; path = ((TPrint_mastrini_ca_mask *)_mask)->get_report_class();
TPrint_mastrini_ca_rep rep; _rep->load(_mask->get(DLG_REPORT));
rep.load(path); return *_rep;
}
TAutomask & TPrint_mastrini_ca::get_mask()
{
if (_mask == nullptr)
_mask = new TPrint_mastrini_ca_mask;
return *_mask;
}
void TPrint_mastrini_ca::execute_print(TReport_book & book, TAutomask & mask, TReport & rep, export_type type)
{
TSheet_field& sheet = _mask->sfield(F_RIGHE); TSheet_field& sheet = _mask->sfield(F_RIGHE);
TString video_string; //stringa che compare nella progind TString msg; //stringa che compare nella progind
if (sheet.empty()) //se non ci sono righe sullo sheet (selezione su tutte le cms/cdc)... if (sheet.empty()) //se non ci sono righe sullo sheet (selezione su tutte le cms/cdc)...
{ {
if (_mask->get_bool(F_PERCONTO)) if (_mask->get_bool(F_PERCONTO))
{ {
rep.set_filter(*_mask, -1); //fa la set filter sulla prima riga (che è quella usata) ((TPrint_mastrini_ca_rep &)rep).set_filter((TPrint_mastrini_ca_mask &)mask, -1);
book.add(rep); book.add(rep);
} }
else else
@ -681,27 +629,25 @@ void TPrint_mastrini_ca::print_or_preview(const bool stampa)
skip_closed = !yesno_box(TR("E' stata richiesta la stampa di tutte le commesse:\n" skip_closed = !yesno_box(TR("E' stata richiesta la stampa di tutte le commesse:\n"
"Si desidera includere anche le commesse chiuse?")); "Si desidera includere anche le commesse chiuse?"));
TProgind pi(set.items(), video_string, true, true); TProgress_monitor pi(set.items(), msg, true);
for (bool sok = set.move_first(); sok; sok = set.move_next()) //fighissimo metodo per scandire un file in 1 riga! for (bool sok = set.move_first(); pi.add_status() && sok; sok = set.move_next()) //fighissimo metodo per scandire un file in 1 riga!
{ {
if (!pi.addstatus(1))
break;
if (skip_closed && set.get(COMMESSE_CHIUSA).as_bool()) if (skip_closed && set.get(COMMESSE_CHIUSA).as_bool())
continue; continue;
row = set.get(0u).as_string(); //prende il valore del primo campo del file (CDC o CMS code) row = set.get_string(0u); //prende il valore del primo campo del file (CDC o CMS code)
if (!codici_buoni.is_key(row)) if (!codici_buoni.is_key(row))
continue; continue;
//completa la stringa da visualizzare sulla progind //completa la stringa da visualizzare sulla progind
video_string.cut(0) << row << '\n' << set.get(1u); msg = row;
pi.set_text(video_string); msg << '\n' << set.get(1u);
pi.set_text(msg);
for (int l = liv1.levels()-2; l >= 0; l--) //se la struttura è a più livelli costruisce la tokenstring for (int l = liv1.levels()-2; l >= 0; l--) //se la struttura è a più livelli costruisce la tokenstring
row.insert("|", liv1.total_len(l)); row.insert("|", liv1.total_len(l));
rep.set_filter(*_mask, 0); //fa la set filter sulla prima riga (che è quella usata) ((TPrint_mastrini_ca_rep &)rep).set_filter((TPrint_mastrini_ca_mask &)mask, 0); //fa la set filter sulla prima riga (che è quella usata)
book.add(rep); book.add(rep);
} }
sheet.destroy(); //cancella le commesse aggiunte in automatico sullo sheet sheet.destroy(); //cancella le commesse aggiunte in automatico sullo sheet
@ -711,25 +657,10 @@ void TPrint_mastrini_ca::print_or_preview(const bool stampa)
{ {
FOR_EACH_SHEET_ROW(sheet, r, row) FOR_EACH_SHEET_ROW(sheet, r, row)
{ {
rep.set_filter(*_mask, r); ((TPrint_mastrini_ca_rep &)rep).set_filter((TPrint_mastrini_ca_mask &) mask, r);
book.add(rep); book.add(rep);
} }
} }
if (stampa)
book.print(); //stampa il book dei report
else
book.preview(); //anteprima
}
void TPrint_mastrini_ca::main_loop()
{
_mask = new TPrint_mastrini_ca_mask;
_mask->run();
delete _mask;
_mask = NULL;
} }
int ca3200(int argc, char* argv[]) int ca3200(int argc, char* argv[])

View File

@ -1,6 +1,7 @@
#include <defmask.h> #include <defmask.h>
#include <execp.h> #include <execp.h>
#include <progind.h> #include <progind.h>
#include <repapp.h>
#include <reprint.h> #include <reprint.h>
#include <pconti.h> #include <pconti.h>
@ -26,53 +27,26 @@ class TPrint_bilancio_ca_mask : public TAnal_report_mask
{ {
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
const TString& get_report_class() const;
bool test_compatible_report();
bool esistono_riclassificazioni() const; bool esistono_riclassificazioni() const;
public: public:
const TString& get_report_class() const;
TPrint_bilancio_ca_mask(); TPrint_bilancio_ca_mask();
virtual ~TPrint_bilancio_ca_mask() {} virtual ~TPrint_bilancio_ca_mask() {}
}; };
const TString& TPrint_bilancio_ca_mask::get_report_class() const const TString& TPrint_bilancio_ca_mask::get_report_class() const
{ {
TString& lib = get_tmp_string(); TString& classe = get_tmp_string();
lib = "ca3300";
const char bil = get(F_BILANCIO)[0]; // Verifica o sezioni Contrapposte classe = TAnal_report_mask::get_report_class();
const char stp = get(F_TIPOSTAMPA)[0]; // Raffronto o No? classe.cut(5);
if (get(F_BILANCIO) == "V") // Verifica o sezioni Contrapposte
if (bil == 'V') classe << (get(F_TIPOSTAMPA) == "R" ? 'a' : 'b'); // Verifica - Raffronto o No
lib << (stp == 'R' ? 'a' : 'b'); // Verifica
else else
lib << (stp == 'R' ? 'c' : 'd'); // Sezioni contrapposte classe << (get(F_TIPOSTAMPA) == "R" ? 'c' : 'd'); // Sezioni contrapposte - Raffronto o No
return lib; return classe;
}
bool TPrint_bilancio_ca_mask::test_compatible_report()
{
const TString& cls = get_report_class();
const TString& name = get(F_REPORT);
bool ok = name.full();
if (ok && name != cls)
{
TReport rep;
ok = rep.load(name);
if (ok)
{
const TString& classe = rep.get_class();
ok = classe == cls;
}
}
if (!ok)
{
set(F_REPORT, cls);
TFilename path = cls;
path.ext("rep");
ok = path.custom_path();
}
return ok;
} }
bool TPrint_bilancio_ca_mask::esistono_riclassificazioni() const bool TPrint_bilancio_ca_mask::esistono_riclassificazioni() const
@ -85,28 +59,13 @@ bool TPrint_bilancio_ca_mask::on_field_event(TOperable_field& o, TField_event e,
{ {
switch (o.dlg()) switch (o.dlg())
{ {
case DLG_PRINT:
if (e == fe_button)
{
main_app().print();
return false;
}
break;
case DLG_PREVIEW:
if (e == fe_button)
{
main_app().preview();
return false;
}
break;
case F_ANNO: case F_ANNO:
case F_BILANCIO: case F_BILANCIO:
case F_STAMPA: case F_STAMPA:
case F_TIPOSTAMPA: case F_TIPOSTAMPA:
if (e == fe_modify || (e == fe_init && o.dlg() == F_ANNO)) if (e == fe_modify || (e == fe_init && o.dlg() == F_ANNO))
{ {
test_compatible_report(); set_report_class();
bool enable_from = false, enable_to = false; bool enable_from = false, enable_to = false;
if (get_int(F_STAMPA) == 1) // Stampa per data limite if (get_int(F_STAMPA) == 1) // Stampa per data limite
@ -153,24 +112,6 @@ bool TPrint_bilancio_ca_mask::on_field_event(TOperable_field& o, TField_event e,
} }
} }
break; break;
case F_REPORT:
if (e == fe_button)
{
const TString8 lib = get_report_class();
TFilename path = o.get();
if (select_custom_file(path, "rep", lib))
{
path = path.name();
path.ext("");
o.set(path);
}
} else
if (e == fe_close)
{
if (!test_compatible_report())
return error_box("Impossibile trovare un report compatibile");
}
break;
case F_PRE1: case F_PRE1:
case F_PRE2: case F_PRE2:
case F_PRE3: case F_PRE3:
@ -291,7 +232,7 @@ protected:
public: public:
void set_filter(const TMask& msk, int row); void set_filter(const TMask& msk, int row);
TReport_bilancio_verifica(const char* name); TReport_bilancio_verifica() { }
}; };
bool TReport_bilancio_verifica::set_recordset(const TString& /* sql */) bool TReport_bilancio_verifica::set_recordset(const TString& /* sql */)
@ -372,14 +313,10 @@ void TReport_bilancio_verifica::set_filter(const TMask& m, int row)
commessa = rel.curr().get(RMOVANA_CODCMS); commessa = rel.curr().get(RMOVANA_CODCMS);
fase = rel.curr().get(RMOVANA_CODFASE); fase = rel.curr().get(RMOVANA_CODFASE);
const TString & contsep = m.get(F_CONTSEP);
TPconana_recordset* rset = (TPconana_recordset*)recordset(); TPconana_recordset* rset = (TPconana_recordset*)recordset();
if (rset != NULL) if (rset != NULL)
rset->set_filter(tc, da_conto, a_conto, costo, commessa, fase, dal, al, tipimov, movimentati, nonnulli); rset->set_filter(tc, da_conto, a_conto, costo, commessa, fase, contsep, dal, al, tipimov, movimentati, nonnulli);
}
TReport_bilancio_verifica::TReport_bilancio_verifica(const char* name)
{
load(name);
} }
//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
@ -418,7 +355,7 @@ class TRecordset_sezioni_contrapposte : public TRecordset
TDate _da_data, _a_data; TDate _da_data, _a_data;
word _tipimov; word _tipimov;
bool _movimentati, _nonnulli; bool _movimentati, _nonnulli;
TString _daconto, _aconto; TString _daconto, _aconto, _contsep;
TString4 _tipostampa; TString4 _tipostampa;
bool _print_ap; bool _print_ap;
@ -449,7 +386,7 @@ public:
virtual const TVariant& get(unsigned int column) const { return NULL_VARIANT; } virtual const TVariant& get(unsigned int column) const { return NULL_VARIANT; }
virtual const TVariant& get(const char* field) const; virtual const TVariant& get(const char* field) const;
void set_filter(char piano, const char* costo, const char* commessa, const char* fase, void set_filter(char piano, const char* costo, const char* commessa, const char* fase, const char * contsep,
const TDate& dal, const TDate& al, word tipimov, bool movimentati, bool nonnulli, const TDate& dal, const TDate& al, word tipimov, bool movimentati, bool nonnulli,
bool print_ap, const TString& daconto, const TString& aconto); bool print_ap, const TString& daconto, const TString& aconto);
char tipo_piano() const { return _tipo_piano; } char tipo_piano() const { return _tipo_piano; }
@ -473,7 +410,7 @@ bool TRecordset_sezioni_contrapposte::move_to(TRecnotype pos)
return _pos < items(); return _pos < items();
} }
void TRecordset_sezioni_contrapposte::set_filter(char piano, const char* costo, const char* commessa, const char* fase, void TRecordset_sezioni_contrapposte::set_filter(char piano, const char* costo, const char* commessa, const char* fase, const char * contsep,
const TDate& dal, const TDate& al, word tipimov, bool movimentati, const TDate& dal, const TDate& al, word tipimov, bool movimentati,
bool nonnulli, bool print_ap, const TString& daconto, const TString& aconto) bool nonnulli, bool print_ap, const TString& daconto, const TString& aconto)
{ {
@ -505,6 +442,7 @@ void TRecordset_sezioni_contrapposte::set_filter(char piano, const char* costo,
_daconto = daconto; _daconto = daconto;
_aconto = aconto; _aconto = aconto;
_contsep = contsep;
} }
TArray& TRecordset_sezioni_contrapposte::conti(int indbil) TArray& TRecordset_sezioni_contrapposte::conti(int indbil)
@ -536,7 +474,7 @@ void TRecordset_sezioni_contrapposte::add_conto(const TString& b,
a.insert(sc, n); a.insert(sc, n);
} }
void TRecordset_sezioni_contrapposte::add_conto(int indbil, const TString& b) void TRecordset_sezioni_contrapposte::add_conto(int indbil, const TString& b) // qui
{ {
if (indbil >= 1 && indbil <= 4) if (indbil >= 1 && indbil <= 4)
{ {
@ -646,8 +584,8 @@ void TRecordset_sezioni_contrapposte::add_conto(int indbil, const TString& b)
bill.set_fase(c.blank() ? "~" : c); bill.set_fase(c.blank() ? "~" : c);
const TSaldanal& wsp = ca_saldo(bill, _da_data, _a_data, _saldanal_preventivi); const TSaldanal& wsp = ca_saldo(bill, "", _da_data, _a_data, _saldanal_preventivi); // qui
const TSaldanal& wsc = ca_saldo(bill, _da_data, _a_data, _saldanal_consuntivo); const TSaldanal& wsc = ca_saldo(bill, "", _da_data, _a_data, _saldanal_consuntivo);
sp += wsp; sp += wsp;
sc += wsc; sc += wsc;
@ -675,7 +613,7 @@ void TRecordset_sezioni_contrapposte::add_conto(int indbil, const TString& b)
c = code.get(); c = code.get();
bill.set_fase(c.blank() ? "~" : c); bill.set_fase(c.blank() ? "~" : c);
const TSaldanal& wsa = ca_saldo(bill, _da_data, _a_data, _tipimov); const TSaldanal& wsa = ca_saldo(bill, "", _da_data, _a_data, _tipimov); // qui
sa += wsa; sa += wsa;
} }
@ -691,8 +629,8 @@ void TRecordset_sezioni_contrapposte::add_conto(int indbil, const TString& b)
{ {
if ((_tipimov & _saldanal_qualsiasi) == _saldanal_qualsiasi) // Bilancio a sezioni contrapposte di raffronto if ((_tipimov & _saldanal_qualsiasi) == _saldanal_qualsiasi) // Bilancio a sezioni contrapposte di raffronto
{ {
const TSaldanal sp = ca_saldo(bill, _da_data, _a_data, _saldanal_preventivi); const TSaldanal sp = ca_saldo(bill, "", _da_data, _a_data, _saldanal_preventivi);// qui
const TSaldanal sc = ca_saldo(bill, _da_data, _a_data, _saldanal_consuntivo); const TSaldanal sc = ca_saldo(bill, "", _da_data, _a_data, _saldanal_consuntivo);
if (!sp._fin.is_zero() || !sc._fin.is_zero()) if (!sp._fin.is_zero() || !sc._fin.is_zero())
{ {
@ -704,7 +642,7 @@ void TRecordset_sezioni_contrapposte::add_conto(int indbil, const TString& b)
} }
else else
{ {
const TSaldanal sa = ca_saldo(bill, _da_data, _a_data, _tipimov); const TSaldanal sa = ca_saldo(bill, "", _da_data, _a_data, _tipimov); // qui
if (!sa._fin.is_zero()) if (!sa._fin.is_zero())
{ {
@ -771,6 +709,9 @@ void TRecordset_sezioni_contrapposte::requery()
{ {
// Crea recordset del piano dei conti appropriato // Crea recordset del piano dei conti appropriato
TString query = "USE PCON"; TString query = "USE PCON";
if (_contsep.full())
query << " SELECT (" << MOVANA_CONTSEP << "==" << _contsep << ")";
if (_tipo_piano == 'A') if (_tipo_piano == 'A')
{ {
query << "ANA"; query << "ANA";
@ -979,6 +920,8 @@ const TVariant& TRecordset_sezioni_contrapposte::get(const char* field) const
return get_tmp_var() = _filter.commessa(); return get_tmp_var() = _filter.commessa();
if (fld == "#FASE") if (fld == "#FASE")
return get_tmp_var() = _filter.fase(); return get_tmp_var() = _filter.fase();
if (fld == "#CONTSEP")
return get_tmp_var() = _contsep;
if (fld == "#DATA_INIZIALE") if (fld == "#DATA_INIZIALE")
return get_tmp_var() = _da_data; return get_tmp_var() = _da_data;
if (fld == "#DATA_FINALE") if (fld == "#DATA_FINALE")
@ -1035,7 +978,7 @@ protected:
public: public:
void set_filter(const TMask& msk, int row); void set_filter(const TMask& msk, int row);
TReport_bilancio_sezioni_contrapposte(const char* name) { load(name); } TReport_bilancio_sezioni_contrapposte() { }
}; };
bool TReport_bilancio_sezioni_contrapposte::set_recordset(const TString& /* sql */) bool TReport_bilancio_sezioni_contrapposte::set_recordset(const TString& /* sql */)
@ -1109,7 +1052,9 @@ void TReport_bilancio_sezioni_contrapposte::set_filter(const TMask& m, int row)
} }
TRecordset_sezioni_contrapposte* recset = new TRecordset_sezioni_contrapposte(tipo); TRecordset_sezioni_contrapposte* recset = new TRecordset_sezioni_contrapposte(tipo);
recset->set_filter(tipo, costo, commessa, fase, dal, al, tipimov, movimentati, nonnulli, print_ap, daconto, aconto); const TString & contsep = m.get(F_CONTSEP);
recset->set_filter(tipo, costo, commessa, fase, contsep, dal, al, tipimov, movimentati, nonnulli, print_ap, daconto, aconto);
TAnal_report::set_recordset(recset); TAnal_report::set_recordset(recset);
}; };
@ -1117,9 +1062,10 @@ void TReport_bilancio_sezioni_contrapposte::set_filter(const TMask& m, int row)
// APPLICAZIONE // APPLICAZIONE
//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
class TPrint_bilancio_ca : public TSkeleton_application class TPrint_bilancio_ca : public TReport_application
{ {
TPrint_bilancio_ca_mask * _mask; TPrint_bilancio_ca_mask * _mask;
TArray _reps;
protected: protected:
virtual const char * extra_modules() const {return "cm";} //funziona anche con autorizzazione CM virtual const char * extra_modules() const {return "cm";} //funziona anche con autorizzazione CM
@ -1127,70 +1073,75 @@ protected:
bool commessa_buona(const TRectype& cms, const TDate& dadata, const TDate& adata) const; bool commessa_buona(const TRectype& cms, const TDate& dadata, const TDate& adata) const;
bool buon_cdc(const TRectype& cdc, const TDate& dadata, const TDate& adata) const; bool buon_cdc(const TRectype& cdc, const TDate& dadata, const TDate& adata) const;
void fill_sheet(int livello); void fill_sheet(int livello);
void bilancio_a_sezioni_contrapposte(const bool stampa); void bilancio_a_sezioni_contrapposte(TReport & rep);
void bilancio_di_verifica(const bool stampa); void bilancio_di_verifica(TReport & rep);
// @cmember ritorna la maschera
virtual TAutomask & get_mask();
// @cmember Ritorna il report
virtual TReport & get_report(const TAutomask & m);
virtual void execute_print(TReport_book & book, TAutomask & mask, TReport & rep, export_type type = _export_printer);
virtual bool user_destroy();
void print_or_preview(const bool stampa); public:
virtual void print(); TPrint_bilancio_ca() : _mask(nullptr) {}
virtual void preview(); ~TPrint_bilancio_ca() {}
virtual void main_loop();
}; };
void TPrint_bilancio_ca::bilancio_a_sezioni_contrapposte(const bool stampa) TReport & TPrint_bilancio_ca::get_report(const TAutomask & m)
{ {
TReport_bilancio_sezioni_contrapposte rep(_mask->get(F_REPORT)); TReport * r = nullptr;
if (m.get(F_BILANCIO) == "C")
{
if (_reps.objptr(0) == nullptr)
_reps.add(new TReport_bilancio_sezioni_contrapposte, 0);
r = (TReport_bilancio_sezioni_contrapposte *) _reps.objptr(0);
}
else
{
if (_reps.objptr(1) == nullptr)
_reps.add(new TReport_bilancio_verifica, 0);
r = (TReport_bilancio_verifica *)_reps.objptr(1);
}
TString path = _mask->get(DLG_REPORT);
if (path.empty())
path = ((TPrint_bilancio_ca_mask *)_mask)->get_report_class();
r->load(path);
return *r;
}
TAutomask & TPrint_bilancio_ca::get_mask()
{
if (_mask == nullptr)
_mask = new TPrint_bilancio_ca_mask;
return *_mask;
}
void TPrint_bilancio_ca::bilancio_a_sezioni_contrapposte(TReport & rep)
{
const int rows = _mask->sfield(F_RIGHE).items(); const int rows = _mask->sfield(F_RIGHE).items();
TProgind* pi = rows > 1 ? new TProgind(rows, TR("Bilancio a sezioni contrapposte")) : NULL; TProgress_monitor pi(rows, TR("Bilancio a sezioni contrapposte"));
TReport_book book; TReport_book book;
for (int i = 0; i < rows; i++)
for (int i = 0; pi.add_status() && i < rows; i++)
{ {
if (pi && !pi->addstatus(1)) ((TReport_bilancio_sezioni_contrapposte &)rep).set_filter(*_mask, i);
break;
rep.set_filter(*_mask, i);
book.add(rep); book.add(rep);
} }
if (pi) delete pi;
if (stampa)
book.print(); //stampa il book dei report
else
book.preview(); //anteprima
} }
void TPrint_bilancio_ca::bilancio_di_verifica(const bool stampa) void TPrint_bilancio_ca::bilancio_di_verifica(TReport & rep)
{ {
TReport_bilancio_verifica rep(_mask->get(F_REPORT));
const int rows = _mask->sfield(F_RIGHE).items(); const int rows = _mask->sfield(F_RIGHE).items();
TProgind* pi = rows > 1 ? new TProgind(rows, TR("Bilancio di verifica")) : NULL; TProgress_monitor pi(rows, TR("Bilancio di verifica"));
TReport_book book; TReport_book book;
for (int i = 0; i < rows; i++)
for (int i = 0; pi.add_status() && i < rows; i++)
{ {
if (pi && !pi->addstatus(1)) ((TReport_bilancio_verifica &)rep).set_filter(*_mask, i);
break;
rep.set_filter(*_mask, i);
book.add(rep); book.add(rep);
} }
if (pi) delete pi;
if (stampa)
book.print(); //stampa il book dei report
else
book.preview(); //anteprima
}
void TPrint_bilancio_ca::print()
{
print_or_preview(true);
}
void TPrint_bilancio_ca::preview()
{
print_or_preview(false);
} }
// Anche l'occhio vuole la sua parte // Anche l'occhio vuole la sua parte
@ -1297,7 +1248,7 @@ void TPrint_bilancio_ca::fill_sheet(int livello)
} }
} }
void TPrint_bilancio_ca::print_or_preview(const bool stampa) void TPrint_bilancio_ca::execute_print(TReport_book & book, TAutomask & mask, TReport & rep, export_type type)
{ {
TSheet_field& sf = _mask->sfield(F_RIGHE); TSheet_field& sf = _mask->sfield(F_RIGHE);
@ -1311,22 +1262,19 @@ void TPrint_bilancio_ca::print_or_preview(const bool stampa)
} }
else else
fill_sheet(completa); fill_sheet(completa);
if (_mask->get(F_BILANCIO) == "C") if (_mask->get(F_BILANCIO) == "C")
bilancio_a_sezioni_contrapposte(stampa); bilancio_a_sezioni_contrapposte(rep);
else else
bilancio_di_verifica(stampa); bilancio_di_verifica(rep);
if (empty_sheet) if (empty_sheet)
sf.destroy(); sf.destroy();
} }
void TPrint_bilancio_ca::main_loop() bool TPrint_bilancio_ca::user_destroy()
{ {
_mask = new TPrint_bilancio_ca_mask; safe_delete(_mask);
_mask->run(); return TReport_application::user_destroy();
delete _mask;
_mask = NULL;
} }
int ca3300(int argc, char* argv[]) int ca3300(int argc, char* argv[])

View File

@ -75,7 +75,7 @@ const TString& TPrint_rendiconto_ca_mask::get_report_class() const
bool TPrint_rendiconto_ca_mask::test_compatible_report() bool TPrint_rendiconto_ca_mask::test_compatible_report()
{ {
const TString& cls = get_report_class(); const TString& cls = get_report_class();
const TString& name = get(F_REPORT); const TString& name = get(DLG_REPORT);
bool ok = name.not_empty(); bool ok = name.not_empty();
if (ok) if (ok)
{ {
@ -89,7 +89,7 @@ bool TPrint_rendiconto_ca_mask::test_compatible_report()
} }
if (!ok) if (!ok)
{ {
set(F_REPORT, cls); set(DLG_REPORT, cls);
TFilename path = cls; TFilename path = cls;
path.ext("rep"); path.ext("rep");
ok = path.custom_path(); ok = path.custom_path();
@ -144,7 +144,7 @@ bool TPrint_rendiconto_ca_mask::on_field_event(TOperable_field& o, TField_event
}*/ }*/
} }
break; break;
case F_REPORT: case DLG_REPORT:
if (e == fe_button) if (e == fe_button)
{ {
const TString8 lib = get_report_class(); const TString8 lib = get_report_class();
@ -563,7 +563,7 @@ real TPrint_rendiconto_ca_recordset::get_budget_batch(const TString& codcdc, con
if (_riclassificato) if (_riclassificato)
tipo_movimento |= _saldanal_riclassify; tipo_movimento |= _saldanal_riclassify;
//..ecco quindi il saldo.. //..ecco quindi il saldo..
const TSaldanal& saldo = ca_saldo(zio, null_date, null_date, tipo_movimento); const TSaldanal& saldo = ca_saldo(zio, "", null_date, null_date, tipo_movimento); // qui
//..che deve essere normalizzato in base alla sua sezione ed all'indicatore di bilancio del conto //..che deve essere normalizzato in base alla sua sezione ed all'indicatore di bilancio del conto
TImporto imp = saldo._fin; TImporto imp = saldo._fin;
switch (zio.indicatore_bilancio()) switch (zio.indicatore_bilancio())
@ -601,7 +601,7 @@ real TPrint_rendiconto_ca_recordset::get_budget_print(const TString& conto, char
if (_riclassificato) if (_riclassificato)
tipo_movimento |= _saldanal_riclassify; tipo_movimento |= _saldanal_riclassify;
//..ecco quindi il saldo.. //..ecco quindi il saldo..
const TSaldanal& saldo = ca_saldo(zio, null_date, null_date, tipo_movimento); const TSaldanal& saldo = ca_saldo(zio, "", null_date, null_date, tipo_movimento); // qui
//..che deve essere normalizzato in base alla sua sezione ed all'indicatore di bilancio del conto //..che deve essere normalizzato in base alla sua sezione ed all'indicatore di bilancio del conto
TImporto imp = saldo._fin; TImporto imp = saldo._fin;
switch (zio.indicatore_bilancio()) switch (zio.indicatore_bilancio())
@ -2378,7 +2378,7 @@ void TPrint_rendiconto_ca::export_rendiconto()
TSheet_field& sheet = _msk->sfield(F_RIGHE); sheet.destroy(); TSheet_field& sheet = _msk->sfield(F_RIGHE); sheet.destroy();
TToken_string& row = sheet.row(-1); //crea la prima riga dello sheet TToken_string& row = sheet.row(-1); //crea la prima riga dello sheet
TString repname = _msk->get(F_REPORT); TString repname = _msk->get(DLG_REPORT);
if (repname.empty()) if (repname.empty())
repname = "ca3700a"; repname = "ca3700a";
@ -2684,7 +2684,7 @@ void TPrint_rendiconto_ca::main_loop()
//report e book dei report //report e book dei report
TReport_book book; TReport_book book;
TString path = mask.get(F_REPORT); TString path = mask.get(DLG_REPORT);
if (path.empty()) if (path.empty())
path = "ca3700a"; path = "ca3700a";
TPrint_rendiconto_ca_rep rep; TPrint_rendiconto_ca_rep rep;

View File

@ -1,4 +1,4 @@
#include <applicat.h> #include <repapp.h>
#include <defmask.h> #include <defmask.h>
#include "../cg/cglib.h" #include "../cg/cglib.h"
@ -7,6 +7,7 @@
#include "ca3883a.h" #include "ca3883a.h"
#include "calib01.h" #include "calib01.h"
#include "calib02.h" #include "calib02.h"
#include "commesse.h"
#include "pconana.h" #include "pconana.h"
#include "cdc.h" #include "cdc.h"
#include "fasi.h" #include "fasi.h"
@ -47,7 +48,7 @@ const TString& TPrint_bilancio_cms_mask::get_report_class() const
bool TPrint_bilancio_cms_mask::test_compatible_report() bool TPrint_bilancio_cms_mask::test_compatible_report()
{ {
const TString& cls = get_report_class(); const TString& cls = get_report_class();
const TString& name = get(F_REPORT); const TString& name = get(DLG_REPORT);
bool ok = name.not_empty(); bool ok = name.not_empty();
if (ok) if (ok)
{ {
@ -61,7 +62,7 @@ bool TPrint_bilancio_cms_mask::test_compatible_report()
} }
if (!ok) if (!ok)
{ {
set(F_REPORT, cls); set(DLG_REPORT, cls);
TFilename path = cls; TFilename path = cls;
path.ext("rep"); path.ext("rep");
ok = path.custom_path(); ok = path.custom_path();
@ -73,21 +74,7 @@ bool TPrint_bilancio_cms_mask::on_field_event(TOperable_field& o, TField_event e
{ {
switch (o.dlg()) switch (o.dlg())
{ {
case DLG_PRINT: case DLG_REPORT:
if (e == fe_button)
{
main_app().print();
return false;
}
break;
case DLG_PREVIEW:
if (e == fe_button)
{
main_app().preview();
return false;
}
break;
case F_REPORT:
if (e == fe_button) if (e == fe_button)
{ {
const TString8 lib = get_report_class(); const TString8 lib = get_report_class();
@ -131,7 +118,6 @@ bool TPrint_bilancio_cms_mask::on_field_event(TOperable_field& o, TField_event e
return TAnal_report_mask::on_field_event(o, e, jolly); return TAnal_report_mask::on_field_event(o, e, jolly);
} }
TPrint_bilancio_cms_mask::TPrint_bilancio_cms_mask() TPrint_bilancio_cms_mask::TPrint_bilancio_cms_mask()
:TAnal_report_mask("ca3800") :TAnal_report_mask("ca3800")
{ {
@ -251,36 +237,35 @@ TPrint_bilancio_cms_rep::TPrint_bilancio_cms_rep(const char* rep_name, const TSt
const bool intestazione_minima) const bool intestazione_minima)
:TCRPA_report(rep_name, prefix, depth, show_fasi, show_cdc, show_cms_descr, show_cms_date, sintetica, intestazione_minima) :TCRPA_report(rep_name, prefix, depth, show_fasi, show_cdc, show_cms_descr, show_cms_date, sintetica, intestazione_minima)
{ {
} }
//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
// APPLICAZIONE // APPLICAZIONE
//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
class TPrint_bilancio_cms : public TSkeleton_application class TPrint_bilancio_cms : public TReport_application
{ {
TPrint_bilancio_cms_mask * _mask; TPrint_bilancio_cms_mask * _mask;
TReport * _rep;
protected: protected:
void build_lista_fasi(TString_array & lista_fasi, const TString & fase); void build_lista_fasi(TString_array & lista_fasi, const TString & fase);
void build_lista_cdc(TString_array & lista_cdc, const TString & cdc); void build_lista_cdc(TString_array & lista_cdc, const TString & cdc);
void print_or_preview(const bool stampa); // @cmember Ritorna il report
virtual void print(); virtual TReport & get_report(const TAutomask & m);
virtual void preview(); // @cmember ritorna la maschera
virtual TAutomask & get_mask();
virtual void execute_print(TReport_book & book, TAutomask & mask, TReport & rep, export_type type = _export_printer);
virtual void main_loop(); public:
virtual const char * title() const { return TR("Stampa bilancio di commessa"); }
virtual const char * output_name(const TReport & rep) const { return "bilcms"; }
virtual TTrec * get_dbase_recdesc(TReport & rep);
// @cmember Costruttore
TPrint_bilancio_cms() : _mask(nullptr), _rep(nullptr) { }
// @cmember Distruttore
virtual ~TPrint_bilancio_cms() { }
}; };
void TPrint_bilancio_cms::print()
{
print_or_preview(true);
}
void TPrint_bilancio_cms::preview()
{
print_or_preview(false);
}
void TPrint_bilancio_cms::build_lista_fasi(TString_array & lista_fasi, const TString & fase) void TPrint_bilancio_cms::build_lista_fasi(TString_array & lista_fasi, const TString & fase)
{ {
TString query("USE FASI"); TString query("USE FASI");
@ -331,25 +316,14 @@ void TPrint_bilancio_cms::build_lista_cdc(TString_array & lista_cdc, const TStri
} }
} }
void TPrint_bilancio_cms::print_or_preview(const bool stampa) void TPrint_bilancio_cms::execute_print(TReport_book & book, TAutomask & mask, TReport & rep, export_type type)
{ {
//report e book dei report
TReport_book book;
TString80 prefix;
for (short id = F_PRE1; id <= F_PRE3 && _mask->id2pos(id) > 0; id++)
prefix << _mask->get(id);
const int depth = _mask->get_int(F_DEPTH);
TString path = _mask->get(F_REPORT);
const int tipostampa = _mask->get_int(F_TIPOSTAMPA); const int tipostampa = _mask->get_int(F_TIPOSTAMPA);
//fasi //fasi
const bool dett_fasi = (tipostampa == 1) || (tipostampa == 3); const bool dett_fasi = (tipostampa == 1) || (tipostampa == 3);
const TString& fase = _mask->get(F_FASE); const TString& fase = _mask->get(F_FASE);
const bool group_fasi = tipostampa == 4; const bool group_fasi = tipostampa == 4;
const bool show_fasi = dett_fasi && fase.empty(); const bool show_fasi = dett_fasi && fase.empty();
const bool sintetica = _mask->get_bool(F_STAMPA_SINTETICA);
const bool intestazione_minima = _mask->get_bool(F_INTESTAZIONE_MINIMA); const bool intestazione_minima = _mask->get_bool(F_INTESTAZIONE_MINIMA);
//cdc //cdc
@ -363,12 +337,6 @@ void TPrint_bilancio_cms::print_or_preview(const bool stampa)
const bool show_cms_descr = _mask->get_bool(F_SHOW_CMS_DESCR); const bool show_cms_descr = _mask->get_bool(F_SHOW_CMS_DESCR);
const bool show_cms_date = _mask->get_bool(F_SHOW_CMS_DATE); const bool show_cms_date = _mask->get_bool(F_SHOW_CMS_DATE);
if (path.empty())
path = _mask->get_report_class();
//crea il report in base ai parametri (tipo report,struttura,profondita' di stampa)
TPrint_bilancio_cms_rep rep(path, prefix, depth, show_fasi, show_cdc, show_cms_descr, show_cms_date, sintetica, intestazione_minima);
//se e' una stampa di tipo fasi riassunte (crpa special edition) deve fare lo scanning di tutte le fasi.. //se e' una stampa di tipo fasi riassunte (crpa special edition) deve fare lo scanning di tutte le fasi..
//..singolarmente e stampare un report per ogni fase.Senno' stampa un solo report //..singolarmente e stampare un report per ogni fase.Senno' stampa un solo report
@ -379,12 +347,8 @@ void TPrint_bilancio_cms::print_or_preview(const bool stampa)
if (fase.blank() && cdc.blank()) if (fase.blank() && cdc.blank())
{ {
rep.set_filter(*_mask); ((TPrint_bilancio_cms_rep & ) rep).set_filter(*_mask);
book.add(rep); book.add(rep, type);
if (stampa)
book.print();
else
book.preview();
} }
else else
{ {
@ -401,8 +365,8 @@ void TPrint_bilancio_cms::print_or_preview(const bool stampa)
{ {
const TString& cdc = lista_cdc.row(j); const TString& cdc = lista_cdc.row(j);
rep.set_filter(*_mask, fase, cdc); ((TPrint_bilancio_cms_rep &)rep).set_filter(*_mask, fase, cdc);
book.add(rep); book.add(rep, type);
if (rep.page() > 0) if (rep.page() > 0)
{ {
if (intestazione_minima) if (intestazione_minima)
@ -413,10 +377,6 @@ void TPrint_bilancio_cms::print_or_preview(const bool stampa)
} }
} }
} }
if (stampa)
book.print();
else
book.preview();
} }
} }
} //if(group_fasi... } //if(group_fasi...
@ -434,8 +394,8 @@ void TPrint_bilancio_cms::print_or_preview(const bool stampa)
{ {
TString16 fase = lista_fasi.row(i); TString16 fase = lista_fasi.row(i);
rep.set_filter(*_mask, fase); ((TPrint_bilancio_cms_rep &)rep).set_filter(*_mask, fase);
book.add(rep); book.add(rep, type);
if (rep.page() > 0) if (rep.page() > 0)
{ {
if (intestazione_minima) if (intestazione_minima)
@ -445,13 +405,7 @@ void TPrint_bilancio_cms::print_or_preview(const bool stampa)
} }
} }
} }
if (stampa)
book.print();
else
book.preview();
} }
} //if(group_fasi... } //if(group_fasi...
else else
if (group_cdc || dett_cdc) if (group_cdc || dett_cdc)
@ -465,8 +419,8 @@ void TPrint_bilancio_cms::print_or_preview(const bool stampa)
{ {
const TString& cdc = lista_cdc.row(j); const TString& cdc = lista_cdc.row(j);
rep.set_filter(*_mask, fase, cdc); ((TPrint_bilancio_cms_rep &)rep).set_filter(*_mask, fase, cdc);
book.add(rep); book.add(rep, type);
if (rep.page() > 0) if (rep.page() > 0)
{ {
if (intestazione_minima) if (intestazione_minima)
@ -477,35 +431,115 @@ void TPrint_bilancio_cms::print_or_preview(const bool stampa)
} }
} }
} }
if (stampa)
book.print();
else
book.preview();
} //if(group_cdc... } //if(group_cdc...
else //...senno' stampa standard in un giro solo else //...senno' stampa standard in un giro solo
{ {
rep.set_filter(*_mask); ((TPrint_bilancio_cms_rep &)rep).set_filter(*_mask);
book.add(rep); book.add(rep, type);
if (stampa)
book.print();
else
book.preview();
} }
} }
void TPrint_bilancio_cms::main_loop() TReport & TPrint_bilancio_cms::get_report(const TAutomask & m)
{ {
TString80 prefix;
for (short id = F_PRE1; id <= F_PRE3 && m.id2pos(id) > 0; id++)
prefix << m.get(id);
const int depth = m.get_int(F_DEPTH);
TString path = m.get(DLG_REPORT);
const int tipostampa = m.get_int(F_TIPOSTAMPA);
//fasi
const bool dett_fasi = (tipostampa == 1) || (tipostampa == 3);
const TString& fase = m.get(F_FASE);
const bool group_fasi = tipostampa == 4;
const bool show_fasi = dett_fasi && fase.empty();
const bool sintetica = m.get_bool(F_STAMPA_SINTETICA);
const bool intestazione_minima = m.get_bool(F_INTESTAZIONE_MINIMA);
//cdc
const bool dett_cdc = (tipostampa == 2) || (tipostampa == 3);
const TString& cdc = m.get(F_CDC);
const bool group_cdc = tipostampa == 8;
const bool show_cdc = dett_cdc && cdc.empty();
//descrizioni
const bool show_cms_descr = m.get_bool(F_SHOW_CMS_DESCR);
const bool show_cms_date = m.get_bool(F_SHOW_CMS_DATE);
if (path.empty())
path = ((TPrint_bilancio_cms_mask &)m).get_report_class();
//crea il report in base ai parametri (tipo report,struttura,profondita' di stampa)
safe_delete(_rep);
_rep = new TPrint_bilancio_cms_rep(path, prefix, depth, show_fasi, show_cdc, show_cms_descr, show_cms_date, sintetica, intestazione_minima);
return *_rep;
}
TAutomask & TPrint_bilancio_cms::get_mask()
{
if (_mask == nullptr)
_mask = new TPrint_bilancio_cms_mask; _mask = new TPrint_bilancio_cms_mask;
_mask->run(); return *_mask;
delete _mask; }
_mask = NULL;
TTrec * TPrint_bilancio_cms::get_dbase_recdesc(TReport & rep)
{
TTrec * desc = new TTrec;
TToken_string def;
TRectype cms(LF_COMMESSE);
TRectype fasi(LF_FASI);
TRectype cdc(LF_CDC);
TMask & m = get_mask();
const int tipostampa = m.get_int(F_TIPOSTAMPA);
const bool show_cms_descr = _mask->get_bool(F_SHOW_CMS_DESCR);
const bool show_cms_date = _mask->get_bool(F_SHOW_CMS_DATE);
const bool dett_fasi = (tipostampa == 1) || (tipostampa == 3);
const bool dett_cdc = (tipostampa == 2) || (tipostampa == 3);
desc->add_fielddef(cms.rec_des(), COMMESSE_CODCMS);
if (show_cms_descr)
desc->add_fielddef(cms.rec_des(), COMMESSE_DESCRIZ);
if (show_cms_date)
{
desc->add_fielddef("INIZIO", _datefld);
desc->add_fielddef("FINE", _datefld);
}
if (dett_fasi)
desc->add_fielddef(fasi.rec_des(), FASI_CODFASE);
if (dett_cdc)
desc->add_fielddef(cdc.rec_des(), CDC_CODCOSTO);
desc->add_fielddef("AVRIC", _realfld, 6, 2);
desc->add_fielddef("RICAVI", _realfld, 18, 2);
desc->add_fielddef("INCAR", _realfld, 18, 2);
desc->add_fielddef("CONSUL", _realfld, 18, 2);
desc->add_fielddef("ALTRI", _realfld, 18, 2);
desc->add_fielddef("MATER", _realfld, 18, 2);
desc->add_fielddef("INDIST", _realfld, 18, 2);
desc->add_fielddef("DIPEND", _realfld, 18, 2);
desc->add_fielddef("COSTI", _realfld, 18, 2);
desc->add_fielddef("DIFF", _realfld, 18, 2);
desc->add_fielddef("DIFFPERC", _realfld, 6, 2);
TString keydef = COMMESSE_CODCMS;
if (dett_fasi)
keydef << '+' << FASI_CODFASE;
if (dett_cdc)
keydef << '+' << CDC_CODCOSTO;
desc->add_keydef(keydef, true);
if (show_cms_descr)
desc->add_keydef(COMMESSE_DESCRIZ, true);
return desc;
} }
int ca3800(int argc, char* argv[]) int ca3800(int argc, char* argv[])
{ {
TPrint_bilancio_cms a; TPrint_bilancio_cms a;
a.run(argc, argv, TR("Stampa bilancio di commessa")); a.run(argc, argv, a.title());
return 0; return 0;
} }

View File

@ -1,9 +1,16 @@
#include "ca3883a.h" #include "ca3883a.h"
#define ALL_EXPORT
#define CLASS_NAME "ca3800"
TOOLBAR "topbar" 0 0 0 2 TOOLBAR "topbar" 0 0 0 2
#include <aprintbar.h> #include <aprintbar.h>
ENDPAGE ENDPAGE
TOOLBAR "bottombar" 0 -3 0 1
#include <bprintbar.h>
ENDPAGE
PAGE "Stampa bilancio commessa" 0 2 0 0 PAGE "Stampa bilancio commessa" 0 2 0 0
GROUPBOX DLG_NULL 76 5 GROUPBOX DLG_NULL 76 5
@ -71,18 +78,12 @@ END
LISTBOX F_TIPOSTAMPA 1 30 LISTBOX F_TIPOSTAMPA 1 30
BEGIN BEGIN
PROMPT 1 8 "Stampa " PROMPT 1 8 "Stampa "
ITEM "0|Normale" ITEM "0|Normale" MESSAGE CLEAR,F_FASE|CLEAR,F_CDC
MESSAGE CLEAR,F_FASE|CLEAR,F_CDC ITEM "1|Dettaglia per Fase" MESSAGE ENABLE,F_FASE|CLEAR,F_CDC
ITEM "1|Dettaglia per Fase" ITEM "2|Dettaglia per CdC" MESSAGE CLEAR,F_FASE|ENABLE,F_CDC
MESSAGE ENABLE,F_FASE|CLEAR,F_CDC ITEM "3|Dettaglia per Fase e CdC" MESSAGE ENABLE,F_FASE|ENABLE,F_CDC
ITEM "2|Dettaglia per CdC" ITEM "4|Riassuntiva per Fase" MESSAGE CLEAR,F_FASE|CLEAR,F_CDC
MESSAGE CLEAR,F_FASE|ENABLE,F_CDC ITEM "8|Riassuntiva per CdC" MESSAGE CLEAR,F_FASE|CLEAR,F_CDC
ITEM "3|Dettaglia per Fase e CdC"
MESSAGE ENABLE,F_FASE|ENABLE,F_CDC
ITEM "4|Riassuntiva per Fase"
MESSAGE CLEAR,F_FASE|CLEAR,F_CDC
ITEM "8|Riassuntiva per CdC"
MESSAGE CLEAR,F_FASE|CLEAR,F_CDC
END END
BOOLEAN F_STAMPA_SINTETICA BOOLEAN F_STAMPA_SINTETICA
@ -115,12 +116,9 @@ END
LISTBOX F_TIPOSTIMA 1 30 LISTBOX F_TIPOSTIMA 1 30
BEGIN BEGIN
PROMPT 1 11 "Tipo di stima Costi\Ricavi" PROMPT 1 11 "Tipo di stima Costi\Ricavi"
ITEM "T|C prev.\R prev. (Tempo)" ITEM "T|C prev.\R prev. (Tempo)" MESSAGE SHOW,F_DETR_CONS|ENABLE,F_DETR_CONS|CLEAR,F_INCLUDE_DOCUMENTI
MESSAGE SHOW,F_DETR_CONS|ENABLE,F_DETR_CONS|CLEAR,F_INCLUDE_DOCUMENTI ITEM "C|C cons.\R prev." MESSAGE SHOW,F_DETR_CONS|ENABLE,F_DETR_CONS|ENABLE,F_INCLUDE_DOCUMENTI
ITEM "C|C cons.\R prev." ITEM "R|C cons.\R cons." MESSAGE CLEAR,F_DETR_CONS|HIDE,F_DETR_CONS|ENABLE,F_INCLUDE_DOCUMENTI
MESSAGE SHOW,F_DETR_CONS|ENABLE,F_DETR_CONS|ENABLE,F_INCLUDE_DOCUMENTI
ITEM "R|C cons.\R cons."
MESSAGE CLEAR,F_DETR_CONS|HIDE,F_DETR_CONS|ENABLE,F_INCLUDE_DOCUMENTI
END END
BOOLEAN F_DETR_CONS BOOLEAN F_DETR_CONS
@ -134,25 +132,39 @@ BEGIN
GROUP 6 GROUP 6
END END
STRING F_CONTSEP 6
BEGIN
PROMPT 1 19 "Cont.separata "
USE &NPENT
INPUT CODTAB F_CONTSEP
DISPLAY "Codice@6" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CONTSEP CODTAB
OUTPUT F_DESCONTSEP S0
CHECKTYPE NORMAL
FIELD CONTSEP
MODULE NP
END
STRING F_DESCONTSEP 50 48
BEGIN
PROMPT 25 19 ""
USE &NPENT KEY 2
INPUT S0 F_DESCONTSEP
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@6" CODTAB
COPY OUTPUT F_CONTSEP
CHECKTYPE SEARCH
MODULE NP
END
LISTBOX F_DEPTH 1 20 LISTBOX F_DEPTH 1 20
BEGIN BEGIN
PROMPT 1 19 "Profondita' del piano dei conti da considerare " PROMPT 1 20 "Profondita' del piano dei conti da considerare "
ITEM "1|Gruppo" ITEM "1|Gruppo"
ITEM "2|Conto" ITEM "2|Conto"
END END
STRING F_REPORT 256 64
BEGIN
PROMPT 1 20 "Report "
FLAGS "B"
END
STRING DLG_PROFILE 50
BEGIN
PROMPT 1 -1 "Profilo "
PSELECT
END
ENDPAGE ENDPAGE
PAGE "Istruzioni" -1 -1 78 20 PAGE "Istruzioni" -1 -1 78 20

View File

@ -609,7 +609,13 @@ const TString& TPrint_saldana_recordset::crea_select(const int logicnum)
} }
break; break;
} }
if (_contsep.full())
{
TString clause = SALDANA_CONTSEP;
clause << "=\"" << _contsep << "\"";
ca_append_and(select, clause);
}
return get_tmp_string() = select; return get_tmp_string() = select;
} }
@ -877,8 +883,8 @@ void TPrint_saldana_recordset::elabora_rmovana(TAssoc_array* cms, const TDate& d
const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms); const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms);
const int indice = ricava_sezione_di_stampa(rec_commesse, datainiesc, datafinesc); const int indice = ricava_sezione_di_stampa(rec_commesse, datainiesc, datafinesc);
//solo le righe con commessa buona (indice >= 0) vengono considerate //solo le righe con commessa buona (indice >= 0) vengono considerate ed eventualmente i movimenti con un codice di contabilità separata specifico
if (indice >= 0) if (indice >= 0 && (movana.get(MOVANA_CONTSEP) == _contsep))
{ {
//ci sono filtri o raggruppamenti per fase o centro di costo? //ci sono filtri o raggruppamenti per fase o centro di costo?
const TString& fase = rmovana.get(RMOVANA_CODFASE); const TString& fase = rmovana.get(RMOVANA_CODFASE);
@ -969,11 +975,13 @@ void TPrint_saldana_recordset::elabora_rmovana(TAssoc_array* cms, const TDate& d
rec_commesse.get_date(COMMESSE_PROROGA)); rec_commesse.get_date(COMMESSE_PROROGA));
TRectype saldana(LF_SALDANA); TRectype saldana(LF_SALDANA);
saldana.put(SALDANA_ANNO, _anno); saldana.put(SALDANA_ANNO, _anno);
saldana.put(SALDANA_CONTO, conto_anale); saldana.put(SALDANA_CONTO, conto_anale);
saldana.put(SALDANA_COSTO, cdc); saldana.put(SALDANA_COSTO, cdc);
saldana.put(SALDANA_COMMESSA, codcms); saldana.put(SALDANA_COMMESSA, codcms);
saldana.put(SALDANA_FASE, fase); saldana.put(SALDANA_FASE, fase);
saldana.put(SALDANA_CONTSEP, _contsep);
switch(tipomov) switch(tipomov)
{ {
@ -1712,4 +1720,11 @@ void TPrint_saldana_recordset::set_filter(const TMask& msk, const char * curr_fa
break; break;
} */ } */
} }
TEdit_field * csep = (TEdit_field *)msk.find_by_id(F_CONTSEP);
if (csep != nullptr)
_contsep = csep->get();
else
_contsep = "";
} }

View File

@ -72,6 +72,7 @@ class TPrint_saldana_recordset : public TRecordset
TDate _datacalcolo; TDate _datacalcolo;
TString16 _fase; TString16 _fase;
TString80 _cdc; TString80 _cdc;
TString16 _contsep;
int _tipo; int _tipo;
int _anno; int _anno;
@ -140,7 +141,7 @@ protected:
public: public:
virtual void set_filter(const TMask& msk, const char * curr_fase = "", const char * curr_cdc =""); virtual void set_filter(const TMask& msk, const char * curr_fase = "", const char * curr_cdc ="");
TPrint_saldana_recordset(int tipo) : _tipo(tipo) { } TPrint_saldana_recordset(int tipo, const char * curr_contsep = "") : _tipo(tipo), _contsep(curr_contsep) { }
}; };
#endif #endif

View File

@ -5,7 +5,6 @@
#define F_RAGSOC 102 #define F_RAGSOC 102
#define F_DATASTAMPA 103 #define F_DATASTAMPA 103
#define F_ESERCIZIO 104 #define F_ESERCIZIO 104
#define F_REPORT 105
#define F_INIZIO_ES 106 #define F_INIZIO_ES 106
#define F_FINE_ES 107 #define F_FINE_ES 107
#define F_TIPOSTIMA 108 #define F_TIPOSTIMA 108
@ -23,6 +22,9 @@
#define F_STAMPA_SINTETICA 119 #define F_STAMPA_SINTETICA 119
#define F_INTESTAZIONE_MINIMA 120 #define F_INTESTAZIONE_MINIMA 120
#define F_CONTSEP 122
#define F_DESCONTSEP 123
/* campi per la generazione automatica /* campi per la generazione automatica
#define F_FASE1 112 #define F_FASE1 112
#define F_FASE2 113 #define F_FASE2 113

View File

@ -2276,7 +2276,7 @@ const char * TAnal_mov::row_code(int row) const
} }
return get_tmp_string() = code; return get_tmp_string() = code;
} }
void TAnal_mov::saldo_set_reset(const TRectype& row, bool reset) void TAnal_mov::saldo_set_reset(const TRectype& row, const char * contsep, bool reset)
{ {
const int dec = TCurrency::get_firm_dec(); const int dec = TCurrency::get_firm_dec();
const TImporto imp_row(row.get_char(RMOVANA_SEZIONE), row.get_real(RMOVANA_IMPORTO)); const TImporto imp_row(row.get_char(RMOVANA_SEZIONE), row.get_real(RMOVANA_IMPORTO));
@ -2288,6 +2288,8 @@ void TAnal_mov::saldo_set_reset(const TRectype& row, bool reset)
annies.add(esc_iniziale); annies.add(esc_iniziale);
const char tipomov = get_char(MOVANA_TIPOMOV); const char tipomov = get_char(MOVANA_TIPOMOV);
if (*contsep != '\0' && tipomov != '\0')
int i = 1;
// i movimenti analitici possono avere una data di scadenza come la mozzarella // i movimenti analitici possono avere una data di scadenza come la mozzarella
const TDate datacomp = get_date(MOVANA_DATACOMP); const TDate datacomp = get_date(MOVANA_DATACOMP);
TDate datafcomp = get_date(MOVANA_DATAFCOMP); TDate datafcomp = get_date(MOVANA_DATAFCOMP);
@ -2315,12 +2317,14 @@ void TAnal_mov::saldo_set_reset(const TRectype& row, bool reset)
} }
TToken_string key; TToken_string key;
key.add(tipomov); key.add(tipomov);
key.add(esc_iniziale); key.add(esc_iniziale);
key.add(row.get(RMOVANA_CODCCOSTO)); key.add(row.get(RMOVANA_CODCCOSTO));
key.add(row.get(RMOVANA_CODCMS)); key.add(row.get(RMOVANA_CODCMS));
key.add(row.get(RMOVANA_CODFASE)); key.add(row.get(RMOVANA_CODFASE));
key.add(row.get(RMOVANA_CODCONTO)); key.add(row.get(RMOVANA_CODCONTO));
key.add(contsep);
if (annies.items() > 1) //saldi spammati su piu' anni if (annies.items() > 1) //saldi spammati su piu' anni
{ {
@ -2418,10 +2422,14 @@ void TAnal_mov::load_saldi(bool reset)
} }
const TRecord_array& a = body(LF_RMOVANA); const TRecord_array& a = body(LF_RMOVANA);
TString contsep = get(MOVANA_CONTSEP);
for (int i = a.last_row(); i > 0; i--) for (int i = a.last_row(); i > 0; i--)
{ {
const TRectype& row = a[i]; const TRectype& row = a[i];
saldo_set_reset(row, reset); //aggiunge o toglie la riga corrente ai saldi in memoria saldo_set_reset(row, "", reset); //aggiunge o toglie la riga corrente ai saldi in memoria
if (contsep.full())
saldo_set_reset(row, contsep, reset); //aggiunge o toglie la riga corrente ai saldi in memoria con contabilità separata
} }
} }
@ -2469,6 +2477,7 @@ bool TAnal_mov::save_saldi(const int annoes)
saldi.put(SALDANA_COMMESSA, key.get(3)); saldi.put(SALDANA_COMMESSA, key.get(3));
saldi.put(SALDANA_FASE, key.get(4)); saldi.put(SALDANA_FASE, key.get(4));
saldi.put(SALDANA_CONTO, key.get(5)); saldi.put(SALDANA_CONTO, key.get(5));
saldi.put(SALDANA_CONTSEP, key.get(6));
int err = saldi.read(_isequal, _lock); int err = saldi.read(_isequal, _lock);
if (err != NOERR) if (err != NOERR)
@ -2484,6 +2493,7 @@ bool TAnal_mov::save_saldi(const int annoes)
saldi.put(SALDANA_COMMESSA, key.get(3)); saldi.put(SALDANA_COMMESSA, key.get(3));
saldi.put(SALDANA_FASE, key.get(4)); saldi.put(SALDANA_FASE, key.get(4));
saldi.put(SALDANA_CONTO, key.get(5)); saldi.put(SALDANA_CONTO, key.get(5));
saldi.put(SALDANA_CONTSEP, key.get(6));
err = saldi.write(); err = saldi.write();
if (err != NOERR) if (err != NOERR)
cantwrite_box(saldi.name()); cantwrite_box(saldi.name());
@ -3068,7 +3078,7 @@ TObject* TCache_ripartizioni::key2obj(const char* key)
TRectype & rec = (*rip)[i]; TRectype & rec = (*rip)[i];
const TAnal_bill bill(rec); const TAnal_bill bill(rec);
//calcola il saldo usando come parametri (cms/cdc/fsc/conto) quelli che trova sulla riga di ripartizione //calcola il saldo usando come parametri (cms/cdc/fsc/conto) quelli che trova sulla riga di ripartizione
const TSaldanal& s = ca_saldo(bill, _dal, _al, _saldanal_consuntivo); const TSaldanal& s = ca_saldo(bill, "", _dal, _al, _saldanal_consuntivo); // qui
//in base a C/R stabilisce quali saldi considerare e in quale sezione normalizzare //in base a C/R stabilisce quali saldi considerare e in quale sezione normalizzare
real val; real val;
if (sezione_di_riferimento == 'R') //in Ricavi normalizza in Avere if (sezione_di_riferimento == 'R') //in Ricavi normalizza in Avere

View File

@ -188,7 +188,7 @@ class TAnal_mov : public TMultiple_rectype
TAssoc_array _saldind; TAssoc_array _saldind;
protected: protected:
void saldo_set_reset(const TRectype& row, bool reset); void saldo_set_reset(const TRectype& row, const char * contsep, bool reset);
void load_saldi(bool reset); void load_saldi(bool reset);
void kill_saldi() { _saldi.destroy(); } void kill_saldi() { _saldi.destroy(); }
void update_saldi(bool kill); void update_saldi(bool kill);

View File

@ -163,7 +163,7 @@ const TVariant& TPconana_recordset::get(const char* field) const
} }
((TAnal_bill&)_bill).set_conto(get(PCONANA_CODCONTO).as_string()); ((TAnal_bill&)_bill).set_conto(get(PCONANA_CODCONTO).as_string());
const TSaldanal& s = ca_saldo(_bill, _dal, _al, tipimov); const TSaldanal& s = ca_saldo(_bill, "", _dal, _al, tipimov); //qui
TVariant& var = get_tmp_var(); TVariant& var = get_tmp_var();
if (sub_field == "INI_DARE") if (sub_field == "INI_DARE")
@ -250,12 +250,15 @@ bool TPconana_recordset::valid_record(const TRelation& rel) const
conto = curr.get(PCONANA_CODCONTO); conto = curr.get(PCONANA_CODCONTO);
if (conto.len() <= _conto_minlen) if (conto.len() <= _conto_minlen)
return false; return false;
if (_contsep.full() && _contsep != cache().get(LF_MOVANA, curr.get(RMOVANA_NUMREG), MOVANA_CONTSEP))
return false;
} }
if (_movimentati || _nonnulli) if (_movimentati || _nonnulli)
{ {
((TAnal_bill&)_bill).set_conto(conto); ((TAnal_bill&)_bill).set_conto(conto);
const TSaldanal& s = ca_saldo(_bill, _dal, _al, _tipimov); const TSaldanal& s = ca_saldo(_bill, _contsep, _dal, _al, _tipimov);
if (_movimentati && !s._movimentato) if (_movimentati && !s._movimentato)
return false; return false;
if (_nonnulli && s._fin.is_zero()) if (_nonnulli && s._fin.is_zero())
@ -324,7 +327,7 @@ void TPconana_recordset::set_tipo(char tipo)
void TPconana_recordset::set_filter(char tipo, const char* da_conto, const char* a_conto, void TPconana_recordset::set_filter(char tipo, const char* da_conto, const char* a_conto,
const char* costo, const char* commessa, const char* fase, const char* costo, const char* commessa, const char* fase,
const TDate& dal, const TDate& al, const char * contsep, const TDate& dal, const TDate& al,
word tipimov, bool movimentati, bool nonnulli) word tipimov, bool movimentati, bool nonnulli)
{ {
set_tipo(tipo); set_tipo(tipo);
@ -343,6 +346,7 @@ void TPconana_recordset::set_filter(char tipo, const char* da_conto, const char*
_bill.set_costo(costo); _bill.set_costo(costo);
_bill.set_commessa(commessa); _bill.set_commessa(commessa);
_bill.set_fase(fase); _bill.set_fase(fase);
_contsep = contsep;
} }
TPconana_recordset::TPconana_recordset(char tipo) : TISAM_recordset("USE PCONANA") TPconana_recordset::TPconana_recordset(char tipo) : TISAM_recordset("USE PCONANA")
@ -771,7 +775,7 @@ protected:
bool saldi(const TAnal_bill& bill, const TDate& dal, const TDate& al, word tipo, TSaldanal& s); bool saldi(const TAnal_bill& bill, const TDate& dal, const TDate& al, word tipo, TSaldanal& s);
public: public:
const TSaldanal& saldo(const TAnal_bill& bill, const TDate& dal, const TDate& al, word tipi = 0x1); const TSaldanal& saldo(const TAnal_bill& bill, const char * contsep, const TDate& dal, const TDate& al, word tipi = 0x1);
TSaldi_cache(); TSaldi_cache();
}; };
@ -1108,7 +1112,7 @@ TObject* TSaldi_cache::key2obj(const char* key)
return s; return s;
} }
const TSaldanal& TSaldi_cache::saldo(const TAnal_bill& bill, const TDate& dal, const TDate& al, word tipi) const TSaldanal& TSaldi_cache::saldo(const TAnal_bill& bill, const char * contsep, const TDate& dal, const TDate& al, word tipi)
{ {
TToken_string key; TToken_string key;
key.add(bill.conto(), 0); key.add(bill.conto(), 0);
@ -1118,6 +1122,7 @@ const TSaldanal& TSaldi_cache::saldo(const TAnal_bill& bill, const TDate& dal, c
key.add(dal, 4); key.add(dal, 4);
key.add(al, 5); key.add(al, 5);
key.add(tipi, 6); key.add(tipi, 6);
key.add(contsep, 7);
return *(const TSaldanal*)objptr(key); return *(const TSaldanal*)objptr(key);
} }
@ -1125,7 +1130,7 @@ const TSaldanal& TSaldi_cache::saldo(const TAnal_bill& bill, const TDate& dal, c
TSaldi_cache::TSaldi_cache() : TCache(3881) // Numero primo TSaldi_cache::TSaldi_cache() : TCache(3881) // Numero primo
{ } { }
const TSaldanal& ca_saldo(const TAnal_bill& bill, const TDate& dal, const TDate& al, word tipi) const TSaldanal& ca_saldo(const TAnal_bill& bill, const char * contsep, const TDate& dal, const TDate& al, word tipi)
{ {
static TSaldi_cache* cache = nullptr; static TSaldi_cache* cache = nullptr;
@ -1133,7 +1138,7 @@ const TSaldanal& ca_saldo(const TAnal_bill& bill, const TDate& dal, const TDate&
SAFE_DELETE(cache); SAFE_DELETE(cache);
if (cache == nullptr) if (cache == nullptr)
cache = new TSaldi_cache; cache = new TSaldi_cache;
return cache->saldo(bill, dal, al, tipi); return cache->saldo(bill, contsep, dal, al, tipi);
} }
@ -1247,6 +1252,22 @@ void TAnal_report_mask::create_sheet(short sheet_id)
} }
} }
const TString& TAnal_report_mask::get_report_class() const
{
TReport_select * rs = (TReport_select *)efield(DLG_REPORT).browse();
return rs->get_report_class();
}
void TAnal_report_mask::set_report_class() const
{
TReport_select * rs = (TReport_select *)efield(DLG_REPORT).browse();
if (rs != nullptr)
rs->set_report_class(get_report_class());
}
int TAnal_report_mask::get_row_bill(TSheet_field& sf, int r, TAnal_bill& bill) int TAnal_report_mask::get_row_bill(TSheet_field& sf, int r, TAnal_bill& bill)
{ {
int flag = 0; int flag = 0;

View File

@ -91,7 +91,7 @@ public:
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
// Metodi sciolti ma decisivi // Metodi sciolti ma decisivi
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
const TSaldanal& ca_saldo(const TAnal_bill& bill, const TDate& dal, const TDate& al, word tipi = _saldanal_consuntivo); const TSaldanal& ca_saldo(const TAnal_bill& bill, const char * contsep, const TDate& dal, const TDate& al, word tipi = _saldanal_consuntivo);
TImporto ca_get_imp(const TRecordset& rs, const char* sez, const char* imp); TImporto ca_get_imp(const TRecordset& rs, const char* sez, const char* imp);
@ -103,7 +103,7 @@ class TPconana_recordset : public TISAM_recordset
{ {
char _tipo; char _tipo;
word _tipimov; word _tipimov;
TString _da_conto, _a_conto; TString _da_conto, _a_conto, _contsep;
int _conto_minlen; int _conto_minlen;
TAnal_bill _bill; TAnal_bill _bill;
TDate _dal, _al; TDate _dal, _al;
@ -124,7 +124,7 @@ public:
void set_tipo(char tipo); void set_tipo(char tipo);
void set_filter(char tipo, const char* da_conto, const char* a_conto, void set_filter(char tipo, const char* da_conto, const char* a_conto,
const char* costo, const char* commessa, const char* fase, const char* costo, const char* commessa, const char* fase,
const TDate& dal, const TDate& al, const char * contsep, const TDate& dal, const TDate& al,
word tipimov, bool movimentati, bool nonnulli); word tipimov, bool movimentati, bool nonnulli);
TPconana_recordset(char tipo = ' '); TPconana_recordset(char tipo = ' ');
}; };
@ -165,10 +165,12 @@ class TAnal_report_mask : public TAutomask
protected: protected:
void create_sheet(short sheet_id); void create_sheet(short sheet_id);
int create_sheet_fields(short sheet_id, int lf, int& y, short& dlg); int create_sheet_fields(short sheet_id, int lf, int& y, short& dlg);
virtual void set_report_class() const;
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public: public:
virtual const TString& get_report_class() const;
int get_row_bill(TSheet_field& sf, int r, TAnal_bill& bill); int get_row_bill(TSheet_field& sf, int r, TAnal_bill& bill);
int set_row_bill(TSheet_field& sf, int r, const TAnal_bill& bill); int set_row_bill(TSheet_field& sf, int r, const TAnal_bill& bill);
bool esistono_riclassificazioni() const; bool esistono_riclassificazioni() const;

View File

@ -1,3 +1,3 @@
151 151
0 0
$saldana|0|0|189|0|Saldi contabilita' analitica||| $saldana|0|0|195|0|Saldi contabilita' analitica|||

View File

@ -1,10 +1,11 @@
151 151
17 18
ANNO|9|4|0|Codice esercizio ANNO|9|4|0|Codice esercizio
COSTO|1|20|0|Centro Di costo COSTO|1|20|0|Centro Di costo
COMMESSA|1|20|0|Commessa COMMESSA|1|20|0|Commessa
FASE|1|10|0|Fase FASE|1|10|0|Fase
CONTO|1|20|0|Conto CONTO|1|20|0|Conto
CONTSEP|1|6|0|Contabilità separata
SEZIONE|7|1|0|Sezione (Normale) SEZIONE|7|1|0|Sezione (Normale)
SALDO|4|18|3|Saldo (Normale) SALDO|4|18|3|Saldo (Normale)
SEZIONEP|7|1|0|Sezione (Preventivo) SEZIONEP|7|1|0|Sezione (Preventivo)
@ -18,5 +19,5 @@ SALDOIV|4|18|3|Saldo Indiretto (Preventivo)
SEZIONEIP|7|1|0|Sezione Indiretto (Variazione Preventivo) SEZIONEIP|7|1|0|Sezione Indiretto (Variazione Preventivo)
SALDOIP|4|18|3|Saldo Indiretto (Variazione Preventivo) SALDOIP|4|18|3|Saldo Indiretto (Variazione Preventivo)
2 2
ANNO+CONTO+COSTO+COMMESSA+FASE| ANNO+CONTO+COSTO+COMMESSA+FASE+CONTSEP|
CONTO+ANNO+COSTO+COMMESSA+FASE| CONTO+ANNO+COSTO+COMMESSA+FASE+CONTSEP|X

View File

@ -6,6 +6,7 @@
#define SALDANA_COMMESSA "COMMESSA" #define SALDANA_COMMESSA "COMMESSA"
#define SALDANA_FASE "FASE" #define SALDANA_FASE "FASE"
#define SALDANA_CONTO "CONTO" #define SALDANA_CONTO "CONTO"
#define SALDANA_CONTSEP "CONTSEP"
#define SALDANA_SEZIONE "SEZIONE" #define SALDANA_SEZIONE "SEZIONE"
#define SALDANA_SALDO "SALDO" #define SALDANA_SALDO "SALDO"

View File

@ -230,9 +230,9 @@ bool TSelam_qmask::on_field_event(TOperable_field& o, TField_event e, long jolly
const TRectype & ammce = cache().get(LF_AMMCE, key); const TRectype & ammce = cache().get(LF_AMMCE, key);
if (!ammce.empty()) if (!ammce.empty())
{ {
if (ammce.get_bool(AMMCE_FZPER) == TRUE) if (ammce.get_bool(AMMCE_FZPER))
return error_box(TR("Sul cespite sono state forzate le Percentuali:\nprocedere dalla forzatura ammortamenti su cespite")); return error_box(TR("Sul cespite sono state forzate le Percentuali:\nprocedere dalla forzatura ammortamenti su cespite"));
if (ammce.get_bool(AMMCE_FZQUO) == TRUE) if (ammce.get_bool(AMMCE_FZQUO))
return error_box(TR("Sul cespite sono state forzate le Quote:\nprocedere dalla forzatura ammortamenti su cespite")); return error_box(TR("Sul cespite sono state forzate le Quote:\nprocedere dalla forzatura ammortamenti su cespite"));
} }

View File

@ -120,6 +120,7 @@ bool TCalcamm::calcola_ammortamenti()
break; break;
TCespite cespite(cur.curr()); TCespite cespite(cur.curr());
for (int tipo_sit = 1; tipo_sit <= 3; tipo_sit++) for (int tipo_sit = 1; tipo_sit <= 3; tipo_sit++)
cespite.calc_amm(tipo_sit, data_limite, true); cespite.calc_amm(tipo_sit, data_limite, true);
} }

View File

@ -31,14 +31,15 @@
//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
class TStampa_sintetica_mask : public TAutomask class TStampa_sintetica_mask : public TAutomask
{ {
bool _preview; // bool _preview;
bool _excel; bool _excel;
protected: protected:
bool on_field_event(TOperable_field& o, TField_event e, long jolly); bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public: public:
bool preview() const { return _preview; } // bool preview() const { return _preview; }
bool excel() const { return _excel; } bool excel() const { return _excel; }
void set_excel(bool on) { _excel = on; }
TStampa_sintetica_mask(); TStampa_sintetica_mask();
}; };
@ -82,19 +83,19 @@ bool TStampa_sintetica_mask::on_field_event(TOperable_field& o, TField_event e,
} }
} }
break; break;
case DLG_PRINT: /* case DLG_PRINT:
if (e == fe_button) if (e == fe_button)
{ {
_preview = false; // _preview = false;
_excel = false; // _excel = false;
} }
break; break;
case DLG_PREVIEW: case DLG_PREVIEW:
if (e == fe_button) if (e == fe_button)
{ {
_preview = true; // _preview = true;
_excel = false; // _excel = false;
stop_run(K_ENTER); // stop_run(K_ENTER);
} }
break; break;
case DLG_EXPORT_EXCEL: case DLG_EXPORT_EXCEL:
@ -103,13 +104,13 @@ bool TStampa_sintetica_mask::on_field_event(TOperable_field& o, TField_event e,
_excel = true; _excel = true;
stop_run(K_ENTER); stop_run(K_ENTER);
} }
break; break; */
default: break; default: break;
} }
return ok; return ok;
} }
TStampa_sintetica_mask::TStampa_sintetica_mask() : TAutomask("ce3900"), _preview(false), _excel(false) TStampa_sintetica_mask::TStampa_sintetica_mask() : TAutomask("ce3900"), _excel(false) //, _preview(false)
{ {
} }
@ -201,10 +202,10 @@ void TStampa_sintetica_rep::set_filter(const TStampa_sintetica_mask& msk)
const bool shimp = (!msk.excel()) && msk.get_bool(F_TOTIMP); const bool shimp = (!msk.excel()) && msk.get_bool(F_TOTIMP);
const bool shloc = (!msk.excel()) && msk.get_bool(F_TOTLOC); const bool shloc = (!msk.excel()) && msk.get_bool(F_TOTLOC);
section('H', 2).show(shcat);
section('H', 3).show(shimp); section('H', 3).show(shimp);
section('H', 4).show(shloc); section('H', 4).show(shloc);
section('F', 2).show(shcat); section('F', 2).show(shcat);
section('H', 2).show(shcat);
section('F', 3).show(shimp); section('F', 3).show(shimp);
section('F', 4).show(shloc); section('F', 4).show(shloc);
@ -396,10 +397,12 @@ protected:
void TStampa_sintetica::main_loop() void TStampa_sintetica::main_loop()
{ {
TStampa_sintetica_mask mask; TStampa_sintetica_mask mask;
KEY k;
// mask.set(F_CALCOLO, "X"); // mask.set(F_CALCOLO, "X");
while (mask.run() == K_ENTER) while ((k = mask.run()) != K_QUIT)
{ {
mask.set_excel(k == K_EXCEL);
// Esecuzione calcolo globale // Esecuzione calcolo globale
if (mask.get_bool(F_CALCOLO)) if (mask.get_bool(F_CALCOLO))
{ {
@ -427,7 +430,7 @@ void TStampa_sintetica::main_loop()
book.export_excel(out, false, true, true); book.export_excel(out, false, true, true);
} }
else else
if (mask.preview()) if (k == K_VISUALIZE)
book.preview(); book.preview();
else else
book.print(); book.print();

View File

@ -1,6 +1,7 @@
#include "cg0800a.h" #include "cg0800a.h"
TOOLBAR "topbar" 0 0 0 2 TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_PRINT 2 2 BUTTON DLG_PRINT 2 2
BEGIN BEGIN
PROMPT 1 1 "Stampa" PROMPT 1 1 "Stampa"

View File

@ -59,7 +59,7 @@ public:
TPrimanota_application::TPrimanota_application() TPrimanota_application::TPrimanota_application()
: _rel(nullptr), _mode(0), _iva(nessuna_iva), _causale(nullptr), _giornale(nullptr), : _rel(nullptr), _mode(0), _iva(nessuna_iva), _causale(nullptr), _giornale(nullptr),
_lastreg(0), _last_dreg(TODAY), _last_dcom(TODAY), _automatico(nullptr), _swap_mask(false), _is_set_fpcheck(false), _f1_ini(false), _f1_liq(false), _lastreg(0), _last_dreg(TODAY), _last_dcom(TODAY), _automatico(nullptr), _swap_mask(false), _is_set_fpcheck(false), _f1_ini(false), _f1_liq(false),
_skip_giornale_check(false), _skip_bollato_check(false) _skip_giornale_check(false), _skip_bollato_check(false), _pro_mask(nullptr)
{ {
memset(_msk, 0, sizeof(_msk)); memset(_msk, 0, sizeof(_msk));
} }
@ -439,7 +439,7 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
} }
const char sezione = rcaus->get_char(RCA_SEZIONE); const char sezione = rcaus->get_char(RCA_SEZIONE);
const TImporto zero('D', ZERO); TImporto zero('D', ZERO);
const TString80 desc(causale().desc_agg(i)); const TString80 desc(causale().desc_agg(i));
if (nriga == 1) m->set(F_DESCR, desc); if (nriga == 1) m->set(F_DESCR, desc);
@ -697,7 +697,7 @@ void TPrimanota_application::init_mask(TMask& m)
_sal_dirty = false; // Azzero il flag di modifica del saldaconto _sal_dirty = false; // Azzero il flag di modifica del saldaconto
fill_sheet(m); // Riempe righe contabili coi conti della causale fill_sheet(m); // Riempe righe contabili coi conti della causale
m.hide(F_LINKDOC); m.hide(F_LINKDOC);
set_has_f1_db(&m); has_f1_db(m);
} }
void TPrimanota_application::init_query_mode(TMask& m) void TPrimanota_application::init_query_mode(TMask& m)
@ -736,7 +736,7 @@ void TPrimanota_application::init_query_mode(TMask& m)
m.set(F_CODCAUS, ini.get(MOV_CODCAUS)); m.set(F_CODCAUS, ini.get(MOV_CODCAUS));
m.send_key(K_SPACE, DLG_NEWREC); m.send_key(K_SPACE, DLG_NEWREC);
} }
set_has_f1_db(&m); has_f1_db(m);
} }
@ -1491,18 +1491,14 @@ void TPrimanota_application::check_saldi()
void TPrimanota_application::write_fppro() void TPrimanota_application::write_fppro()
{ {
#ifdef DBG if (main_app().has_module(FPAUT) && !ini_get_bool(CONFIG_INSTALL, "Main", "SkipFPPRO"))
if (!ini_get_bool(CONFIG_INSTALL, "Main", "SkipFPPRO"))
{ {
#endif
// Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov // Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov
if (save_fppro() > 0 && !save_dbmov()) if (save_fppro() > 0 && !save_dbmov())
message_box( message_box(
"ATTENZIONE: non e' stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n" "ATTENZIONE: non e' stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n"
"Movimento registrato senza collegamento ai documenti in ingresso."); "Movimento registrato senza collegamento ai documenti in ingresso.");
#ifdef DBG
} }
#endif
} }
bool TPrimanota_application::has_tot_doc(TToken_string& fppro_keys) bool TPrimanota_application::has_tot_doc(TToken_string& fppro_keys)
@ -1559,7 +1555,7 @@ void TPrimanota_application::set_movcoll(const long movcoll, const long numreg)
} }
int TPrimanota_application::controlli_f1(const TMask& m) int TPrimanota_application::controlli_f1(const TMask& m)
{ {
if (m.find_by_id(F_PROKEY) != nullptr && m.get(F_PROKEY).full() && has_f1_db((TMask*)&m) && fp_db().sq_is_connect() && check_causale(m.get(F_CODCAUS))) if (iva_mask(m) && m.get(F_PROKEY).full() && has_f1_db(m) && fp_db().sq_is_connect() && check_causale(m.get(F_CODCAUS)))
{ {
TToken_string keys(m.get(F_PROKEY), ';'); TToken_string keys(m.get(F_PROKEY), ';');
const TDate dataoraric = fppro_db().set_keys(keys).get_dataorarioric(); const TDate dataoraric = fppro_db().set_keys(keys).get_dataorarioric();
@ -1787,7 +1783,7 @@ void TPrimanota_application::clean_fppro()
// Controlli: solo in mod modifica; che abbia fp-f1 (no F8); che non sono in salvataggio // Controlli: solo in mod modifica; che abbia fp-f1 (no F8); che non sono in salvataggio
if (_mode != MODE_MOD if (_mode != MODE_MOD
|| !has_f1_db(&msk) || !has_f1_db(msk)
|| last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT && !scollega()) || last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT && !scollega())
return; return;
@ -1802,27 +1798,17 @@ void TPrimanota_application::clean_fppro()
fp_db().sq_commit(); fp_db().sq_commit();
} }
void TPrimanota_application::set_has_f1_db(TMask* m) bool TPrimanota_application::has_f1() const
{ {
if (m->find_by_id(F_DATAREG) != nullptr && !m->get(F_DATAREG).empty()) return has_module(F1AUT) && get_db_indirizzo().full();
{
if (TDate(m->get(F_DATAREG)) >= TDate(get_data_start_fatt()))
_isf1 = has_module(F1AUT) && !get_db_indirizzo().empty();
else
_isf1 = false;
_is_set_fpcheck = true;
}
else if (!_is_set_fpcheck)
{
_isf1 = false;
_is_set_fpcheck = true;
}
} }
bool TPrimanota_application::has_f1_db(TMask* m) bool TPrimanota_application::has_f1_db(const TMask & m)
{ {
set_has_f1_db(m); const TDate datareg = m.get_date(F_DATAREG);
return _isf1;
_is_set_fpcheck = true;
return datareg.ok() && (datareg >= get_data_start_fatt()) && has_f1();
} }
bool TPrimanota_application::remove() bool TPrimanota_application::remove()
@ -2671,7 +2657,7 @@ int TPrimanota_application::save_fppro()
TMask& msk = curr_mask(); TMask& msk = curr_mask();
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP // Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
if (!has_f1_db(&msk)) if (!has_f1_db(msk))
return pro_nofp; return pro_nofp;
// Anzitutto guardo la modalita' in cui sono // Anzitutto guardo la modalita' in cui sono
@ -2736,7 +2722,7 @@ int TPrimanota_application::save_fppro()
items = fp_db().sq_items(); items = fp_db().sq_items();
} }
if(has_f1_db(&msk) && items != 1) if(has_f1_db(msk) && items != 1)
{ {
const bool forza = noyes_box("Attenzione, al movimento non e' stato abbinato nessun documento elettronico.\n" const bool forza = noyes_box("Attenzione, al movimento non e' stato abbinato nessun documento elettronico.\n"
"Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n" "Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n"
@ -2850,6 +2836,7 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action)
const BOOLEAN bModify = xvt_str_same(action, "Modify"); const BOOLEAN bModify = xvt_str_same(action, "Modify");
TFilename intrini; TFilename intrini;
intrini.tempdir(); intrini.tempdir();
intrini.add("ActIntra.ini"); intrini.add("ActIntra.ini");

View File

@ -13,12 +13,14 @@ BEGIN
PROMPT 2 1 "Contabilizzaz." PROMPT 2 1 "Contabilizzaz."
PICTURE TOOL_EXPORT PICTURE TOOL_EXPORT
MODULE F1 MODULE F1
MESSAGE EXIT,K_ENTER
END END
BUTTON DLG_LINK 2 2 BUTTON DLG_LINK 2 2
BEGIN BEGIN
PROMPT 3 1 "Collega in Prima nota" PROMPT 3 1 "Collega in Prima nota"
PICTURE TOOL_LINK PICTURE TOOL_LINK
MESSAGE EXIT,K_ENTER
END END
BUTTON DLG_QUIT 2 2 BUTTON DLG_QUIT 2 2

View File

@ -219,7 +219,10 @@ TSheet_field& TPrimanota_application::cgs() const
void TPrimanota_application::set_cgs_imp(int n, const TImporto& imp) void TPrimanota_application::set_cgs_imp(int n, const TImporto& imp)
{ {
TSheet_field& s = cgs(); TSheet_field& s = cgs();
imp.add_to(s.row(n), 0); TImporto i(imp);
i.normalize();
i.add_to(s.row(n), 0);
s.force_update(n); s.force_update(n);
} }
@ -371,7 +374,7 @@ void TPrimanota_application::reset_sheet_row(TSheet_field& s, int n)
s.destroy(n); // Remove line n s.destroy(n); // Remove line n
} }
int TPrimanota_application::set_cgs_row(int n, const TImporto& imp, int TPrimanota_application::set_cgs_row(int n, TImporto& importo,
const TBill& conto, const char* desc, const TBill& conto, const char* desc,
char tipo, const char* cms, const char* fas) char tipo, const char* cms, const char* fas)
{ {
@ -380,7 +383,8 @@ int TPrimanota_application::set_cgs_row(int n, const TImporto& imp,
TToken_string& row = cg.row(n); TToken_string& row = cg.row(n);
row.cut(0); row.cut(0);
imp.add_to(row, 0); importo.normalize();
importo.add_to(row, 0);
row.add(conto.string(0x3)); row.add(conto.string(0x3));
row.add(""); // Codice decrizione row.add(""); // Codice decrizione
row.add(desc); // Descrizione aggiuntiva row.add(desc); // Descrizione aggiuntiva
@ -1536,7 +1540,7 @@ void TPrimanota_application::add2cg_row(TSheet_field& s, TToken_string & row, TS
{ {
const TBill conto(row, cid2index(IVA_TIPO), 0x1); const TBill conto(row, cid2index(IVA_TIPO), 0x1);
const int pos = bill2pos(conto, cgrowtype_imponibile); // Riga in cui andra' l'imponibile const int pos = bill2pos(conto, cgrowtype_imponibile); // Riga in cui andra' l'imponibile
const TImporto imp = a.real2imp(d > 0 ? imp_det : imp_ind, tipod); // Imponibile TImporto imp = a.real2imp(d > 0 ? imp_det : imp_ind, tipod); // Imponibile
if (pos >= 0) // Se il conto esisteva anche prima ... if (pos >= 0) // Se il conto esisteva anche prima ...
{ {
@ -1761,7 +1765,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& s, int r, KEY k)
real pimponibile(pag.imponibile(inv)); real pimponibile(pag.imponibile(inv));
pimponibile.round(pag.round(inv)); pimponibile.round(pag.round(inv));
if ((pimposta != imposta || pimponibile != imponibile) && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back()))) if ((pimposta != imposta || pimponibile != imponibile) && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare())))
a.set_scadenze(m); // Ricalcola rate a.set_scadenze(m); // Ricalcola rate
} }
} }
@ -2842,7 +2846,7 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
TImporto imp = real2imp(m.get_real(F_TOTALE), cgrowtype_totale); TImporto imp = real2imp(m.get_real(F_TOTALE), cgrowtype_totale);
set_cgs_row(riga_totale, imp.normalize(), nuovo, descr, cgrowtype_totale); set_cgs_row(riga_totale, imp, nuovo, descr, cgrowtype_totale);
} }
calcola_imp(); // Ricalcola totale IVA calcola_imp(); // Ricalcola totale IVA
calcola_saldo(); // Ricalcola sbilanci calcola_saldo(); // Ricalcola sbilanci
@ -3550,21 +3554,11 @@ HIDDEN void inventa_cambio_intra(TMask& m)
{ {
const TString& codval = m.get(F_VALUTAINTRA); const TString& codval = m.get(F_VALUTAINTRA);
if (codval.not_empty() && TCurrency::get_firm_val() != codval) if (codval.full() && TCurrency::get_firm_val() != codval)
{ {
TTable cam("CAM"); const TRectype & cam =cache().get("CAM", codval);
cam.put("CODTAB", codval); if (cam.full())
const int err = cam.read(_isgteq);
bool yes = err != NOERR;
if (!yes)
{
TString16 v = cam.get("CODTAB");
v.cut(3).rtrim();
yes = v != codval;
}
if (yes)
m.set(F_CAMBIOINTRA, cache().get("%VAL", codval, "S4")); m.set(F_CAMBIOINTRA, cache().get("%VAL", codval, "S4"));
} }
} }
@ -3891,71 +3885,74 @@ bool TPrimanota_application::quadratura_handler(TMask_field& f, KEY key)
return true; return true;
} }
void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const TPro_msk & msk)
{ {
TSheet_field& sf = cg_msk.sfield(F_SHEETIVA); TSheet_field& sf = cg_msk.sfield(F_SHEETIVA);
const vector<TPro_msk::riga_iva_s>& righe = msk->get_righeiva(); const TString_array& righe = msk.get_righeiva();
int i = 0;
for (auto it = righe.begin(); it != righe.end(); ++it) FOR_EACH_ARRAY_ITEM( righe, r, obj)
{ {
if(it->imponibile != 0 || it->imposta != 0) TToken_string & riga = STRING_TOKEN(obj);
{ const real imponibile = riga.get_real(FPRI_IMPONIBILE);
TToken_string& row = sf.row(i); const real imposta = riga.get_real(FPRI_IMPOSTA);
sf.notify(i, K_SPACE); if(imponibile != ZERO || imposta != ZERO)
row.add(it->imponibile, cid2index(IVA_IMPONIBILE)); {
row.add(it->imposta, cid2index(IVA_IMPOSTA)); TToken_string& row = sf.row(r);
row.add(it->aliquota, cid2index(IVA_PERCIVA));
row.add(it->natura, cid2index(IVA_NATURIVA)); sf.notify(r, K_SPACE);
sf.notify(i, K_ENTER); sf.set_row_cell(IVA_IMPONIBILE, imponibile, r);
i++; sf.set_row_cell(IVA_IMPOSTA, imposta, r);
sf.set_row_cell(IVA_PERCIVA, riga.get(FPRI_ALIQUOTA), r);
sf.set_row_cell(IVA_NATURIVA, riga.get(FPRI_NATURA), r);
sf.notify(r, K_ENTER);
} }
} }
} }
bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk) bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const TPro_msk & msk)
{ {
TSheet_field& sf = cg_msk.sfield(FS_RATESHEET); TSheet_field& sf = cg_msk.sfield(FS_RATESHEET);
const int items = sf.items(); const int items = sf.items();
const vector<TPro_msk::scadenza_s>& righe = msk->get_scadenze(); const TString_array & righe = msk.get_scadenze();
int i = 0;
for (auto it = righe.begin(); it != righe.end(); ++it, ++i) FOR_EACH_ARRAY_ITEM(righe, r, obj)
{ {
TToken_string& row = app().pags().row(i); TToken_string& row = app().pags().row(r);
TToken_string & riga = STRING_TOKEN(obj);
if(i >= items) if (r >= items)
pag_notify(sf, i, K_CTRL+K_INS); pag_notify(sf, r, K_CTRL+K_INS);
pag_notify(sf, i, K_SPACE); pag_notify(sf, r, K_SPACE);
row.add(it->data, cid2index(101)); sf.set_row_cell(101, riga.get_date(FPSC_DATA), r);
row.add(it->importo, cid2index(102)); sf.set_row_cell(102, riga.get_real(FPSC_IMPORTO), r);
pag_notify(sf, i, K_ENTER); pag_notify(sf, r, K_ENTER);
} }
return !righe.empty(); return righe.items() > 0;
} }
void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk) void TPrimanota_application::write_clifo(TMask& cg_msk, const TPro_msk & msk)
{ {
bool ok = false; bool ok = false;
TLocalisamfile clifo(LF_CLIFO); TLocalisamfile clifo(LF_CLIFO);
TToken_string keys(msk->get_fpprokeys(), ';'); TToken_string keys(msk.get_fpprokeys(), ';');
TString codforn = TFppro(keys).get_codforn(); long codforn = TFppro(keys).get_codforn();
if (codforn.empty()) if (codforn == 0L)
codforn = msk->get_codforn(); codforn = msk.get_codforn();
if (codforn.empty()) if (codforn == 0L)
{ {
clifo.setkey(5); clifo.setkey(5);
clifo.put(CLI_TIPOCF, "F"); clifo.put(CLI_TIPOCF, "F");
clifo.put(CLI_PAIV, msk->get_piva()); clifo.put(CLI_PAIV, msk.get_piva());
clifo.read(); clifo.read();
ok = clifo.get(CLI_PAIV) == msk->get_piva(); ok = clifo.get(CLI_PAIV) == msk.get_piva();
if(!ok) if(!ok)
{ {
clifo.zero(); clifo.zero();
clifo.setkey(5); clifo.setkey(5);
clifo.put(CLI_TIPOCF, "F"); clifo.put(CLI_TIPOCF, "F");
clifo.put(CLI_PAIV, msk->get_piva()); clifo.put(CLI_PAIV, msk.get_piva());
clifo.put(CLI_STATOPAIV, "IT"); clifo.put(CLI_STATOPAIV, "IT");
clifo.read(); clifo.read();
} }
@ -3967,8 +3964,8 @@ void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_ms
clifo.put(CLI_CODCF, codforn); clifo.put(CLI_CODCF, codforn);
clifo.read(); clifo.read();
} }
ok = clifo.get(CLI_PAIV) == msk->get_piva(); ok = clifo.get(CLI_PAIV) == msk.get_piva();
if (ok && (cg_msk.get(F_CODCLIFOR).empty() || cg_msk.get(F_CODCLIFOR) != codforn)) if (ok && (cg_msk.get_long(F_CODCLIFOR) == 0 || cg_msk.get_long(F_CODCLIFOR) != codforn))
{ {
cg_msk.set(F_CODCLIFOR, clifo.get(CLI_CODCF)); cg_msk.set(F_CODCLIFOR, clifo.get(CLI_CODCF));
cg_msk.set(F_RAGSOCCF, clifo.get(CLI_RAGSOC)); cg_msk.set(F_RAGSOCCF, clifo.get(CLI_RAGSOC));
@ -3976,20 +3973,21 @@ void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_ms
cg_msk.set(F_PIVA, clifo.get(CLI_PAIV)); cg_msk.set(F_PIVA, clifo.get(CLI_PAIV));
cg_msk.set(F_COFI, clifo.get(CLI_COFI)); cg_msk.set(F_COFI, clifo.get(CLI_COFI));
cg_msk.set(F_CODPAG, clifo.get(CLI_CODPAG)); cg_msk.set(F_CODPAG, clifo.get(CLI_CODPAG));
TTable tab("%CPG"); tab.put("CODTAB", clifo.get(CLI_CODPAG));
tab.read(); const TRectype & tab = cache().get("%CPG", clifo.get(CLI_CODPAG));
cg_msk.set(F_DESPAG, tab.get("S0")); cg_msk.set(F_DESPAG, tab.get("S0"));
} }
} }
void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk) void TPrimanota_application::set_totale(TMask& cg_msk, TPro_msk & msk)
{ {
real totale = msk->get_totdoc(); real totale = msk.get_totdoc();
if (totale == ZERO) if (totale == ZERO)
totale = app().calcola_imp(); totale = app().calcola_imp();
const real rit = msk->get_ritenute(); const real rit = msk.get_ritenute();
if (rit != ZERO) if (rit != ZERO)
{ {
@ -3997,18 +3995,19 @@ void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk
cg_msk.set(F_RITFIS, rit); cg_msk.set(F_RITFIS, rit);
app().add_cgs_ritenute(cgrowtype_ritfis); app().add_cgs_ritenute(cgrowtype_ritfis);
} }
else if (msk->is_doc_split()) else
totale = msk->get_tot_imp_riva(); if (msk.is_doc_split())
totale = msk.get_tot_imp_riva();
cg_msk.set(F_TOTALE, totale); cg_msk.set(F_TOTALE, totale);
} }
void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk) void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, TPro_msk & msk)
{ {
const bool bring = msk->should_bring_back(); const bool bring = msk.da_riportare();
if (bring) if (bring)
{ {
if (msk->get_numdoc().full() && cg_msk.get(F_CODCLIFOR).empty()) if (msk.get_numdoc() != 0L && cg_msk.get(F_CODCLIFOR).empty())
write_clifo(cg_msk, msk); write_clifo(cg_msk, msk);
write_righe_iva_f1(cg_msk, msk); write_righe_iva_f1(cg_msk, msk);
set_totale(cg_msk, msk); set_totale(cg_msk, msk);
@ -4019,57 +4018,57 @@ void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPr
// Li riporto anche con il collega in prima nota, e in quel caso solo se i campi non sono gia valorizzati // Li riporto anche con il collega in prima nota, e in quel caso solo se i campi non sono gia valorizzati
if (bring || cg_msk.get(F_NUMDOC).empty()) if (bring || cg_msk.get(F_NUMDOC).empty())
{ {
cg_msk.set(F_NUMDOCEXT, msk->get_numdoc());
cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7)); cg_msk.set(F_NUMDOCEXT, format("%ld", msk.get_numdoc()));
cg_msk.set(F_NUMDOC, format("%-7ld", msk.get_numdoc()));
} }
if (bring || cg_msk.get(F_DATADOC).empty()) if (bring || cg_msk.get(F_DATADOC).empty())
cg_msk.set(F_DATADOC, msk->get_datadoc()); cg_msk.set(F_DATADOC, msk.get_datadoc());
} }
void TPrimanota_application::insert_part_scad(TConfig& ini) void TPrimanota_application::insert_part_scad(TConfig& ini) // che cazzo significa la partita 73/001
{ {
vector<TToken_string> rif_doc; TArray rif_doc;
int i = 0; TString str = ini.get("NUMLINEA", "23", 0);
ini.set_paragraph("23");
// Carico nel vettore // Carico nel vettore
while(true) for (int i = 0; str.full(); str = ini.get("NUMLINEA", "23", ++i))
{ {
TToken_string doc("", '|'); TToken_string doc("", '|');
TString str; str << ini.get("NUMLINEA", nullptr, i, "NULL");
if (str != "NULL")
{
doc.add(str);
doc.add(ini.get("DOCRIF", nullptr, i, "NULL"));
doc.add(ini.get("DATADOCRIF", nullptr, i, "NULL"));
rif_doc.insert(rif_doc.end(), doc); doc.add(str);
i++; doc.add(ini.get("DOCRIF", "23", i));
} doc.add(ini.get("DATADOCRIF", "23", i));
else rif_doc.add(doc);
break;
} }
// Agganciare alla partita del documento di riferimento // Agganciare alla partita del documento di riferimento
if(!rif_doc.empty()) if(rif_doc.items() > 0)
{ {
is_f1() = true; is_f1() = true;
TString query; query << "USE MOV\nSELECT (DATADOC==#DATADOC)"; TString query; query << "USE MOV\nSELECT (DATADOC==#DATADOC)";
TISAM_recordset rec(query); TISAM_recordset rec(query);
rec.set_var("#DATADOC", TVariant(TDate(rif_doc[0].get(2))));
TString part; TString part;
do
FOR_EACH_ARRAY_ITEM(rif_doc, r, _obj)
{ {
if (rec.get(MOV_NUMDOC).as_string() == "73/001") if (part.blank())
{ {
part = rec.get(MOV_PROTIVA).as_string(); rec.set_var("#DATADOC", ((TToken_string&)rif_doc[0]).get_date(2));
for (bool ok = rec.move_first(); ok; ok = rec.move_next())
{
if (rec.get_string(MOV_NUMDOC) == "73/001")
{
part = rec.get_string(MOV_PROTIVA);
break; break;
} }
} while (rec.move_next()); } while (rec.move_next());
}
num_doc_rif() = part; }
_num_doc_rif_partite = part;
} }
} }
@ -4080,9 +4079,10 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS))) if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS)))
return true; return true;
auto msk = std::make_shared<TPro_msk>(cg_msk); TPro_msk * msk = app()._pro_mask;
app()._pro_mask = msk; if (msk == nullptr)
app()._pro_mask = msk = new TPro_msk(cg_msk);
const TString datadoc = cg_msk.get(F_DATADOC); const TString datadoc = cg_msk.get(F_DATADOC);
@ -4092,16 +4092,13 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
msk->field(F_DATESEARCH).show(); msk->field(F_DATESEARCH).show();
msk->set(F_DATESEARCH, datadoc); msk->set(F_DATESEARCH, datadoc);
} }
if (msk->load_fppro_mask(msk.get()))
{
msk->run(); msk->run();
// Riporto dati FPPRO su maschera Prima Nota (solo se hai F1) // Riporto dati FPPRO su maschera Prima Nota (solo se hai F1)
// Se non hai F1 collego senza riportarti i dati (solo le chiavi db) // Se non hai F1 collego senza riportarti i dati (solo le chiavi db)
riporta_dati_f1(cg_msk, msk); riporta_dati_f1(cg_msk, *msk);
cg_msk.set(F_PROKEY, msk->get_fpprokeys()); cg_msk.set(F_PROKEY, msk->get_fpprokeys());
is_collegato(cg_msk.field(F_COLFPPRO)); is_collegato(cg_msk.field(F_COLFPPRO));
cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA)); cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA));
}
return true; return true;
} }
@ -4150,91 +4147,77 @@ bool TPrimanota_application::is_collegato(TMask_field& f)
return has_prokey; return has_prokey;
} }
bool TPro_msk::load_fppro_mask(TMask* msk, KEY k) bool TPro_msk::load_fppro_mask(TMask & msk)
{ {
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP // Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
if (k != 32)
return false;
if (!fp_db().sq_is_connect()) if (!fp_db().sq_is_connect())
{ {
message_box("Attenzione connessione al database non riuscita.\nImpossibile collegarsi ai documenti in entrata."); message_box("Attenzione connessione al database non riuscita.\nImpossibile collegarsi ai documenti in entrata.");
return false; return false;
} }
const int forn = msk->get_int(F_CODCLIFORS); const int forn = msk.get_int(F_CODCLIFORS);
if (forn == 0) if (forn == 0)
{ {
msk->set(F_ENABSEARCH, "X"); msk.set(F_ENABSEARCH, "X");
abilita_piva(msk); abilita_piva();
//message_box("Inserire prima il fornitore"); //message_box("Inserire prima il fornitore");
//return false; //return false;
} }
const TString& codfisc = msk->get(F_COFIS); const TString& codfisc = msk.get(F_COFIS);
const TString& stato_piva = msk->get(F_STATOPAIVS); const TString& stato_piva = msk.get(F_STATOPAIVS);
const TString& piva = msk->get(F_PIVAS); const TString& piva = msk.get(F_PIVAS);
TString query; TString query;
TString date = ""; TDate date;
if (msk->get_bool(F_ENABDATE)) if (msk.get_bool(F_ENABDATE))
date = msk->get_date(F_DATESEARCH); date = msk.get_date(F_DATESEARCH);
if(!msk->get_bool(F_ENABSEARCH)) if(!msk.get_bool(F_ENABSEARCH))
query = query_fppro(msk->get(F_CODCLIFORS), date); query = query_fppro(msk.get(F_CODCLIFORS), date);
else else
query = query_fppro(stato_piva, piva, date); query = query_fppro(stato_piva, piva, date);
fp_db().sq_set_exec(query, false); fp_db().sq_set_exec(query, false);
TSheet_field& sf = msk->sfield(F_SHEETFPPROS); TSheet_field& sf = msk.sfield(F_SHEETFPPROS);
const bool show_all = msk.get_bool(F_SHOWALL);
sf.hide(); sf.reset();
if (sf.items() > 0)
sf.destroy();
while (fp_db().sq_next()) while (fp_db().sq_next())
{ {
TString numreg = fp_db().sq_get("PZ_NUMREGCONT"); const long numreg = fp_db().sq_get_long("PZ_NUMREGCONT");
const bool show_all = msk->get_bool(F_SHOWALL);
if (numreg != "0" && !show_all) if (show_all || numreg == 0L)
continue; {
TToken_string& row = sf.row(-1);
TToken_string keys(fp_db().sq_get("PZ_KEYPRGINVIO"), ';'); TToken_string keys(fp_db().sq_get("PZ_KEYPRGINVIO"), ';');
keys.add(fp_db().sq_get("PZ_KEYHEADERFATT")); keys.add(fp_db().sq_get("PZ_KEYBODYFATT")); keys.add(fp_db().sq_get("PZ_KEYHEADERFATT")); keys.add(fp_db().sq_get("PZ_KEYBODYFATT"));
row.add("", 0);
row.add(fp_db().sq_get("P7_TIPODOC")); const int r = sf.set_row_cell(F_SELFPPROS, "");
row.add(TDate(fp_db().sq_get_date("P1_DATAORARIC")));
row.add(TDate(fp_db().sq_get_date("PZ_DATA"))); sf.set_row_cell(F_TIPODOCS, fp_db().sq_get("P7_TIPODOC"), r);
row.add(fp_db().sq_get("PQ_IMPTOTDOC")); sf.set_row_cell(F_DATAORARICS, fp_db().sq_get_date("P1_DATAORARIC"), r);
row.add(fppro_db().set_keys(keys).get_ritenute()); sf.set_row_cell(F_DATAS, fp_db().sq_get_date("PZ_DATA"), r);
row.add(fp_db().sq_get("PZ_NUMERO")); sf.set_row_cell(F_IMPTOTDOCS, fp_db().sq_get("PQ_IMPTOTDOC"), r);
row.add(fp_db().sq_get("P2_ANADENOMIN")); sf.set_row_cell(F_RITENUTE, fppro_db().set_keys(keys).get_ritenute(), r);
row.add(fp_db().sq_get("P2_FISCIVAPAESE")); sf.set_row_cell(F_NUMEROS, fp_db().sq_get("PZ_NUMERO"), r);
row.add(fp_db().sq_get("P2_FISCIVACOD")); sf.set_row_cell(F_RAGXML, fp_db().sq_get("P2_ANADENOMIN"), r);
row.add(fp_db().sq_get("P2_CODFISCALE")); sf.set_row_cell(F_FISCIVAPAESES, fp_db().sq_get("P2_FISCIVAPAESE"), r);
row.add(fp_db().sq_get("PZ_TIPOPROT")); sf.set_row_cell(F_FISCIVACODS, fp_db().sq_get("P2_FISCIVACOD"), r);
row.add(fp_db().sq_get("PZ_NUMPROT")); sf.set_row_cell(F_CODFISCALES, fp_db().sq_get("P2_CODFISCALE"), r);
row.add(keys); sf.set_row_cell(F_TIPOPROTS, fp_db().sq_get("PZ_TIPOPROT"), r);
sf.set_row_cell(F_PROGRESSS, fp_db().sq_get("PZ_NUMPROT"), r);
sf.set_row_cell(F_KEYFPPROS, keys, r);
}
} }
sf.force_update(); sf.force_update();
sf.show();
return true; return true;
} }
bool TPro_msk::fppro_handler(TMask_field& f, KEY k) bool TPro_msk::riporta(TMask_field& f)
{ {
TMask& msk = f.mask(); TMask& msk = f.mask();
const bool load = load_fppro_mask(&msk, k);
return load;
}
bool TPro_msk::riporta_handler(TMask_field& f, KEY k)
{
if (k != 32)
return true;
TMask& msk = f.mask();
//if (msk.curr_page() != 3) //if (msk.curr_page() != 3)
//return true; //return true;
bool ok = false; bool ok = false;
@ -4242,16 +4225,10 @@ bool TPro_msk::riporta_handler(TMask_field& f, KEY k)
FOR_EACH_SHEET_ROW(sf, nr, row) FOR_EACH_SHEET_ROW(sf, nr, row)
{ {
if(*row->get(0) == 'X') if(row->get_bool(0))
{ {
//TProtocollo protocollo(TDate(row->get(2)).year(), row->get(9), row->get(10)); app().pro_mask()->set_doc(sf, nr);
app()._pro_mask->set_doc(row->get(cid2index(F_NUMEROS)), row->get(cid2index(F_DATAS)), _riporta = f.dlg() == DLG_OK;
row->get(cid2index(F_IMPTOTDOCS)), row->get(cid2index(F_RITENUTE)), "", row->get(cid2index(F_KEYFPPROS)),
msk.get(F_CODCLIFORS), row->get(cid2index(F_FISCIVACODS)));
if (f.dlg() == DLG_OK)
app()._pro_mask->_riporta = true;
else
app()._pro_mask->_riporta = false;
ok = true; ok = true;
break; break;
} }
@ -4265,67 +4242,56 @@ bool TPro_msk::riporta_handler(TMask_field& f, KEY k)
return true; return true;
} }
bool TPro_msk::collega_handler(TMask_field& f, KEY k)
{
return riporta_handler(f, k);
}
bool TPro_msk::piva_handler(TMask_field& f, KEY k)
{
TMask& msk = f.mask();
bool ok = true;
if(k == K_TAB && f.active() && f.focusdirty())
{
ok = load_fppro_mask(&msk, K_SPACE);
}
return ok;
}
bool TPro_msk::date_handler(TMask_field& f, KEY k)
{
TMask& msk = f.mask();
bool ok = true;
if (k == K_TAB && f.active() && f.focusdirty())
{
ok = load_fppro_mask(&msk, K_SPACE);
}
return ok;
}
void TPro_msk::fppro_selfatt() const void TPro_msk::fppro_selfatt() const
{ {
const TMask& mask = *this; const TMask& mask = *this;
TSheet_field& sf = mask.sfield(F_SHEETFPPROS); TSheet_field& sf = mask.sfield(F_SHEETFPPROS);
sf.hide();
FOR_EACH_SHEET_ROW(sf, nr, row) FOR_EACH_SHEET_ROW(sf, nr, row)
{ if (sf.get_bool_row_cell(nr, F_SELFPPROS))
if (*row->get(0) == 'X') sf.set_row_cell(F_SELFPPROS, false, nr);
row->add("", 0);
}
sf.force_update(); sf.force_update();
sf.show();
} }
bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
TMask & m = o.mask();
switch (o.dlg()) switch (o.dlg())
{ {
case DLG_CONFIG:
if (e == fe_button)
load_fppro_mask(m);
break;
case DLG_OK:
if (e == fe_button)
riporta(o);
break;
case DLG_LINK:
if (e == fe_button)
riporta(o);
break;
case F_PIVAS:
if (e == fe_modify)
load_fppro_mask(m);
break;
case F_DATESEARCH:
if (e == fe_modify)
load_fppro_mask(m);
break;
case F_SELFPPROS: case F_SELFPPROS:
if (e == fe_modify) if (e == fe_modify)
fppro_selfatt(); fppro_selfatt();
break; break;
case F_SHOWALL: case F_SHOWALL:
if (e == fe_modify) if (e == fe_modify)
load_fppro_mask(this, K_SPACE); load_fppro_mask(m);
break; break;
case F_ENABSEARCH: case F_ENABSEARCH:
if (e == fe_modify) if (e == fe_modify)
{ {
abilita_piva(this); abilita_piva();
load_fppro_mask(this); load_fppro_mask(m);
} }
break; break;
case F_ENABDATE: case F_ENABDATE:
@ -4333,7 +4299,7 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
field(F_DATESEARCH).show(o.mask().get_bool(F_ENABDATE)); field(F_DATESEARCH).show(o.mask().get_bool(F_ENABDATE));
if (!o.mask().get_bool(F_ENABDATE)) if (!o.mask().get_bool(F_ENABDATE))
load_fppro_mask(this); load_fppro_mask(m);
} }
break; break;
default: default:
@ -4344,9 +4310,11 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
bool TPro_msk::is_doc_split() bool TPro_msk::is_doc_split()
{ {
for(riga_iva_s const& riga : _righe_iva) FOR_EACH_ARRAY_ITEM(_righe_iva, r, obj)
{ {
if (riga.esigibilita == 'S') TToken_string & riga = STRING_TOKEN(obj);
if (riga.get(FPRI_ESIGIBILITA) == "S")
return true; return true;
} }
return false; return false;
@ -4383,53 +4351,70 @@ void TPro_msk::set_scadenze(const char* fpprokeys)
} }
} }
void TPro_msk::set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* ritenute, const char* protfppro, const char* fpprokeys, const char* codforn, const char* piva) void TPro_msk::set_doc(TSheet_field & s, int nrow)
//long numero, TDate datadoc, real totdoc, real ritenute, const char* protfppro, const char* fpprokeys, long codforn, const char* piva)
{ {
_numero = numero; _numero = s.get_long_row_cell(nrow, F_NUMEROS);
_datadoc = datadoc; _datadoc = s.get_date_row_cell(nrow, F_DATAS);
_totdoc = abs(totdoc); _totdoc = abs(s.get_real_row_cell(nrow, F_IMPTOTDOCS));
_ritenute = ritenute; _ritenute = s.get_real_row_cell(nrow, F_RITENUTE);
_protfppro.sset(protfppro); _protfppro.sset("");
const TString & fpprokeys = s.get_str_row_cell(nrow, F_KEYFPPROS);
_fpprokeys = fpprokeys; _fpprokeys = fpprokeys;
_codforn = codforn;
_piva = piva;
set_righeiva(fpprokeys); set_righeiva(fpprokeys);
set_scadenze(fpprokeys); set_scadenze(fpprokeys);
_codforn = s.get_long_row_cell(nrow, F_CODCLIFORS);
_piva = s.get_str_row_cell(nrow, F_FISCIVACODS);
} }
real TPro_msk::get_tot_imp_riva() real TPro_msk::get_tot_imp_riva()
{ {
real tot = ZERO; real tot;
for(riga_iva_s const& riga : _righe_iva) FOR_EACH_ARRAY_ITEM(_righe_iva, r, obj)
{ {
if (riga.imposta > ZERO) TToken_string & riga = STRING_TOKEN(obj);
tot += riga.imponibile;
tot += riga.get_real(FPRI_IMPONIBILE);
} }
return tot; return tot;
} }
void TPro_msk::add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib) void TPro_msk::add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib)
{ {
_righe_iva.insert(_righe_iva.end(), { imponibile, imposta, aliquota, natura, esigib }); TToken_string riga;
riga.add(imponibile, FPRI_IMPONIBILE);
riga.add(imposta, FPRI_IMPOSTA);
riga.add(aliquota, FPRI_ALIQUOTA);
riga.add(natura, FPRI_NATURA);
riga.add(esigib, FPRI_ESIGIBILITA);
_righe_iva.add(riga);
} }
void TPro_msk::add_scad(const TDate& date, const real& importo) void TPro_msk::add_scad(const TDate& date, const real& importo)
{ {
_scadenze.insert(_scadenze.end(), { date, importo }); TToken_string riga;
riga.add(date, FPSC_DATA);
riga.add(importo, FPSC_IMPORTO);
_scadenze.add(riga);
} }
TString& TPro_msk::query_fppro(const TString& codforn, const TString& date) TString& TPro_msk::query_fppro(const TString& codforn, const TDate& date)
{ {
return query_fppro(codforn, "", "", "", date, "", "", "", true, false); return query_fppro(codforn, "", "", "", date, "", "", "", true, false);
} }
TString& TPro_msk::query_fppro(const TString& stato_piva, const TString& piva, const TString& date) TString& TPro_msk::query_fppro(const TString& stato_piva, const TString& piva, const TDate& date)
{ {
return query_fppro("", stato_piva, piva, "", date, "", "", "", true, true); return query_fppro("", stato_piva, piva, "", date, "", "", "", true, true);
} }
TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order, bool piva_research) TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TDate& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order, bool piva_research)
{ {
TString id_fornitore; TString id_fornitore;
TString keys; TString keys;
@ -4453,14 +4438,15 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
id_fornitore << " (PZ_CLIFOR = '" << codforn << "') "; id_fornitore << " (PZ_CLIFOR = '" << codforn << "') ";
} }
static TString query; TString & query = query_string();
query.cut(0) << query_string() << "WHERE ";
query << "WHERE ";
if (!id_fornitore.empty()) if (!id_fornitore.empty())
{ {
query << id_fornitore << " "; query << id_fornitore << " ";
if (!date.empty()) if (date.ok())
query << " AND PZ_DATA = '" << TDate(date).date2ansi() << "' "; query << " AND PZ_DATA = '" << date.date2ansi() << "' ";
if (order) if (order)
query << "\nORDER BY P1_DATAORARIC ASC"; query << "\nORDER BY P1_DATAORARIC ASC";
query << ";"; query << ";";
@ -4472,9 +4458,9 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
query << " AND " << where_str; query << " AND " << where_str;
query << ";"; query << ";";
} }
else if (!date.empty()) else if (date.ok())
{ {
query << " PZ_DATA = '" << TDate(date).date2ansi() << "' "; query << " PZ_DATA = '" << date.date2ansi() << "' ";
if (order) if (order)
query << "\nORDER BY P1_DATAORARIC ASC, PZ_TIPOPROT ASC, PZ_NUMPROT ASC"; query << "\nORDER BY P1_DATAORARIC ASC, PZ_TIPOPROT ASC, PZ_NUMPROT ASC";
query << ";"; query << ";";
@ -4489,9 +4475,9 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
TString& TPro_msk::query_string() TString& TPro_msk::query_string()
{ {
static TString query; TString & query = get_tmp_string(512);
query.cut(0) << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, " << query << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, " <<
"PZ_NUMPROT, P2_ANADENOMIN, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" << "PZ_NUMPROT, P2_ANADENOMIN, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" <<
"FROM PAA0200F \nJOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" << "FROM PAA0200F \nJOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
"JOIN PAA0100F \nON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" << "JOIN PAA0100F \nON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" <<
@ -4500,36 +4486,26 @@ TString& TPro_msk::query_string()
return query; return query;
} }
void TPro_msk::abilita_piva(TMask* msk) void TPro_msk::abilita_piva()
{ {
if (msk->get_bool(F_ENABSEARCH)) const bool on = get_bool(F_ENABSEARCH);
{
msk->enable(F_PIVAS); enable(F_PIVAS, on);
msk->enable(F_STATOPAIVS); enable(F_STATOPAIVS, on);
} enable(F_COFIS, on);
else
{
msk->enable(F_PIVAS, false);
msk->enable(F_STATOPAIVS, false);
}
} }
TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2100t"), _riporta(false), _codforn("") TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2100t"), _riporta(false), _codforn(0L), _numero(0L)
{ {
TMask::set_handler(DLG_CONFIG, fppro_handler); enable(DLG_OK, app().has_module(F1AUT));
TMask::set_handler(DLG_OK, riporta_handler); set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR));
if (!app().has_module(F1AUT)) set(F_COFIS, cg_msk.get(F_COFI));
field(DLG_OK).disable(); set(F_STATOPAIVS, cg_msk.get(F_STATOPAIV));
TMask::set_handler(DLG_LINK, collega_handler); set(F_PIVAS, cg_msk.get(F_PIVA));
TMask::set_handler(F_PIVAS, piva_handler); set(F_RAGSOCS, cg_msk.get(F_RAGSOCCF));
TMask::set_handler(F_DATESEARCH, date_handler);
TMask::set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR));
TMask::set(F_COFIS, cg_msk.get(F_COFI));
TMask::set(F_STATOPAIVS, cg_msk.get(F_STATOPAIV));
TMask::set(F_PIVAS, cg_msk.get(F_PIVA));
TMask::set(F_RAGSOCS, cg_msk.get(F_RAGSOCCF));
set(F_DATESEARCH, TDate(TODAY)); set(F_DATESEARCH, TDate(TODAY));
_righe_iva.clear(); _righe_iva.destroy();
_scadenze.destroy();
} }
bool& is_f1() bool& is_f1()
@ -4538,8 +4514,3 @@ bool& is_f1()
return is_f1; return is_f1;
} }
TString& num_doc_rif()
{
static TString num_doc_rif_partite = -1;
return num_doc_rif_partite;
}

View File

@ -27,15 +27,76 @@
#include <automask.h> #include <automask.h>
#include "../f1/f1lib.h" #include "../f1/f1lib.h"
#include <vector>
#define K_ELIMMAS 0 // Key per eliminazione massima #define K_ELIMMAS 0 // Key per eliminazione massima
class TPro_msk; #define FPRI_IMPONIBILE 0
#define FPRI_IMPOSTA 1
#define FPRI_ALIQUOTA 2
#define FPRI_NATURA 3
#define FPRI_ESIGIBILITA 4
#define FPSC_DATA 0
#define FPSC_IMPORTO 1
class TDati_mov_auto; class TDati_mov_auto;
enum CGMaskType { _query = 0, _no_iva = 1, _iva = 2, _occas = 3}; enum CGMaskType { _query = 0, _no_iva = 1, _iva = 2, _occas = 3};
class TPro_msk : public TAutomask
{
long _numero;
TDate _datadoc;
real _totdoc;
real _ritenute;
TProtocollo _protfppro;
TString _fpprokeys;
TString _piva;
long _codforn;
TString_array _righe_iva;
TString_array _scadenze;
bool _riporta;
// Non permette la selezione multipla
void fppro_selfatt() const;
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
public:
bool da_riportare() const { return _riporta; }
bool is_doc_split() ;
void set_righeiva(const char* fpprokeys);
void set_scadenze(const char* fpprokeys);
void set_doc(TSheet_field & s, int nrow);
const long get_numdoc() const { return _numero; }
const TDate & get_datadoc() const { return _datadoc; }
const real & get_totdoc() const { return _totdoc; }
const real & get_ritenute() const { return _ritenute; }
const TString & get_fpprokeys() const { return _fpprokeys; }
const long get_codforn() const { return _codforn; }
const TString & get_piva() const { return _piva; }
const TString_array& get_righeiva() const { return _righe_iva; }
const TProtocollo& get_protocollo() const { return _protfppro; }
const TString_array& get_scadenze() const { return _scadenze; }
real get_tot_imp_riva() ;
void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib);
void add_scad(const TDate& date, const real& importo);
static TString& query_fppro(const TString& codforn, const TDate& date);
static TString& query_fppro(const TString& stato_piva, const TString& piva, const TDate& date);
static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TDate& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false);
static TString& query_string();
void abilita_piva();
// Carica documenti FPPRO sulla maschera
bool riporta(TMask_field& f);
bool load_fppro_mask(TMask & msk);
TPro_msk(TMask& cg_msk);
};
class TPrimanota_application : public TRelation_application class TPrimanota_application : public TRelation_application
{ {
TMovimentoPN* _rel; // Relazione principale TMovimentoPN* _rel; // Relazione principale
@ -90,11 +151,12 @@ class TPrimanota_application : public TRelation_application
TAssoc_array _colori; // Colori delle righe TAssoc_array _colori; // Colori delle righe
bool _isf1; bool _isf1;
shared_ptr<TPro_msk> _pro_mask; TPro_msk * _pro_mask;
bool _is_set_fpcheck; bool _is_set_fpcheck;
int _last_date; int _last_date;
bool _f1_ini; bool _f1_ini;
bool _f1_liq; bool _f1_liq;
TString _num_doc_rif_partite;
friend class TPro_msk; friend class TPro_msk;
static bool showpartite_handler(TMask_field& f, KEY k); static bool showpartite_handler(TMask_field& f, KEY k);
@ -180,11 +242,11 @@ class TPrimanota_application : public TRelation_application
// Gestione F1 // Gestione F1
static void write_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk); static void write_righe_iva_f1(TMask& cg_msk, const TPro_msk & msk);
static bool write_scad_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk); static bool write_scad_f1(const TMask& cg_msk, const TPro_msk & msk);
static void write_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk); static void write_clifo(TMask& cg_msk, const TPro_msk & msk);
static void set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk); static void set_totale(TMask& cg_msk, TPro_msk & msk);
static void riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk); static void riporta_dati_f1(TMask& cg_msk, TPro_msk & msk);
void insert_part_scad(TConfig& ini); void insert_part_scad(TConfig& ini);
// Handlers per aggancio FPPRO // Handlers per aggancio FPPRO
// Bottone per maschera FPPRO // Bottone per maschera FPPRO
@ -222,9 +284,10 @@ protected: // TApplication
static bool scollega(bool set = false); static bool scollega(bool set = false);
// Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete) // Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete)
void clean_fppro(); void clean_fppro();
// setta variabili prima del controllo has_f1_db // Ha f1 ?
void set_has_f1_db(TMask* m); bool has_f1() const;
bool has_f1_db(TMask* m); // controlla il db
bool has_f1_db(const TMask & m);
// Controlli prima di write e rewrite // Controlli prima di write e rewrite
int controlli_f1(const TMask& m); int controlli_f1(const TMask& m);
@ -320,7 +383,7 @@ protected:
real calcola_imp() const; real calcola_imp() const;
void add_cgs_tot(TMask& m); void add_cgs_tot(TMask& m);
int set_cgs_row(int n, const TImporto& importo, const TBill& conto, const char* desc, char tipo, int set_cgs_row(int n, TImporto& importo, const TBill& conto, const char* desc, char tipo,
const char* cms = nullptr, const char* fas = nullptr); const char* cms = nullptr, const char* fas = nullptr);
void set_cgs_imp(int n, const TImporto& importo); void set_cgs_imp(int n, const TImporto& importo);
bool add_cgs_imp(int n, const TImporto& importo); bool add_cgs_imp(int n, const TImporto& importo);
@ -399,97 +462,18 @@ public:
TString_array& pag_rows() { return _pag_rows; } TString_array& pag_rows() { return _pag_rows; }
TImporto get_cgs_imp(int n) const; TImporto get_cgs_imp(int n) const;
TPro_msk * pro_mask() const { return _pro_mask; }
TImporto imposte_split_pay() const; TImporto imposte_split_pay() const;
const TString & num_doc_rif() const { return _num_doc_rif_partite; }
TPrimanota_application(); TPrimanota_application();
virtual ~TPrimanota_application() { } virtual ~TPrimanota_application() { safe_delete(_pro_mask); }
};
class TPro_msk : public TAutomask
{
public:
struct riga_iva_s;
struct scadenza_s;
private:
TString _numero;
TDate _datadoc;
real _totdoc;
real _ritenute;
TProtocollo _protfppro;
TString _fpprokeys;
TString _piva;
TString _codforn;
vector<riga_iva_s> _righe_iva;
vector<scadenza_s> _scadenze;
bool _riporta;
// Handlers per aggancio FPPRO
// Bottone carica documenti in maschera FPPRO
static bool fppro_handler(TMask_field& f, KEY k);
// Bottone riporta doc FPPRO in testata Prima Nota
static bool riporta_handler(TMask_field& f, KEY k);
static bool collega_handler(TMask_field& f, KEY k);
static bool piva_handler(TMask_field& f, KEY k);
static bool date_handler(TMask_field& f, KEY k);
// Non permette la selezione multipla
void fppro_selfatt() const;
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
public:
struct riga_iva_s
{
real imponibile;
real imposta;
real aliquota;
TString4 natura;
char esigibilita;
};
struct scadenza_s
{
TDate data;
real importo;
};
bool should_bring_back() const { return _riporta; }
bool is_doc_split();
void set_righeiva(const char* fpprokeys);
void set_scadenze(const char* fpprokeys);
void set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* ritenute, const char* protfppro, const char* fpprokeys, const char* codforn, const char* piva);
TString get_numdoc() const { return _numero; }
TDate get_datadoc() const { return _datadoc; }
real get_totdoc() const { return _totdoc; }
real get_ritenute() const { return _ritenute; }
TString get_fpprokeys() const { return _fpprokeys; }
TString get_codforn() const { return _codforn; }
TString get_piva() const { return _piva; }
const vector<riga_iva_s>& get_righeiva() const { return _righe_iva; }
TProtocollo& get_protocollo() { return _protfppro; }
vector<scadenza_s>& get_scadenze() { return _scadenze; }
real get_tot_imp_riva();
void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib);
void add_scad(const TDate& date, const real& importo);
static TString& query_fppro(const TString& codforn, const TString& date);
static TString& query_fppro(const TString& stato_piva, const TString& piva, const TString& date);
static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false);
static TString& query_string();
static void abilita_piva(TMask* msk);
// Carica documenti FPPRO sulla maschera
static bool load_fppro_mask(TMask* msk, KEY k = 32);
TPro_msk() = delete;
TPro_msk(TMask& cg_msk);
}; };
bool& is_f1(); bool& is_f1();
TString& num_doc_rif();
#ifndef __EXTRA__ #ifndef __EXTRA__
inline TPrimanota_application& app() inline TPrimanota_application& app()

View File

@ -329,7 +329,7 @@ bool TPrimanota_application::codpag_handler(TMask_field& f, KEY key)
TMask& m = f.mask(); TMask& m = f.mask();
TPrimanota_application& a = app(); TPrimanota_application& a = app();
const bool set_scad = a.is_fattura() && m.page_enabled(2); // E' attiva pagina 3 const bool set_scad = a.is_fattura() && m.page_enabled(2); // E' attiva pagina 3
if (key == K_ENTER && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back()))) if (key == K_ENTER && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare())))
{ {
if (set_scad && f.empty()) if (set_scad && f.empty())
{ {
@ -356,7 +356,7 @@ bool TPrimanota_application::codpag_handler(TMask_field& f, KEY key)
} }
} }
if (key == K_TAB && f.focusdirty() && m.insert_mode() && set_scad && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back()))) if (key == K_TAB && f.focusdirty() && m.insert_mode() && set_scad && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare())))
a.set_scadenze(m); a.set_scadenze(m);
return ok; return ok;
@ -1227,8 +1227,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
// Aggiornamento contopartita // Aggiornamento contopartita
const TImporto old_importo(controsez, old_pag.get_real(PAGSCA_IMPORTO)); const TImporto old_importo(controsez, old_pag.get_real(PAGSCA_IMPORTO));
TBill old_conto; old_conto.get(old_pag, true); TBill old_conto; old_conto.get(old_pag, true);
TImporto new_importo(controsez, new_pag.get_real(PAGSCA_IMPORTO));
const TImporto new_importo(controsez, new_pag.get_real(PAGSCA_IMPORTO));
if (old_importo != new_importo || old_conto != new_conto) if (old_importo != new_importo || old_conto != new_conto)
{ {
@ -1298,7 +1297,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
const real new_ritenute(new_pag.get(PAGSCA_RITENUTE)); const real new_ritenute(new_pag.get(PAGSCA_RITENUTE));
if (old_ritenute != new_ritenute) if (old_ritenute != new_ritenute)
{ {
const TImporto grow_ritenute(causale().sezione_ritfis(), new_ritenute - old_ritenute); TImporto grow_ritenute(causale().sezione_ritfis(), new_ritenute - old_ritenute);
const int riga = type2pos(cgrowtype_ritfis); const int riga = type2pos(cgrowtype_ritfis);
if (riga < 0) if (riga < 0)
@ -1319,7 +1318,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
const real new_ritsoc(new_pag.get(PAGSCA_RITSOC)); const real new_ritsoc(new_pag.get(PAGSCA_RITSOC));
if (old_ritsoc != new_ritsoc) if (old_ritsoc != new_ritsoc)
{ {
const TImporto grow_ritenute(causale().sezione_ritsoc(), new_ritsoc-old_ritsoc); TImporto grow_ritenute(causale().sezione_ritsoc(), new_ritsoc-old_ritsoc);
const int riga = type2pos(cgrowtype_ritsoc); const int riga = type2pos(cgrowtype_ritsoc);
if (riga < 0) if (riga < 0)

View File

@ -920,12 +920,9 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
TToken_string& row = partite.row(r); TToken_string& row = partite.row(r);
const int anno = row.get_int(0); // Anno partita const int anno = row.get_int(0); // Anno partita
TNumero_partita num = row.get(); // Numero partita TNumero_partita num = row.get(); // Numero partita
if(is_f1())
{ if (is_f1() && app().num_doc_rif().full())
TNumero_partita prev = num; num = app().num_doc_rif();
if ((num = num_doc_rif()) == -1)
num = prev;
}
gm.set(P_ANNO, anno); // Aggiorna campi di ricerca gm.set(P_ANNO, anno); // Aggiorna campi di ricerca
gm.set(P_NUMERO, num); gm.set(P_NUMERO, num);

View File

@ -8,7 +8,6 @@
#include "mov.h" #include "mov.h"
#include <map> #include <map>
#include "rmov.h" #include "rmov.h"
#include <vector>
#include "pconti.h" #include "pconti.h"
#define INI_ANNO "riep_anno" #define INI_ANNO "riep_anno"
@ -23,17 +22,14 @@ class TCompetenze_mask : public TAutomask
int s_conto; int s_conto;
real importo; real importo;
}; };
std::vector<int> _regs;
std::vector<cont_contr_t> _conts; TString_array _regs;
const char* get_ini(bool dataini) const; const char* get_ini(bool dataini) const;
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
// Funzione becera di ordinamento del vettore _conts
void sort_conts(bool sort_by_imp = true);
static void swap_items(cont_contr_t* it, cont_contr_t* jt);
static bool is_minor_of(cont_contr_t* jt, cont_contr_t* it);
static TString get_descr(int gruppo, int conto, int s_conto); static TString get_descr(int gruppo, int conto, int s_conto);
void fill_contc(); void fill_contc();
@ -50,6 +46,44 @@ const char* TCompetenze_mask::get_ini(bool dataini) const
return ini_get_string(CONFIG_DITTA, "cg", INI_MESE, ""); return ini_get_string(CONFIG_DITTA, "cg", INI_MESE, "");
} }
static bool __sort_by_imp = false;
static int sort_sheet(TSheet_field & s, int r1, int r2)
{
int ret = 0;
if (__sort_by_imp)
{
const real i1 = s.get_real_row_cell(r1, F_TOTCONTC);
const real i2 = s.get_real_row_cell(r2, F_TOTCONTC);
if (i1 > i2)
ret = 1;
else
if (i2 > i1)
ret = -1;
}
else
{
ret = s.get_int_row_cell(r1, F_GRPCONTC) - s.get_int_row_cell(r2, F_GRPCONTC);
if (ret == 0)
ret = s.get_int_row_cell(r1, F_NUMCONTC) - s.get_int_row_cell(r2, F_NUMCONTC);
if (ret == 0)
{
const long s1 = s.get_long_row_cell(r1, F_SOTCONTC);
const real s2 = s.get_long_row_cell(r2, F_SOTCONTC);
if (s1 > s2)
ret = 1;
else
if (s2 > s1)
ret = -1;
}
}
return ret;
}
bool TCompetenze_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TCompetenze_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
switch (o.dlg()) switch (o.dlg())
@ -76,6 +110,16 @@ bool TCompetenze_mask::on_field_event(TOperable_field& o, TField_event e, long j
case F_ANNO: case F_ANNO:
if (e == fe_init) set(F_ANNO, get_ini(true)); if (e == fe_init) set(F_ANNO, get_ini(true));
break; break;
case F_ORDIN:
if (e == fe_init || e == fe_modify)
{
TSheet_field& sf = sfield(F_CONTC);
__sort_by_imp = o.get_bool();
sf.sort(sort_sheet);
sf.force_update();
}
break;
case F_MESE: case F_MESE:
if (e == fe_init) if (e == fe_init)
set(F_MESE, get_ini(false)); set(F_MESE, get_ini(false));
@ -95,100 +139,66 @@ TString TCompetenze_mask::get_descr(int gruppo, int conto, int s_conto)
return pcont.get(PCN_DESCR); return pcont.get(PCN_DESCR);
} }
bool TCompetenze_mask::is_minor_of(cont_contr_t* jt, cont_contr_t* it)
{
return jt->gruppo < it->gruppo
|| (jt->gruppo == it->gruppo && jt->conto < it->conto)
|| (jt->gruppo == it->gruppo && jt->conto == it->conto
&& jt->s_conto < it->s_conto);
}
void TCompetenze_mask::swap_items(cont_contr_t* it, cont_contr_t* jt)
{
const cont_contr_t appo = *it;
*it = *jt;
*jt = appo;
}
void TCompetenze_mask::sort_conts(bool sort_by_imp)
{
// Sopra 100 rischia di essere leggermente lento?
if (1 < _conts.size() && _conts.size() < 100)
for (auto it = _conts.begin(); it != _conts.end(); ++it)
for (auto jt = (it+1); jt != _conts.end(); ++jt)
if (sort_by_imp && jt->importo > it->importo || !sort_by_imp && is_minor_of(&(*jt), &(*it)))
swap_items(&(*it), &(*jt));
}
void TCompetenze_mask::fill_contc() void TCompetenze_mask::fill_contc()
{ {
TSheet_field& sf = sfield(F_CONTC); TSheet_field& sf = sfield(F_CONTC);
TLocalisamfile rmovs(LF_RMOV); TAssoc_array conti;
real tot;
sf.hide();
sf.reset(); sf.reset();
_conts.clear();
// Per ogni registrazione // Per ogni registrazione
for (int i = 0; i < (int)_regs.size(); ++i) FOR_EACH_ARRAY_ITEM(_regs, i, obj)
{
const int numreg = _regs[i];
rmovs.zero();
rmovs.put(RMV_NUMREG, numreg);
rmovs.put(RMV_NUMRIG, 0);
int riga = 0;
if (rmovs.read())
{ {
const long numreg = atol(STRING_TOKEN(obj));
const TMovimento_contabile mov(numreg);
const TCausale & caus = cached_causale(mov.get(MOV_CODCAUS));
const int rows = mov.cg_rows();
// Per ogni riga della registrazione // Per ogni riga della registrazione
for (; rmovs.get_int(RMV_NUMREG) == numreg; rmovs.next()) for (int r = mov.is_IVA() ? 2 : 1; r <= rows; r++)
{ {
const int gruppo = rmovs.get_int(RMV_GRUPPOC); const TRectype & rmov = mov.cg(r);
const int numcontc = rmovs.get_int(RMV_CONTOC); const int gruppo = rmov.get_int(RMV_GRUPPO);
const int s_conto = rmovs.get_int(RMV_SOTTOCONTOC); const int numcontc = rmov.get_int(RMV_CONTO);
const TString& tipocc = rmovs.get(RMV_TIPOCC); const int s_conto = rmov.get_int(RMV_SOTTOCONTO);
const real importo(rmovs.get(RMV_IMPORTO)); const TString& tipocc = rmov.get(RMV_TIPOC);
const real importo = rmov.get_real(RMV_IMPORTO);
TString key;
key.format("%03d|%03d|%06d", gruppo, numcontc, s_conto);
if (tipocc.blank()) // Solo se il tipo di conto di contr. e' un conto, cioe' vuoto if (tipocc.blank()) // Solo se il tipo di conto di contr. e' un conto, cioe' vuoto
{ {
// Cerco se ho già la chiave // Cerco se ho già la chiave
auto it = _conts.begin(); real * tot = (real *)conti.objptr(key);
for (; it != _conts.end(); ++it)
if (tot == nullptr)
conti.add(key, tot = new real);
*tot += importo;
}
}
}
FOR_EACH_ASSOC_OBJECT(conti, i, k, o1)
{ {
if (it->gruppo == gruppo TToken_string key = k;
&& it->conto == numcontc const int gruppo = key.get_int(0);
&& it->s_conto == s_conto) const int conto = key.get_int(0);
break; const int s_conto = key.get_long(2);
}
if (it != _conts.end())
it->importo += importo;
else
_conts.insert(_conts.end(), { gruppo, numcontc, s_conto, importo });
}
}
}
}
sort_conts(get(F_ORDIN) == "X");
real tot; tot = 0;
for (auto it = _conts.begin(); it != _conts.end(); ++it)
{
const int gruppo = it->gruppo;
const int conto = it->conto;
const int s_conto = it->s_conto;
const TString& descr = get_descr(gruppo, conto, s_conto); const TString& descr = get_descr(gruppo, conto, s_conto);
const real importo = *(real *)o1;
int r = sf.set_row_cell(F_GRPCONTC, gruppo);
TToken_string& row = sf.row(-1); sf.set_row_cell(F_NUMCONTC, conto, r);
row.add(gruppo); sf.set_row_cell(F_SOTCONTC, s_conto, r);
row.add(conto);
row.add(s_conto); sf.set_row_cell(F_DESCRCON, descr, r);
row.add(descr); sf.set_row_cell(F_TOTCONTC, importo, r);
row.add(it->importo); tot += importo;
tot += it->importo;
} }
sf.sort(sort_sheet);
sf.force_update(); sf.force_update();
sf.show();
set(F_TOT, tot); set(F_TOT, tot);
} }
@ -198,42 +208,42 @@ void TCompetenze_mask::fill()
const int anno = get_int(F_ANNO); const int anno = get_int(F_ANNO);
const int mese = get_int(F_MESE); const int mese = get_int(F_MESE);
TSheet_field& sf = sfield(F_MOVS); TSheet_field& sf = sfield(F_MOVS);
TLocalisamfile movs(LF_MOV); TRectype from(LF_MOV);
TRectype to(LF_MOV);
TDate data(1, mese, anno);
from.put(MOV_DATAREG, data);
data.set_end_month();
to.put(MOV_DATAREG, data);
TCursor c(new TRelation(LF_MOV), "", 2, &from, &to);
const int items = c.items();
sf.hide();
sf.reset(); sf.reset();
_regs.clear(); _regs.destroy();
movs.setkey(2); for (c = 0L; c.pos() < items; ++c)
const TDate dataini(1, mese, anno);
TDate dataend(dataini); dataend.set_end_month();
movs.put(MOV_DATAREG, dataini);
if (movs.read() != NOERR)
{ {
for (; movs.next() == NOERR && movs.get_date(MOV_DATAREG) <= dataend; ) const TRectype & mov = c.curr();
{ const int month_liq = mov.get_int(MOV_MESELIQ);
const int month_liq = movs.get_int(MOV_MESELIQ); const TDate datareg(mov.get(MOV_DATAREG));
const TDate datareg(movs.get(MOV_DATAREG)); const TDate datacomp(mov.get(MOV_DATACOMP));
const TDate datacomp(movs.get(MOV_DATACOMP));
if (month_liq != 0) if (month_liq != 0)
{ {
_regs.insert(_regs.end(), movs.get_int(MOV_NUMREG)); _regs.add(mov.get(MOV_NUMREG));
TToken_string& row = sf.row(-1); int r = sf.set_row_cell(F_NUMREG, mov.get(MOV_NUMREG));
row.add(movs.get(MOV_NUMREG));
row.add(datareg); sf.set_row_cell(F_DATAREG, mov.get_date(MOV_DATAREG), r);
row.add(movs.get(MOV_DATADOC)); sf.set_row_cell(F_DATADOC, mov.get_date(MOV_DATADOC), r);
row.add(TCausale(movs.get(MOV_CODCAUS)).tipo_doc()); sf.set_row_cell(F_CODCAUS, mov.get(MOV_CODCAUS), r);
row.add(month_liq); sf.set_row_cell(F_MESELIQ, month_liq, r);
row.add(movs.get(MOV_NUMDOC)); sf.set_row_cell(F_NUMDOC, mov.get(MOV_NUMDOC), r);
row.add(movs.get(MOV_PROTIVA)); sf.set_row_cell(F_PROTIVA, mov.get(MOV_PROTIVA), r);
row.add(movs.get(MOV_DESCR)); sf.set_row_cell(F_DESCR, mov.get(MOV_DESCR), r);
}
} }
} }
sf.force_update(); sf.force_update();
sf.show();
fill_contc(); fill_contc();
} }

View File

@ -118,7 +118,7 @@ END
NUMBER F_MESELIQ 2 NUMBER F_MESELIQ 2
BEGIN BEGIN
PROMPT 1 5 "Causale " PROMPT 1 5 "Mese Liq."
FLAGS "D" FLAGS "D"
END END

View File

@ -68,7 +68,8 @@ class TListaMov_application : public TPrintapp
int _ricser; int _ricser;
bool _settata_prima_riga, _causale_gia_stampata,_mov_di_sola_iva; bool _settata_prima_riga, _causale_gia_stampata,_mov_di_sola_iva;
int _cur1,_cur2,_cur2b,_cur3,_cur4,_decidi,/*_tipod,*/_controllo_mov_errati; int _cur1,_cur2,_cur2b,_cur3,_cur4,_decidi,/*_tipod,*/_controllo_mov_errati;
int _numero_riga, _alleg, _tiporegistro, _scelta_stampa, _nr, _n; int _numero_riga, _alleg, _scelta_stampa, _nr, _n;
tiporeg _tiporegistro;
int _provvis; int _provvis;
liste _tipo_lista; liste _tipo_lista;
word _flags; word _flags;
@ -116,7 +117,6 @@ public:
bool RicercaDoc(const char* cod) const; bool RicercaDoc(const char* cod) const;
const TString& SimboloValuta (const char* cod) const; const TString& SimboloValuta (const char* cod) const;
const TString& DescrDoc(const char* cod) const; const TString& DescrDoc(const char* cod) const;
const TString& AttivitaRegistro(const char * cod, int anno) const;
TListaMov_application(char tipost); TListaMov_application(char tipost);
virtual ~TListaMov_application() {} virtual ~TListaMov_application() {}
@ -427,19 +427,6 @@ const TString& TListaMov_application::SimboloValuta(const char* cod) const
const TString& TListaMov_application::DescrDoc(const char* tipo) const const TString& TListaMov_application::DescrDoc(const char* tipo) const
{ return cache().get(TAB_TPD, tipo, "S0"); } { return cache().get(TAB_TPD, tipo, "S0"); }
const TString& TListaMov_application::AttivitaRegistro(const char* cod, int anno) const
{
TString8 key; key.format("%04d%-3s", anno, cod);
return cache().get("REG", key, "S8");
}
HIDDEN int tipo_registro(const char* cod, int anno)
{
TString8 codtab; codtab.format("%4d%-3s", anno, cod);
const TString& tipo_reg = cache().get("REG", codtab, "I0");
return atoi(tipo_reg);
}
static bool between(const TString& code, const TString& mini, const TString& maxi) static bool between(const TString& code, const TString& mini, const TString& maxi)
{ {
if (mini.full() && code < mini) if (mini.full() && code < mini)
@ -508,11 +495,11 @@ bool TListaMov_application::filter_func_fatture (const TRelation* rel)
const int ann_reg = mov.get_int(MOV_ANNOIVA); const int ann_reg = mov.get_int(MOV_ANNOIVA);
const TString4 cod_reg = mov.get(MOV_REG); const TString4 cod_reg = mov.get(MOV_REG);
const int tipo_reg = tipo_registro(cod_reg, ann_reg); const tiporeg tipo_reg = cached_registro(cod_reg, ann_reg).tipo_registro();
// Considera solo iva acquisti o vendite // Considera solo iva acquisti o vendite
if (tipo_reg != 1 && tipo_reg != 2) if (tipo_reg != vendita && tipo_reg != acquisto)
return FALSE; return false;
if (app()._annoes > 0) //anno esercizio specificato nella maschera if (app()._annoes > 0) //anno esercizio specificato nella maschera
{ {
@ -563,8 +550,10 @@ bool TListaMov_application::filter_func (const TRelation * rel)
{ {
const TString& cod_reg = mov.get(MOV_REG); const TString& cod_reg = mov.get(MOV_REG);
const int ann_reg = mov.get_int(MOV_ANNOIVA); const int ann_reg = mov.get_int(MOV_ANNOIVA);
const int tipo_reg = tipo_registro(cod_reg, ann_reg); const tiporeg tipo_reg = cached_registro(cod_reg, ann_reg).tipo_registro();
if (tipo_reg == 1 || tipo_reg == 2)
// Considera solo iva acquisti o vendite
if (tipo_reg != vendita && tipo_reg != acquisto)
return false; return false;
} }
@ -653,9 +642,10 @@ void TListaMov_application::stampa_errori_rmov()
else set_row(_nr++, FR("@11gCodice C/F non presente in Anagrafica")); else set_row(_nr++, FR("@11gCodice C/F non presente in Anagrafica"));
if (_registro.not_empty()) //se su mov e' indicato il codice registro if (_registro.not_empty()) //se su mov e' indicato il codice registro
{ {
TRegistro rg (_registro, _ae); const TRegistro & reg = cached_registro(_registro, _ae);
const int tiporeg = rg.tipo(); const tiporeg tipo = reg.tipo_registro();
if ((tiporeg == 1 && t != 'C') || (tiporeg == 2 && t != 'F'))
if ((tipo == vendita && t != 'C') || (tipo == acquisto && t != 'F'))
set_row(_nr++, FR("@11gTipo C/F non compatibile con tipo registro")); set_row(_nr++, FR("@11gTipo C/F non compatibile con tipo registro"));
} }
} }
@ -742,14 +732,14 @@ void TListaMov_application::stampa_errori_iva(int* nr, const TRigaiva& riva)
const int tipocr = riva._tipocr; const int tipocr = riva._tipocr;
if (tipodet == 1 || tipodet == 3 || tipodet == 5 || tipodet == 9) if (tipodet == 1 || tipodet == 3 || tipodet == 5 || tipodet == 9)
if (_tiporegistro != 2) if (_tiporegistro != acquisto)
set_row(++(*nr), FR("@11gCodice di indetraibilita' errato")); set_row(++(*nr), FR("@11gCodice di indetraibilita' errato"));
if (_tiporegistro == 1) if (_tiporegistro == vendita)
if (tipocr != 0 && tipocr != 1 && tipocr != 4 && tipocr != 9) if (tipocr != 0 && tipocr != 1 && tipocr != 4 && tipocr != 9)
set_row(++(*nr), FR("@11gTipo costo/ricavo non valido")); set_row(++(*nr), FR("@11gTipo costo/ricavo non valido"));
if (_tiporegistro == 2) if (_tiporegistro == acquisto)
if (tipocr != 0 && tipocr != 1 && tipocr != 2 && tipocr != 3 && tipocr != 5 && tipocr != 8 && tipocr != 9) if (tipocr != 0 && tipocr != 1 && tipocr != 2 && tipocr != 3 && tipocr != 5 && tipocr != 8 && tipocr != 9)
set_row(++(*nr), FR("@11gTipo costo/ricavo non valido")); set_row(++(*nr), FR("@11gTipo costo/ricavo non valido"));
} }
@ -809,11 +799,11 @@ void TListaMov_application::set_page(int file, int count)
TString16 reg = current_cursor()->curr(LF_MOV).get(MOV_REG); TString16 reg = current_cursor()->curr(LF_MOV).get(MOV_REG);
int anno = current_cursor()->curr(LF_MOV).get_int(MOV_ANNOIVA); int anno = current_cursor()->curr(LF_MOV).get_int(MOV_ANNOIVA);
char prov = current_cursor()->curr(LF_MOV).get_char(MOV_PROVVIS); char prov = current_cursor()->curr(LF_MOV).get_char(MOV_PROVVIS);
int tipo = tipo_registro(reg, anno); const tiporeg tipo = cached_registro(reg, anno).tipo_registro();
TEsercizi_contabili esc; TEsercizi_contabili esc;
esc.date2esc(data); // qui verificare esc.date2esc(data); // qui verificare
if ( (tipo == 1) || (tipo == 2) ) if ( (tipo == vendita) || (tipo == acquisto) )
{ {
set_row (_n, FR("@103greg @3s"),FLD(LF_MOV,MOV_REG)); set_row (_n, FR("@103greg @3s"),FLD(LF_MOV,MOV_REG));
set_row (_n, FR("@111gpr @5n"),FLD(LF_MOV,MOV_PROTIVA)); set_row (_n, FR("@111gpr @5n"),FLD(LF_MOV,MOV_PROTIVA));
@ -887,7 +877,8 @@ bool TListaMov_application::preprocess_page(int file,int counter)
_codcf = curmov.get_long(MOV_CODCF); _codcf = curmov.get_long(MOV_CODCF);
_numero = curmov.get_long(MOV_NUMREG); _numero = curmov.get_long(MOV_NUMREG);
_codval = curmov.get(MOV_CODVALI); _codval = curmov.get(MOV_CODVALI);
_tiporegistro = tipo_registro(_registro, _anno); _tiporegistro = cached_registro(_registro, _anno).tipo_registro();
_causale_gia_stampata = FALSE; _causale_gia_stampata = FALSE;
TEsercizi_contabili esc; TEsercizi_contabili esc;
@ -1014,11 +1005,9 @@ bool TListaMov_application::preprocess_page(int file,int counter)
_descr_causale = caus.get(CAU_DESCR); _descr_causale = caus.get(CAU_DESCR);
_alleg_causale = caus.get_bool(CAU_ALLEG); _alleg_causale = caus.get_bool(CAU_ALLEG);
_tipodocumento = caus.get(CAU_TIPODOC); _tipodocumento = caus.get(CAU_TIPODOC);
_tiporegistro = cached_registro(_registro, _anno).tipo_registro();
_tiporegistro = tipo_registro (_registro, _anno); if ((_tiporegistro != vendita) && (_tiporegistro != acquisto))//se si tratta di un movimento di sola prima nota
return true;
if ((_tiporegistro != 1)&&(_tiporegistro != 2))//se si tratta di un movimento di sola prima nota
return TRUE;
} }
} }
else if (file == LF_RMOV) else if (file == LF_RMOV)
@ -1065,10 +1054,10 @@ bool TListaMov_application::preprocess_page(int file,int counter)
_numr = curmov.get_long(MOV_NUMREG); _numr = curmov.get_long(MOV_NUMREG);
_tipo_elenco = curmov.get(MOV_TIPO); _tipo_elenco = curmov.get(MOV_TIPO);
_codcf = curmov.get_long(MOV_CODCF); _codcf = curmov.get_long(MOV_CODCF);
const int tiporeg = tipo_registro (codreg, anno); const tiporeg tiporeg = cached_registro(codreg, anno).tipo_registro();
const TString8 attreg = AttivitaRegistro (codreg, anno); const TString8 attreg = cached_registro(codreg, anno).attivita();
if (tiporeg == 1 || tiporeg == 2)//se si tratta di un movimento iva if (tiporeg == vendita || tiporeg == acquisto)//se si tratta di un movimento iva
{ {
_tipoatt = TipoAttivita(attreg, get_firm()); _tipoatt = TipoAttivita(attreg, get_firm());
_tipo_elenco = curmov.get(MOV_TIPO); _tipo_elenco = curmov.get(MOV_TIPO);
@ -1897,18 +1886,18 @@ bool TListaMov_application::segnala_errori_iva()
return true; return true;
} }
if (tipodet == 1 || tipodet == 3 || tipodet == 5 || tipodet == 9) if (tipodet == 1 || tipodet == 3 || tipodet == 5 || tipodet == 9)
if (_tiporegistro != 2) if (_tiporegistro != acquisto)
{ {
rmoviva.readat(nrec); rmoviva.readat(nrec);
return true; return true;
} }
if (_tiporegistro == 1) if (_tiporegistro == vendita)
if (tipocr != 0 && tipocr != 1 && tipocr != 4 && tipocr != 9) if (tipocr != 0 && tipocr != 1 && tipocr != 4 && tipocr != 9)
{ {
rmoviva.readat(nrec); rmoviva.readat(nrec);
return true; return true;
} }
if (_tiporegistro == 2) if (_tiporegistro == acquisto)
if (tipocr != 0 && tipocr != 1 && tipocr != 2 && tipocr != 3 && tipocr != 5 && tipocr != 8 && tipocr != 9) if (tipocr != 0 && tipocr != 1 && tipocr != 2 && tipocr != 3 && tipocr != 5 && tipocr != 8 && tipocr != 9)
{ {
rmoviva.readat(nrec); rmoviva.readat(nrec);

View File

@ -25,6 +25,7 @@
#include "cg3.h" #include "cg3.h"
#include "cg3300.h" #include "cg3300.h"
#include "cglib.h"
#include "cg3300a.h" #include "cg3300a.h"
#include "cg3300b.h" #include "cg3300b.h"
@ -469,18 +470,19 @@ void TStampa_allegati::ricalcola(int anno_dic)
{ {
pi.addstatus(1); pi.addstatus(1);
const int tiporeg = reg.get_int("I0"); const tiporeg tipo = cached_registro(reg).tipo_registro();
if ((tiporeg != 2) && (tiporeg != 1))
if ((tipo != acquisto) && (tipo != vendita))
continue; continue;
if (tiporeg == 1) if (tiporeg == vendita)
{ {
bool sosp = reg.get_bool ("B0"); if (cached_registro(reg).sospeso())
if (sosp) continue; continue;
vendite = TRUE; vendite = true;
} }
else else
vendite = FALSE; vendite = false;
tipodoc = cau.get (CAU_TIPODOC); tipodoc = cau.get (CAU_TIPODOC);
if (corrispettivo (tipodoc)) if (corrispettivo (tipodoc))

View File

@ -84,7 +84,6 @@ class TLista_fatture : public TPrintapp
protected: protected:
long select_firm_range(long from, long to); long select_firm_range(long from, long to);
int tiporeg(const TString& );
static bool mix_handler(TMask_field&, KEY); static bool mix_handler(TMask_field&, KEY);
static bool date_handler(TMask_field&, KEY); static bool date_handler(TMask_field&, KEY);
static bool to_ditt_handler(TMask_field&, KEY); static bool to_ditt_handler(TMask_field&, KEY);
@ -117,12 +116,6 @@ public:
inline TLista_fatture& app() { return (TLista_fatture&) main_app(); } inline TLista_fatture& app() { return (TLista_fatture&) main_app(); }
int TLista_fatture::tiporeg(const TString& reg)
{
TString8 s; s.format("%4d%-3s",_date_from.year(),(const char*)reg);
return atoi(cache().get("REG", s, "I0"));
}
bool TLista_fatture::filter_func1(const TRelation *r) bool TLista_fatture::filter_func1(const TRelation *r)
{ {
TLista_fatture& a = app(); TLista_fatture& a = app();
@ -144,8 +137,8 @@ bool TLista_fatture::filter_func1(const TRelation *r)
if (riv.get(RMI_TIPODET).blank() || percind.is_zero()) if (riv.get(RMI_TIPODET).blank() || percind.is_zero())
return false; return false;
const int tiporeg = a.tiporeg(rg); const tiporeg tipo = cached_registro(rg).tipo_registro();
if (tiporeg != 2) if (tipo != acquisto)
return false; return false;
} }
else // Tipo costo/ricavo else // Tipo costo/ricavo
@ -443,8 +436,9 @@ bool TLista_fatture::preprocess_page(int file, int counter)
if (_tipo == intra) if (_tipo == intra)
{ {
TString4 codiva = rec.get(RMI_CODIVA); TString4 codiva = rec.get(RMI_CODIVA);
const int tipomov = tiporeg(mov.get(MOV_REG)); const tiporeg tipomov = cached_registro(mov.get(MOV_REG)).tipo_registro();
if (tipomov == 2 && tipodet == 9)
if (tipomov == acquisto && tipodet == 9)
codiva = "~A19"; // Speciale per acquisti indeducibili art. 19 codiva = "~A19"; // Speciale per acquisti indeducibili art. 19
const bool is_key = _intra_items.is_key(codiva); // Esiste l'elemento ? const bool is_key = _intra_items.is_key(codiva); // Esiste l'elemento ?
// Se si' allora prendi quello, altrimenti prendine uno nuovo // Se si' allora prendi quello, altrimenti prendine uno nuovo
@ -469,8 +463,10 @@ bool TLista_fatture::preprocess_page(int file, int counter)
_tot_iva += iva; _tot_iva += iva;
_tp_imp += imp; _tp_imp += imp;
_tp_iva += iva; _tp_iva += iva;
const int tipomov = tiporeg(mov.get(MOV_REG));
if (_tipo == indetraibile && tipomov == 2 && tipodet > 0) const tiporeg tipomov = cached_registro(mov.get(MOV_REG)).tipo_registro();
if (_tipo == indetraibile && tipomov == acquisto && tipodet > 0)
{ {
TString4 codiva = rec.get(RMI_CODIVA); TString4 codiva = rec.get(RMI_CODIVA);
_Iva_item * iva_row = (_Iva_item *) _indetr.objptr(codiva); _Iva_item * iva_row = (_Iva_item *) _indetr.objptr(codiva);

View File

@ -24,7 +24,7 @@
#include <saldi.h> #include <saldi.h>
#include <causali.h> #include <causali.h>
#include "cglib02.h" #include "cglib.h"
struct therec struct therec
{ {
@ -89,7 +89,7 @@ bool CG4100_App::sort_sal()
sal.set_anno_es(year); sal.set_anno_es(year);
sal.clear_saldi(year); sal.clear_saldi(year);
long numreg = 0L; long numreg = 0L;
tiposal tsal = normale; tiposal tsal = saldo_normale;
char provvis; char provvis;
TDate datareg; TDate datareg;
@ -127,20 +127,11 @@ bool CG4100_App::sort_sal()
mov.put(MOV_NUMREG, numreg); mov.put(MOV_NUMREG, numreg);
mov.read(); mov.read();
CHECK(mov.good(),"Archivi movimenti e righe inconsistenti"); CHECK(mov.good(),"Archivi movimenti e righe inconsistenti");
// Tipo saldo normale per default
tsal = normale;
const TString& codcaus = mov.get(MOV_CODCAUS); const TString& codcaus = mov.get(MOV_CODCAUS);
const TRectype& causale = cache().get(LF_CAUSALI, codcaus);
if (!causale.empty())
{
const char ac = causale.get_char(CAU_MOVAP);
if (ac == 'A')
tsal = apertura; else
if (ac == 'C')
tsal = chiusura;
}
tsal = saldo_normale; // Tipo saldo normale per default
if(codcaus.full())
tsal = cached_causale(codcaus, year).tipo_saldo();
scaricato = mov.get_bool(MOV_SCARCON); scaricato = mov.get_bool(MOV_SCARCON);
provvis = mov.get_char(MOV_PROVVIS); provvis = mov.get_char(MOV_PROVVIS);
datareg = mov.get_date(MOV_DATAREG); datareg = mov.get_date(MOV_DATAREG);

View File

@ -208,7 +208,6 @@ bool TLiquidazione_app::user_create()
_lam = new TTable("LAM"); _lam = new TTable("LAM");
_pla = new TTable("%PLA"); _pla = new TTable("%PLA");
_reg = new TTable("REG"); _reg = new TTable("REG");
_iva = new TTable("%IVA");
_del = new TTable("%DEL"); _del = new TTable("%DEL");
_mov = &_cur->file(LF_MOV); _mov = &_cur->file(LF_MOV);
@ -225,7 +224,6 @@ bool TLiquidazione_app::user_create()
_pum_r = &(_pum->curr()); _pum_r = &(_pum->curr());
_pam_r = &(_pam->curr()); _pam_r = &(_pam->curr());
_pom_r = &(_pom->curr()); _pom_r = &(_pom->curr());
_iva_r = &(_iva->curr());
_del_r = &(_del->curr()); _del_r = &(_del->curr());
_lam_r = &(_lam->curr()); _lam_r = &(_lam->curr());
_pla_r = &(_pla->curr()); _pla_r = &(_pla->curr());

View File

@ -338,7 +338,6 @@ class TLiquidazione_app : public TPrint_application
TTable* _pla; TTable* _pla;
TTable* _ppa; TTable* _ppa;
TTable* _reg; TTable* _reg;
TTable* _iva;
TTable* _del; TTable* _del;
// a reference rectype per file/table // a reference rectype per file/table
@ -346,7 +345,6 @@ class TLiquidazione_app : public TPrint_application
TRectype* _rmoviva_r; TRectype* _rmoviva_r;
TRectype* _pcon_1_r; TRectype* _pcon_1_r;
TRectype* _pcon_2_r; TRectype* _pcon_2_r;
TRectype* _iva_r;
TRectype* _pim_r; TRectype* _pim_r;
TRectype* _pis_r; TRectype* _pis_r;
TRectype* _prm_r; TRectype* _prm_r;
@ -622,7 +620,7 @@ public:
bool look_pla(const char* a, bool create = false); bool look_pla(const char* a, bool create = false);
bool look_ppa(int m, const char* a, int t, bool create = false); bool look_ppa(int m, const char* a, int t, bool create = false);
bool look_del(int month, int type, bool create = false); bool look_del(int month, int type, bool create = false);
bool look_iva(const char* cod); // bool look_iva(const char* cod);
bool look_reg(const char* reg); bool look_reg(const char* reg);
const TRectype & get_lia(long ditta = 0l, bool create = false, int anno = 0); const TRectype & get_lia(long ditta = 0l, bool create = false, int anno = 0);
const int put_lia(const TRectype & lia, bool re = true); const int put_lia(const TRectype & lia, bool re = true);

View File

@ -1450,7 +1450,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
real nin_iva = ZERO; // imposta non incassati real nin_iva = ZERO; // imposta non incassati
const TString4 codiva = _rmoviva->get(RMI_CODIVA); const TString4 codiva = _rmoviva->get(RMI_CODIVA);
TCodiceIVA civa(codiva); const TCodiceIVA& civa = cached_codIVA(codiva);
#ifdef DBG #ifdef DBG
BREAK_DBG; BREAK_DBG;
@ -1466,17 +1466,16 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
continue; continue;
} }
look_iva(codiva); // da eliminare esso per evitare un problema di non lettura _iva ve eliminato const TString4 tipoiva = civa.tipo();
const TString4 tipoiva = _iva->get("S1"); const TString4 tipoes_v = civa.IVA11_vendite();
const TString4 tipoes_v = _iva->get("S2"); const TString4 tipoes_a = civa.IVA11_acquisti();
const TString4 tipoes_a = _iva->get("S9"); const int tipoagr = civa.tipo_IVA_agricola(); // 2/9/2015 was S4
const int tipoagr = _iva->get_int("I4"); // 2/9/2015 was S4 const int tipoag = civa.tipo_agenzie_viaggio();
const int tipoag = _iva->get_int("S5"); const int tipopla = civa.tipo_plafond();
const int tipopla = _iva->get_int("S3"); int isrimbinfr = civa.codice_rimborso_infrannuale(); // vale per calcolo rimborso se ES o NI
int isrimbinfr = _iva->get_bool("B3"); // vale per calcolo rimborso se ES o NI const real perciva = civa.moltiplicatore_percentuale();
const real perciva = _iva->get_real("R0") / CENTO; int ivarimb = !civa.escluso_dal_rimborso(); // non escluso calcolo rimb. per al. media
int ivarimb = !_iva->get_bool("B4"); // non escluso calcolo rimb. per al. media const bool den_prorata = civa.tipo_IVA_agricola(); // denominatore prorata nel caso di calcolo pro rata con numeratore e denominatore
const bool den_prorata = _iva->get_bool("B7"); // denominatore prorata nel caso di calcolo pro rata con numeratore e denominatore
const TString4 tipocr_s = _rmoviva->get(RMI_TIPOCR); const TString4 tipocr_s = _rmoviva->get(RMI_TIPOCR);
const int tipocr = atoi(tipocr_s); const int tipocr = atoi(tipocr_s);
@ -1559,7 +1558,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
sezfat = tipomov == vendita ? 'D' : 'A'; sezfat = tipomov == vendita ? 'D' : 'A';
if (is_detr_diff == 1 || civa.tipo() == "NS") if (is_detr_diff == 1 || civa.iva_non_soggetta())
continue; continue;
if (bIsMovDiff && tm == tm_fattura) if (bIsMovDiff && tm == tm_fattura)
{ {
@ -2221,8 +2220,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
if (_pcon_1_r->get_int(PCN_INDBIL) == 4) if (_pcon_1_r->get_int(PCN_INDBIL) == 4)
if (_cur->is_first_match(-AGR_PCON2)) // Esiste il sottoconto ? if (_cur->is_first_match(-AGR_PCON2)) // Esiste il sottoconto ?
{ {
if (look_iva(_pcon_2_r->get(PCN_IVACOMP))) const TCodiceIVA & civa = cached_codIVA(_pcon_2_r->get(PCN_IVACOMP));
ivacomp = _iva->get("CODTAB"); // Ecco il codice IVA di compensazione
if (civa.ok())
ivacomp = civa.codice(); // Ecco il codice IVA di compensazione
} }
look_pia(month, codatt, codiva, ivacomp, true); // Crea il record in tabella se non esiste look_pia(month, codatt, codiva, ivacomp, true); // Crea il record in tabella se non esiste
real pia_imp = _pia->get_real("R0") + agr_imp; // Aggiorna... real pia_imp = _pia->get_real("R0") + agr_imp; // Aggiorna...
@ -2727,11 +2728,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
if (_pim->get_bool("B4")) if (_pim->get_bool("B4"))
{ {
// ricalcola l'imposta a partire dal codice IVA // ricalcola l'imposta a partire dal codice IVA
look_iva(*_pim_codiva); const TCodiceIVA & civa = cached_codIVA(*_pim_codiva);
real old_iva = _pim->get_real("R1"); const real old_iva = _pim->get_real("R1");
real perc = _iva->get_real("R0"); real new_iva = _pim->get_real("R0") * civa.moltiplicatore_percentuale();
real new_iva = _pim->get_real("R0") * perc / CENTO;
round_al_centesimo(new_iva); round_al_centesimo(new_iva);
if (new_iva != old_iva) if (new_iva != old_iva)
@ -2759,10 +2759,9 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array &
if (_pia->get_bool("B0")) if (_pia->get_bool("B0"))
{ {
// calcola l'imposta a partire dal codice IVA di compensazione // calcola l'imposta a partire dal codice IVA di compensazione
look_iva(*_pia_codcom); const TCodiceIVA & civa = cached_codIVA(*_pia_codcom);
real perc = _iva->get_real("R0"); real iva = _pia->get_real("R0") * civa.moltiplicatore_percentuale();
real iva = _pia->get_real("R0") * perc / CENTO;
round_al_centesimo(iva); round_al_centesimo(iva);
agr_detIA += iva; agr_detIA += iva;
_pia->put("R1",iva); _pia->put("R1",iva);
@ -2994,12 +2993,14 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt)
if (is_split_payment(_mov->curr())) if (is_split_payment(_mov->curr()))
imposta = ZERO; imposta = ZERO;
const TString4 codiva = _iva->get("CODTAB");
const TString4 tipoiva = _iva->get("S1"); const TCodiceIVA & civa = cached_codIVA(_rmoviva->get(RMI_CODIVA));
const real ali = _iva->get_real("R0"); const TString4 codiva = civa.codice();
const TString4 tipoes_v = _iva->get("S2"); const TString4 tipoiva = civa.tipo();
const TString4 tipoes_a = _iva->get("S9"); const real ali = civa.percentuale();
const int tipoagr = _iva->get_int("I4"); // 2/9/2015 was S4 const TString4 tipoes_v = civa.IVA11_vendite();
const TString4 tipoes_a = civa.IVA11_acquisti();
const int tipoagr = civa.tipo_IVA_agricola(); // 2/9/2015 was S4
const TRectype& rcs = _cur->curr(LF_CAUSALI); const TRectype& rcs = _cur->curr(LF_CAUSALI);
const bool autofattura = rcs.get_bool("AUTOFATT"); const bool autofattura = rcs.get_bool("AUTOFATT");
const bool valintra = rcs.get_bool("VALINTRA"); const bool valintra = rcs.get_bool("VALINTRA");
@ -3379,14 +3380,17 @@ void TLiquidazione_app::iva11_set_arr_phase_2(const TString& codatt)
// Must consider current activity too... // Must consider current activity too...
codiva = *_pim_codiva; codiva = *_pim_codiva;
reg = *_pim_codreg; reg = *_pim_codreg;
look_iva(codiva); look_reg(reg); // posiziona la tabella registri e quella IVA
tiva = _iva->get("S1"); // tipo IVA const TCodiceIVA & civa = cached_codIVA(codiva);
tpla = _iva->get("S3"); // tipo gestione plafond
tagr = _iva->get_int("I4"); // tipo gestione regime agricolo 2/9/2015 was S4 look_reg(reg); // posiziona la tabella registri e quella IVA
tvia = _iva->get("S5"); // tipo gestione ag. viaggio tiva = civa.tipo(); // tipo IVA
v11 = _iva->get("S2"); // n.ro riga vendite per mod. IVA11 tpla = civa.tipo_plafond(); // tipo gestione plafond
a11 = _iva->get("S9"); // n.ro riga acquisti per mod. IVA11 tagr = civa.tipo_IVA_agricola(); // tipo gestione regime agricolo 2/9/2015 was S4
aliq = _iva->get_real("R0"); // aliquota tvia = civa.tipo_agenzie_viaggio(); // tipo gestione ag. viaggio
v11 = civa.IVA11_vendite(); // n.ro riga vendite per mod. IVA11
a11 = civa.IVA11_acquisti(); // n.ro riga acquisti per mod. IVA11
aliq = civa.percentuale(); // aliquota
treg = (tiporeg)_reg->get_long("I0"); treg = (tiporeg)_reg->get_long("I0");
const bool is_vendita = treg == vendita; const bool is_vendita = treg == vendita;
const bool is_acquisto = treg == acquisto; const bool is_acquisto = treg == acquisto;
@ -3484,7 +3488,7 @@ void TLiquidazione_app::iva11_set_arr_phase_2(const TString& codatt)
_CorrItem& ca = (_CorrItem&) corr_ann[codiva]; _CorrItem& ca = (_CorrItem&) corr_ann[codiva];
ca._totale += lor; ca._totale += lor;
if (!is_present) if (!is_present)
ca._aliquota = _iva->get_real("R0"); // Se e' nuovo setta l'aliquota ca._aliquota = civa.percentuale(); // Se e' nuovo setta l'aliquota
} }
tt = _pim->get("S0"); tt = _pim->get("S0");
@ -4541,8 +4545,10 @@ void TLiquidazione_app::recalc_annual(const char* att, bool & first)
const int tipocr = atoi(*_pim_tipocr); const int tipocr = atoi(*_pim_tipocr);
codiva = *_pim_codiva; codiva = *_pim_codiva;
reg = *_pim_codreg; reg = *_pim_codreg;
look_iva(codiva); look_reg(reg); const TCodiceIVA & civa = cached_codIVA(codiva);
tiva = _iva->get("S1");
look_reg(reg);
tiva = civa.tipo();
const TRegistro & reg = cached_registro(_reg->curr()); const TRegistro & reg = cached_registro(_reg->curr());
const tipo_sospensione simp = reg.sospensione(); const tipo_sospensione simp = reg.sospensione();
@ -4573,7 +4579,7 @@ void TLiquidazione_app::recalc_annual(const char* att, bool & first)
_CorrItem& ca = (_CorrItem&)corr_ann[codiva]; _CorrItem& ca = (_CorrItem&)corr_ann[codiva];
ca._totale += _pim->get_real("R3"); ca._totale += _pim->get_real("R3");
if (!is_key) // se non c'e' lo aggiunge if (!is_key) // se non c'e' lo aggiunge
ca._aliquota = _iva->get_real("R0") / CENTO; // Se è nuovo setta l'aliquota ca._aliquota = civa.moltiplicatore_percentuale(); // Se è nuovo setta l'aliquota
} }
if (tipoatt == 1) if (tipoatt == 1)
volaff1 += imp_ifs; volaff1 += imp_ifs;

View File

@ -583,6 +583,7 @@ bool TLiquidazione_app::look_reg(const char* reg)
return rt; return rt;
} }
/*
bool TLiquidazione_app::look_iva(const char* cod) bool TLiquidazione_app::look_iva(const char* cod)
{ {
bool rt = true; bool rt = true;
@ -603,6 +604,7 @@ bool TLiquidazione_app::look_iva(const char* cod)
return rt; return rt;
} }
*/
bool TLiquidazione_app::look_ppa(int month, const char* codatt, int type, bool create) bool TLiquidazione_app::look_ppa(int month, const char* codatt, int type, bool create)
{ {
@ -981,8 +983,10 @@ real TLiquidazione_app::aliquota_agvia()
{ {
real r; real r;
const TString& codagv = ini_get_string(CONFIG_STUDIO, "cg", "CodAgv"); const TString& codagv = ini_get_string(CONFIG_STUDIO, "cg", "CodAgv");
if (codagv.full() && look_iva(codagv)) // Controlla se è vuoto! CM600475 const TCodiceIVA & civa = cached_codIVA(codagv);
r = _iva->get_real("R0");
if (civa.ok()) // Controlla se è vuoto! CM600475
r = civa.percentuale();
return r; return r;
} }

View File

@ -95,10 +95,13 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt)
vaf += imponibile; vaf += imponibile;
_pam->put("R1", vaf); _pam->put("R1", vaf);
_pam->rewrite(); _pam->rewrite();
// Aggiorna il totale IVA periodica CD1_1 // Aggiorna il totale IVA periodica CD1_1
if (month == 13 && look_iva(ci->_codiva)) const TCodiceIVA & civa = cached_codIVA(ci->_codiva);
if (month == 13 && civa.ok())
{ {
if (_iva->get("S10").not_empty()) // Solo CD1_1 ha senso coi corrispettivi... if (civa.tipo_comunicazione_attive().full()) // Solo CD1_1 ha senso coi corrispettivi...
{ {
_pum->curr().add("R14", imponibile); // CD1_1 _pum->curr().add("R14", imponibile); // CD1_1
_pum->rewrite(); _pum->rewrite();
@ -142,12 +145,11 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
int tipocr = atoi(*_pim_tipocr); int tipocr = atoi(*_pim_tipocr);
int mese = atoi(*_pim_mese); int mese = atoi(*_pim_mese);
int tipodet = atoi(*_pim_tipodet); int tipodet = atoi(*_pim_tipodet);
look_iva(*_pim_codiva); const TCodiceIVA & civa = cached_codIVA(*_pim_codiva);
// base di riparto solo se non esente, non soggetto, non imponibile // base di riparto solo se non esente, non soggetto, non imponibile
TString16 tipoiva(_iva->get("S1")); TString16 tipoiva(civa.tipo());
TString16 reg = *_pim_codreg; TString16 reg = *_pim_codreg;
/* /*
* caso particolare SENSU Vladimiro (1995) #MI3001 * caso particolare SENSU Vladimiro (1995) #MI3001
* questi vengono pero' conteggiati nel totale * questi vengono pero' conteggiati nel totale
@ -161,18 +163,15 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
if (tipocr == 1 && (mese == m) && if (tipocr == 1 && (mese == m) &&
att == (const char*)(*_pim_codatt)) att == (const char*)(*_pim_codatt))
{ {
if (tipoiva != "NS" && tipoiva != "NI" && tipoiva != "ES") if (civa.iva_da_ventilare())
{ {
real lurd = _pim->get_real("R0"); real lurd = _pim->get_real("R0");
lurd += _pim->get_real("R1"); lurd += _pim->get_real("R1");
real perc = _iva->get_real("R0"); real perc = civa.percentuale();
TString other = _iva->get("S6"); TString other = civa.iva_a_cui_ventilare();
if (!other.empty())
{ if (other.full())
// ventila a un altro codice perc = cached_codIVA(other).percentuale(); // ventila a un altro codice
look_iva(other);
perc = _iva->get_real("R0");
}
add_ventilation(perc / CENTO, lurd, *_pim_codiva, other); add_ventilation(perc / CENTO, lurd, *_pim_codiva, other);
} }
} }
@ -341,9 +340,11 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
_pam->rewrite(); _pam->rewrite();
// Aggiorna il totale IVA periodica CD1_1 // Aggiorna il totale IVA periodica CD1_1
if (month == 13 && look_iva(vv->_codiva)) const TCodiceIVA & civa = cached_codIVA(vv->_codiva);
if (month == 13 && civa.ok())
{ {
if (_iva->get("S10").not_empty()) // Solo CD1_1 ha senso coi corrispettivi if (civa.get("S10").full()) // Solo CD1_1 ha senso coi corrispettivi
{ {
_pum->curr().add("R14", imponibile); // CD1_1 _pum->curr().add("R14", imponibile); // CD1_1
_pum->rewrite(); _pum->rewrite();
@ -364,9 +365,10 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
// viene amorosamente messo a quanto il codice IVA prevede // viene amorosamente messo a quanto il codice IVA prevede
if (!was) if (!was)
{ {
look_iva(vv->_codiva); const TCodiceIVA & civa = cached_codIVA((vv->_codiva));
_pim->put("I1", (long)vendita); _pim->put("I1", (long)vendita);
if (!_iva->get_bool("B4")) if (!civa.escluso_dal_rimborso())
_pim->put("B3", "X"); _pim->put("B3", "X");
} }
_pim->rewrite(); _pim->rewrite();
@ -533,8 +535,8 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts,
if (!_pim->get_bool("B3")) continue; if (!_pim->get_bool("B3")) continue;
// Se il tipo di codice e' NS non va considerato nella sommatoria del tot. acquisti // Se il tipo di codice e' NS non va considerato nella sommatoria del tot. acquisti
look_iva(codiva); const TCodiceIVA & civa = cached_codIVA(codiva);
const bool non_sogg = _iva->get("S1") == "NS"; const bool non_sogg = civa.iva_non_soggetta();
if (!is_mens) // Trimestrali if (!is_mens) // Trimestrali
{ {
@ -565,7 +567,7 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts,
ca._totale += _pim->get_real("R3"); ca._totale += _pim->get_real("R3");
if (!is_key) // se non c'e' lo aggiunge if (!is_key) // se non c'e' lo aggiunge
{ {
ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota ca._aliquota = civa.moltiplicatore_percentuale(); // Se e' nuovo setta l'aliquota
corr_ann.add(codiva,ca); corr_ann.add(codiva,ca);
} }
} }

View File

@ -286,7 +286,7 @@ void TLiquidazione_app::describe_ventilation(int month, const char* codatt)
continue; continue;
look_reg(*_pim_codreg); look_reg(*_pim_codreg);
look_iva(*_pim_codiva); const TCodiceIVA & civa = cached_codIVA(*_pim_codiva);
int tipocr = atoi(*_pim_tipocr); int tipocr = atoi(*_pim_tipocr);
int tipodet = atoi(*_pim_tipodet); int tipodet = atoi(*_pim_tipodet);
@ -295,7 +295,7 @@ void TLiquidazione_app::describe_ventilation(int month, const char* codatt)
real imponibile = _pim->get_real("R0"); real imponibile = _pim->get_real("R0");
real imposta = _pim->get_real("R1"); real imposta = _pim->get_real("R1");
tiporeg tipomov = (tiporeg)_reg->get_long("I0"); tiporeg tipomov = (tiporeg)_reg->get_long("I0");
TString4 tipoiva = _iva->get("S1"); TString4 tipoiva = civa.tipo();
if (_year != *_pim_anno || (month == 13 && mese < 13)) if (_year != *_pim_anno || (month == 13 && mese < 13))
continue; continue;
@ -564,28 +564,19 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
continue; continue;
TString4 codiva = codtab.mid(16,4); codiva.trim(); TString4 codiva = codtab.mid(16,4); codiva.trim();
if (!look_iva(codiva)) const TCodiceIVA & civa = cached_codIVA(codiva);
if (!civa.ok())
continue; continue;
tiporeg tipomov = (tiporeg)_reg->get_int("I0"); tiporeg tipomov = (tiporeg)_reg->get_int("I0");
bool corrisp = _reg->get_bool("B0"); bool corrisp = _reg->get_bool("B0");
const TString4 tipoiva = _iva->get("S1"); const TString4 tipoiva = civa.tipo();
const TString4 other = tab->get("S4"); const TString4 other = tab->get("S4");
TToken_string s1(tab->get("S1"), '!'); // Imponibile/iva fatture in ritardo TToken_string s1(tab->get("S1"), '!'); // Imponibile/iva fatture in ritardo
real rit_imp(s1.get(0)); real rit_imp(s1.get(0));
real rit_iva(s1.get(1)); real rit_iva(s1.get(1));
/* Perchè _pim invece di tab ? 17-10-2012
diffimp = _pim->get_real("R26");
diffiva = _pim->get_real("R27");
diffincimp = _pim->get_real("R28");
diffinciva = _pim->get_real("R29");
diffimp_acq = _pim->get_real("R30");
diffiva_acq = _pim->get_real("R31");
diffincimp_acq = _pim->get_real("R32");
diffinciva_acq = _pim->get_real("R33"); */
diffimp = tab->get_real("R26"); diffimp = tab->get_real("R26");
diffiva = tab->get_real("R27"); diffiva = tab->get_real("R27");
diffincimp = tab->get_real("R28"); diffincimp = tab->get_real("R28");
@ -603,10 +594,10 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
issosp |= (sosp_imp != nessuna_sospensione); // Setta il flag di presenza registri in sospensione (qualsiasi tipo: sospensione_normale, vol_affari, liquidazione) issosp |= (sosp_imp != nessuna_sospensione); // Setta il flag di presenza registri in sospensione (qualsiasi tipo: sospensione_normale, vol_affari, liquidazione)
// ACHTUNG! Corrispettivi da ventileer possono ventilare ad un altro codiva; in tal caso si scrive quello // ACHTUNG! Corrispettivi da ventileer possono ventilare ad un altro codiva; in tal caso si scrive quello
if (corrisp && other.full()) if (corrisp && other.full())
{
look_iva(other);
codiva = other; codiva = other;
}
const TCodiceIVA & civa1 = cached_codIVA(codiva); // codice IVA aggiornato per eventuale ventilazione
// se e' corrispettivo da ventilare non scrivo un cannolo ripieno visto che e' stato ventilato // se e' corrispettivo da ventilare non scrivo un cannolo ripieno visto che e' stato ventilato
if (tipomov == vendita && tipoiva == "VE" && !describe_pis) if (tipomov == vendita && tipoiva == "VE" && !describe_pis)
continue; continue;
@ -713,7 +704,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
ca._totale_vf += tab->get_real(tipoiva == "VE" ? "R2" : "R3"); ca._totale_vf += tab->get_real(tipoiva == "VE" ? "R2" : "R3");
if (!is_key) // se non c'e' lo aggiunge if (!is_key) // se non c'e' lo aggiunge
{ {
ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota ca._aliquota = civa.moltiplicatore_percentuale(); // Se e' nuovo setta l'aliquota
corr_ann.add(codiva,ca); corr_ann.add(codiva,ca);
} }
// vedi corrispettivi veri e falsi // vedi corrispettivi veri e falsi
@ -1804,8 +1795,9 @@ void TLiquidazione_app::set_pim(_DescrItem& d)
rw++; rw++;
else else
{ {
look_iva(d._s1); const TCodiceIVA & civa = cached_codIVA(d._s1);
d._s2 = _iva->get("S0");
d._s2 = civa.get("S0");
if (d._s2.len() > 19) d._s2.cut(19); if (d._s2.len() > 19) d._s2.cut(19);
} }
@ -2934,8 +2926,9 @@ void TLiquidazione_app::set_ventila(_DescrItem& d)
for(i = 0; i < d._arr.items(); i++) for(i = 0; i < d._arr.items(); i++)
{ {
_vDesc& vd = (_vDesc&)d._arr[i]; _vDesc& vd = (_vDesc&)d._arr[i];
look_iva(vd._codiva); const TCodiceIVA & civa = cached_codIVA(vd._codiva);
s0 = _iva->get("S0"); s0.cut(23);
s0 = civa.descrizione(); s0.cut(23);
set_row(row+i,"@8g%5s@17g%-23s@41g%r@68g%r@89g%r", set_row(row+i,"@8g%5s@17g%-23s@41g%r@68g%r@89g%r",
(const char*)vd._codiva, (const char*)vd._codiva,
@ -3065,13 +3058,15 @@ void TLiquidazione_app::set_regagr(_DescrItem& d)
_DescrItem& di = (_DescrItem&) agr_array[i]; _DescrItem& di = (_DescrItem&) agr_array[i];
if (di._flags != PROGAGR) if (di._flags != PROGAGR)
continue; continue;
look_iva(di._s0);
des = _iva->get("S0"); des.cut(25); const TCodiceIVA & civa = cached_codIVA(di._s0);
al = _iva->get_real("R0");
des = civa.descrizione(); des.cut(25);
al = civa.percentuale();
set_row(r,"%4s %-25s@48g%s %%", (const char*) di._s0, (const char*) des, al.string("#@,@@")); set_row(r,"%4s %-25s@48g%s %%", (const char*) di._s0, (const char*) des, al.string("#@,@@"));
set_row(r,"@56g%r@75g%4s",&di._r0, (const char*)di._s1); set_row(r,"@56g%r@75g%4s",&di._r0, (const char*)di._s1);
look_iva(di._s1); const TCodiceIVA & civa1 = cached_codIVA(di._s1);
al = _iva->get_real("R0"); al = civa1.percentuale();
set_row(r++,"@92g%s %%@100g%r", al.string("#@,@@"), &di._r1); set_row(r++,"@92g%s %%@100g%r", al.string("#@,@@"), &di._r1);
t1 += di._r0; t1 += di._r0;
t2 += di._r1; t2 += di._r1;

View File

@ -450,7 +450,7 @@ int TParaliq_app::read(TMask& m)
TCursor cur(&relpla, "", 1, &pla, &pla); TCursor cur(&relpla, "", 1, &pla, &pla);
const TRecnotype items = cur.items(); const TRecnotype items = cur.items();
sf.destroy(); sf.reset();
if (items == 0) if (items == 0)
init_array(sf); // Carica tutti i codici attività init_array(sf); // Carica tutti i codici attività
else else

View File

@ -112,6 +112,8 @@ void TQuadro_VE_recordset::load()
{ {
const TRectype & pimr = pim.cursor()->curr(); const TRectype & pimr = pim.cursor()->curr();
TString8 codiva(codtab.mid(16,4)); codiva.trim(); TString8 codiva(codtab.mid(16,4)); codiva.trim();
if (codiva == "274")
int i = 1;
const TRectype & ivar = cache().get("%IVA", codiva); const TRectype & ivar = cache().get("%IVA", codiva);
const TString8 aliquota = ivar.get("R0"); const TString8 aliquota = ivar.get("R0");
const TString4 tipo_aliquota = ivar.get("S1"); const TString4 tipo_aliquota = ivar.get("S1");
@ -160,6 +162,16 @@ void TQuadro_VE_recordset::load()
add_value(STRING_TOKEN(imposta.objptr(aliquota)), iva); add_value(STRING_TOKEN(imposta.objptr(aliquota)), iva);
} }
} }
else
{
const int tipocr = atoi(codtab.mid(15, 1)); // tipo costo_ricavo
if (tipocr == 4)
{
if (int_tipo_iva11_ven == acq_ind_pass_int || int_tipo_iva11_ven == cess_amm)
add_value("VE40.1", imp);
}
}
break; break;
case acq_simp: case acq_simp:
break; break;
@ -185,12 +197,12 @@ void TQuadro_VE_recordset::load()
break; break;
case acq_ind_pass_int: // passaggi interni case acq_ind_pass_int: // passaggi interni
if (vendite) if (vendite)
add_value("VE40.1", iva); add_value("VE40.1", imp);
break; break;
case acq_ind_art_19: // indetr. art. 19 case acq_ind_art_19: // indetr. art. 19
break; break;
case cess_amm: // cessioni amministrative case cess_amm: // cessioni amministrative
add_value("VE40.1", iva); add_value("VE40.1", imp);
break; break;
case vend_rimborso: // vendite valide per rimborso case vend_rimborso: // vendite valide per rimborso
break; break;
@ -251,6 +263,7 @@ void TQuadro_VE_recordset::load()
} }
} }
/*
TISAM_recordset & exp = get_recordset(REP_PAART17); TISAM_recordset & exp = get_recordset(REP_PAART17);
for (exp.move_first(); !exp.eof(); exp.move_next()) for (exp.move_first(); !exp.eof(); exp.move_next())
@ -258,10 +271,12 @@ void TQuadro_VE_recordset::load()
TString8 cod(exp.get(FIELD_NAME(LF_RMOVIVA, RMI_CODIVA)).as_string()); TString8 cod(exp.get(FIELD_NAME(LF_RMOVIVA, RMI_CODIVA)).as_string());
const TCodiceIVA & codiva = cached_codIVA(cod); const TCodiceIVA & codiva = cached_codIVA(cod);
const TString & aliquota = codiva.aliquota(); const TString & aliquota = codiva.aliquota();
const TRectype & mov = cache().get(LF_MOV, exp.get(FIELD_NAME(LF_RMOVIVA, RMI_NUMREG)).as_int());
if (aliquota.full()) if (aliquota.full())
{ {
const real imp = exp.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPONIBILE)).as_real(); const real imp = exp.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPONIBILE)).as_real();
real iva = exp.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPOSTA)).as_real();
if (codiva.is_agricola()) if (codiva.is_agricola())
sub_value(STRING_TOKEN(imponibile_agricolo.objptr(aliquota)), imp); sub_value(STRING_TOKEN(imponibile_agricolo.objptr(aliquota)), imp);
@ -269,6 +284,7 @@ void TQuadro_VE_recordset::load()
sub_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp); sub_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp);
} }
} }
*/
TISAM_recordset & reg = get_recordset(REP_REGOLARIZ); TISAM_recordset & reg = get_recordset(REP_REGOLARIZ);
@ -305,6 +321,7 @@ void TQuadro_VE_recordset::load()
} }
} }
query = "USE LIM\n FROM CODTAB=="; query = "USE LIM\n FROM CODTAB==";
query << year() << "13\nTO CODTAB==" << year() << "13"; query << year() << "13\nTO CODTAB==" << year() << "13";

View File

@ -286,9 +286,9 @@ void TQuadro_VF_recordset::load()
} }
if (non_soggetto) if (non_soggetto)
{ {
if (tipo_iva11_acq == "15A" || int_tipo_iva11_acq == 15) if (int_tipo_iva11_acq == 15)
{ {
if (tipo_iva11_acq == "15A") if (tipo_iva11_acq == "15B")
add_value("VF17.2", imp); add_value("VF17.2", imp);
add_value("VF17.1", imp); add_value("VF17.1", imp);
} }

View File

@ -108,30 +108,9 @@ class TProgind;
static const char * __date_field_name[] = { MOV_DATAREG, MOV_DATACOMP, MOV_DATACOMPCR }; static const char * __date_field_name[] = { MOV_DATAREG, MOV_DATACOMP, MOV_DATACOMPCR };
typedef enum { iva_errata = -1, nessuna_iva = 0, iva_vendite = 1, iva_acquisti = 2, libro_giornale = 5, iva_generica = 9 } TipoIVA;
enum TipoIVA typedef enum { tm_nessuno = 0, tm_fattura = 1, tm_nota_credito = 2, tm_pagamento = 3, tm_insoluto = 5, tm_pagamento_insoluto = 6 } tipo_movimento;
{ typedef enum {
iva_errata = -1,
nessuna_iva = 0,
iva_vendite = 1,
iva_acquisti = 2,
libro_giornale = 5,
iva_generica = 9
};
enum tipo_movimento
{
tm_nessuno = 0,
tm_fattura = 1,
tm_nota_credito = 2,
tm_pagamento = 3,
tm_insoluto = 5,
tm_pagamento_insoluto = 6
};
enum cgrowtypes
{
cgrowtype_contabile = ' ', // riga contabile cgrowtype_contabile = ' ', // riga contabile
cgrowtype_totale = 'T', // Totale documento cgrowtype_totale = 'T', // Totale documento
cgrowtype_abbattivo = 'A', // Abbuoni attivi cgrowtype_abbattivo = 'A', // Abbuoni attivi
@ -149,47 +128,12 @@ enum cgrowtypes
cgrowtype_imponibile = 'I', // Imponibile/contropartita saldaconto cgrowtype_imponibile = 'I', // Imponibile/contropartita saldaconto
cgrowtype_clisplit = '1', // Cliente per scissione pagamenti art.17-ter DPR 633/72 cgrowtype_clisplit = '1', // Cliente per scissione pagamenti art.17-ter DPR 633/72
cgrowtype_spese = 'G' // Spese del saladaconto cgrowtype_spese = 'G' // Spese del saladaconto
}; } cgrowtypes;
typedef enum { nessuna_sospensione, sospensione_normale, vol_affari, liquidazione } tipo_sospensione;
enum tipo_sospensione typedef enum { DataLimite = 1, UltimaImmissione} tipobil;
{ typedef enum { saldo_normale, saldo_apertura, saldo_chiusura} tiposal;
nessuna_sospensione, typedef enum { Registrazione, Competenza, CostiRicavi } TTipo_data;
sospensione_normale, typedef enum { vendita = 1, acquisto = 2, riepilogativo = 3, incassi = 4, giornale = 5, sociale = 6, cespiti = 7, giornale_magazzino = 9 } tiporeg;
vol_affari,
liquidazione
};
enum tipobil
{
DataLimite = 1,
UltimaImmissione
};
enum tiposal
{
saldo_normale,
saldo_apertura,
saldo_chiusura
};
enum TTipo_data
{
Registrazione,
Competenza,
CostiRicavi
};
enum tiporeg
{
vendita = 1,
acquisto = 2,
riepilogativo = 3,
incassi = 4,
giornale = 5,
sociale = 6,
cespiti = 7,
giornale_magazzino = 9
};
inline bool check_mov(const int tipomovprovv, const TString & provvis) inline bool check_mov(const int tipomovprovv, const TString & provvis)
{ {

View File

@ -172,6 +172,7 @@ public: // TObject
real imposta(const real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola l'imposta sull'imponibile l'imposta e la ritorna real imposta(const real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola l'imposta sull'imponibile l'imposta e la ritorna
real scorpora(real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Scorpora dall'imponibile l'imposta e la ritorna real scorpora(real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Scorpora dall'imponibile l'imposta e la ritorna
real lordo(const real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola il lordo dell'imponibile l'imposta e la ritorna real lordo(const real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola il lordo dell'imponibile l'imposta e la ritorna
real imponibile(const real& imposta, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola l'imponibile dell'imposta e lo ritorna
// bool reverse_charge() const; // bool reverse_charge() const;
// bool reverse_charge_pubb() const; // bool reverse_charge_pubb() const;

View File

@ -10,7 +10,7 @@
#include <rmoviva.h> #include <rmoviva.h>
#include "..\cg\cgsaldac.h" #include "..\cg\cgsaldac.h"
#include "..\cg\cg2103.h" #include "..\cg\cglib.h"
#include "..\ve\velib.h" #include "..\ve\velib.h"
#include "cm1100a.h" #include "cm1100a.h"

View File

@ -11,7 +11,7 @@
#include "../ce/collces.h" #include "../ce/collces.h"
#include "../ve/velib.h" #include "../ve/velib.h"
#include "../cg/cg2103.h" #include "../cg/cglib.h"
#include "../ca/movana.h" #include "../ca/movana.h"
#include "../ca/rmovana.h" #include "../ca/rmovana.h"

View File

@ -972,7 +972,7 @@ private:
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
bool test_row(const TToken_string& row); bool test_row(int nrow);
void load_um(); void load_um();
static void sheetrighe_get(TSheet_field &fld_righe, int item); static void sheetrighe_get(TSheet_field &fld_righe, int item);
@ -1071,12 +1071,13 @@ void TDistinta_mask::load_um()
} }
bool TDistinta_mask::test_row(const TToken_string& row) bool TDistinta_mask::test_row(int nrow)
{ {
TSheet_field& sheet = sfield(F_SHEET);
const TCodice_articolo father = get(F_CODICE); const TCodice_articolo father = get(F_CODICE);
TCodice_articolo code = sheet.get_str_row_cell(nrow, F_CODART);
TCodice_articolo code; row.get(1, code);
bool ok = code != father; bool ok = code != father;
if (ok && _tree.find_node(father) > 0) if (ok && _tree.find_node(father) > 0)
{ {
TToken_string path; _tree.curr_id(path); TToken_string path; _tree.curr_id(path);
@ -1088,12 +1089,9 @@ bool TDistinta_mask::test_row(const TToken_string& row)
"in quanto la distinta risulterebbe ciclica."), (const char*)code); "in quanto la distinta risulterebbe ciclica."), (const char*)code);
// Se e' una lavorazione // Se e' una lavorazione
if (get(F_TIPO)[0] == 'L') if ((get(F_TIPO) == "L") &&
{ !(sheet.get_str_row_cell(nrow, F_TIPOCOMP) == "L" && _tree.is_lav(code)))
ok = row[0] == 'L' && _tree.is_lav(code); return error_box(FR("Il codice '%s' non e' una lavorazione"), (const char*)code);
if (!ok)
error_box(FR("Il codice '%s' non e' una lavorazione"), (const char*)code);
}
return ok; return ok;
} }
@ -1170,41 +1168,47 @@ bool TDistinta_mask::on_unitsheet_event(TOperable_field& o, TField_event e, long
bool TDistinta_mask::on_distsheet_event(TOperable_field& o, TField_event e, long jolly) bool TDistinta_mask::on_distsheet_event(TOperable_field& o, TField_event e, long jolly)
{ {
const short id = o.dlg(); const short id = o.dlg();
switch (id) switch (id)
{ {
case F_SHEET: case F_SHEET:
if (e == se_notify_add || e == se_notify_modify || e == fe_close) if (e == se_notify_add || e == se_notify_modify || e == fe_close)
{ {
TSheet_field& sheet = (TSheet_field&)o;
const int nrig = int(jolly);
TToken_string& row = sheet.row(nrig);
switch(e) switch(e)
{ {
case se_notify_add: case se_notify_add:
row.add("A", F_TIPOCOMP-FIRST_FIELD); // Forza il listbox ad articolo {
row.add("", F_EXPR-FIRST_FIELD); // Forza la quantita' ad 1 TSheet_field& sheet = (TSheet_field&)o;
row.add(nrig+1, F_SORT0-FIRST_FIELD); // Inizializza numero riga const int nrig = int(jolly);
sheet.set_row_cell(F_TIPOCOMP, "A", nrig); // Forza il listbox ad articolo
sheet.set_row_cell(F_EXPR, 1, nrig); // Forza la quantita' ad 1
sheet.set_row_cell(F_SORT0, nrig + 1, nrig); // Inizializza numero riga
sheet.select(nrig); sheet.select(nrig);
sheet.force_update(nrig);
}
break; break;
case se_notify_modify: case se_notify_modify:
return test_row(row); return test_row(int(jolly));
break;
case fe_close: case fe_close:
{ {
TSheet_field& sheet = (TSheet_field&)o;
const int nrig = int(jolly);
TString80 code; TString80 code;
TString80 code1;
for (int n = sheet.items()-1; n >= 0; n--) for (int n = sheet.items()-1; n >= 0; n--)
{ {
const TToken_string& row = sheet.row(n); code = sheet.get_str_row_cell(n, F_CODART);
row.get(F_CODART-FIRST_FIELD, code); if (code.full())
if (!code.blank())
{ {
if (!test_row(row)) if (!test_row(nrig))
return false; return false;
for (int m = n - 1; m >= 0; m--) for (int m = n - 1; m >= 0; m--)
{ {
const TToken_string& row = sheet.row(m); if (code == sheet.get_str_row_cell(m, F_CODART))
row.get(F_CODART-FIRST_FIELD, code1);
if (code == code1)
{ {
int k = noyesall_box("Il codice %s e' ripetuto alla riga %d,\ncontinuare ugualmente ?", (const char *) code, n + 1); int k = noyesall_box("Il codice %s e' ripetuto alla riga %d,\ncontinuare ugualmente ?", (const char *) code, n + 1);
if (k == K_NO) if (k == K_NO)
@ -1219,7 +1223,7 @@ bool TDistinta_mask::on_distsheet_event(TOperable_field& o, TField_event e, long
sheet.destroy(n); sheet.destroy(n);
} }
} }
if (sheet.items() == 0) if (((TSheet_field&)o).items() == 0)
message_box(TR("E' necessario inserire almeno una riga nella distinta")); message_box(TR("E' necessario inserire almeno una riga nella distinta"));
break; break;
default: default:

View File

@ -246,13 +246,13 @@ LIST F_TIPOCOMP 1 12
BEGIN BEGIN
PROMPT 2 1 "Tipo " PROMPT 2 1 "Tipo "
ITEM "A|Articolo" ITEM "A|Articolo"
MESSAGE SHOW,11@|HIDE,12@|HIDE,13@|HIDE,14@|ENABLE,F_UMEXPR|ENABLE,11@|DISABLE,12@|DISABLE,13@|DISABLE,14@ MESSAGE SHOW,11@|HIDE,12@|HIDE,13@|HIDE,14@|ENABLE,F_UMEXPR|ENABLE,11@|CLEAR,12@|CLEAR,13@|CLEAR,14@
ITEM "L|Lavorazione" ITEM "L|Lavorazione"
MESSAGE HIDE,11@|SHOW,12@|HIDE,13@|HIDE,14@|DISABLE,F_UMEXPR|DISABLE,11@|ENABLE,12@|DISABLE,13@|DISABLE,14@ MESSAGE HIDE,11@|SHOW,12@|HIDE,13@|HIDE,14@|CLEAR,F_UMEXPR|CLEAR,11@|ENABLE,12@|CLEAR,13@|CLEAR,14@
ITEM "D|Distinta" ITEM "D|Distinta"
MESSAGE HIDE,11@|HIDE,12@|SHOW,13@|HIDE,14@|ENABLE,F_UMEXPR|DISABLE,11@|DISABLE,12@|ENABLE,13@|DISABLE,14@ MESSAGE HIDE,11@|HIDE,12@|SHOW,13@|HIDE,14@|ENABLE,F_UMEXPR|CLEAR,11@|CLEAR,12@|ENABLE,13@|CLEAR,14@
ITEM "V|Variabile" ITEM "V|Variabile"
MESSAGE HIDE,11@|HIDE,12@|HIDE,13@|SHOW,14@|CLEAR,F_UMEXPR|DISABLE,11@|DISABLE,12@|DISABLE,13@|ENABLE,14@ MESSAGE HIDE,11@|HIDE,12@|HIDE,13@|SHOW,14@|CLEAR,F_UMEXPR|CLEAR,11@|CLEAR,12@|CLEAR,13@|ENABLE,14@
FIELD TIPO FIELD TIPO
END END

View File

@ -11,7 +11,7 @@
#include <printer.h> #include <printer.h>
#include <progind.h> #include <progind.h>
#include "../cg/cglib01.h" #include "../cg/cglib.h"
#include "../mg/mglib.h" #include "../mg/mglib.h"
#include "../ve/velib.h" #include "../ve/velib.h"
#include "dblib.h" #include "dblib.h"

View File

@ -454,7 +454,7 @@ int TImplosion_mask::find_roots(const char* articolo, TAssoc_array& roots) const
TAssoc_array ass[2]; TAssoc_array ass[2];
int c = 0; // Array dei children = 0; fathers = 1 int c = 0; // Array dei children = 0; fathers = 1
ass[c].add(articolo, NULL); ass[c].add(articolo);
const char* cap = FR("Livello %d - Articoli %ld"); const char* cap = FR("Livello %d - Articoli %ld");
TString caption; caption.format(cap, 0, 0L); TString caption; caption.format(cap, 0, 0L);
@ -478,7 +478,7 @@ int TImplosion_mask::find_roots(const char* articolo, TAssoc_array& roots) const
for (cur = 0L; cur.pos() < cur.items(); ++cur) for (cur = 0L; cur.pos() < cur.items(); ++cur)
{ {
const TString& father = cur.curr().get("CODDIST"); const TString& father = cur.curr().get("CODDIST");
ass[!c].add(father, NULL); ass[!c].add(father);
} }
cur.freeze(FALSE); cur.freeze(FALSE);
} }
@ -559,7 +559,7 @@ void TImplosion_mask::implode_slow()
key << row->get(); key << row->get();
key.rtrim(); key.rtrim();
} }
_xmas.add(key, NULL); _xmas.add(key);
} }
} }
@ -623,7 +623,7 @@ void TImplosion_mask::implode_medium()
key = articolo; key = articolo;
if (livello.not_empty()) if (livello.not_empty())
key << '|' << livello; key << '|' << livello;
_xmas.add(key, NULL); _xmas.add(key);
TAssoc_array roots; TAssoc_array roots;
const long items = find_roots(articolo, roots); const long items = find_roots(articolo, roots);

View File

@ -1,20 +1,20 @@
#define F_CODICE 101 #define F_CODICE 201
#define F_DESCR 102 #define F_DESCR 202
#define F_COSUNIT 103 #define F_COSUNIT 203
#define F_UNMIS 104 #define F_UNMIS 204
#define F_STAMPA 105 #define F_STAMPA 205
#define F_UMDESC 106 #define F_UMDESC 206
#define F_CODICEART 107 #define F_CODICEART 207
#define F_SEARCHART 108 #define F_SEARCHART 208
#define F_SHEET 109 #define F_SHEET 209
#define F_NUMPERS 110 #define F_NUMPERS 210
#define F_PRODUTTIV 111 #define F_PRODUTTIV 211
#define F_UNTEMPO 112 #define F_UNTEMPO 212
#define F_DESUNTEMPO 113 #define F_DESUNTEMPO 213
#define F_UNMIS2 114 #define F_UNMIS2 214
#define F_LINEESTD 115 #define F_LINEESTD 215
#define F_PERCMIN 116 #define F_PERCMIN 216
#define F_PRODNRIL 117 #define F_PRODNRIL 217
#define F_CODLIN 101 #define F_CODLIN 101

View File

@ -524,6 +524,23 @@ bool TEffetti_mask::on_field_event(TOperable_field& o, TField_event e, long joll
if (e == fe_modify) if (e == fe_modify)
sfield(F_SHEET_RIGHE).set_focusdirty(); sfield(F_SHEET_RIGHE).set_focusdirty();
break; break;
case F_IBAN_STATO:
if (mode() == MODE_MOD && e == fe_init)
{
TRelation * rel = app().get_relation();
if (rel != nullptr)
{
TRectype & rec = rel->lfile().curr();
if (rec.get(EFF_IBAN).empty())
{
set(F_CODABI, rec.get(EFF_CODABI));
set(F_CODCAB, rec.get(EFF_CODCAB));
return true;
}
}
}
case F_SHEET_RIGHE: case F_SHEET_RIGHE:
return on_sheet_event(o, e, jolly); return on_sheet_event(o, e, jolly);
default: default:

View File

@ -20,20 +20,14 @@ TFppro& fppro_db()
return *fppro; return *fppro;
} }
bool TFppro::sql_inj(const TString& str) bool TFppro::sql_inj(TToken_string& keys)
{
TString appo; appo << str;
appo.upper();
return appo.contains("--") || appo.contains("SELECT") || appo.contains("DELETE") || appo.contains("DROP");
}
bool TFppro::sql_inj(const keys_s& keys)
{ {
TToken_string str("", ';'); TToken_string str("", ';');
str.add(keys.prginvio);
str.add(keys.headerfatt); str.add(keys.get(0));
str.add(keys.bodyfatt); str.add(keys.get(1));
return sql_inj(str); str.add(keys.get(2));
return str.contains("--") || str.contains("SELECT") || str.contains("DELETE") || str.contains("DROP");
} }
bool TFppro::check_reg(TToken_string& keys, int numreg) bool TFppro::check_reg(TToken_string& keys, int numreg)
@ -44,68 +38,74 @@ bool TFppro::check_reg(TToken_string& keys, int numreg)
bool TFppro::guess_the_doc(const TLocalisamfile& mov) bool TFppro::guess_the_doc(const TLocalisamfile& mov)
{ {
// Prendo il fornitore del mov per controllare la p.iva // Prendo il fornitore del mov per controllare la p.iva
TLocalisamfile clifo(LF_CLIFO); TCli_for forn = cached_clifor('F', mov.get_long(MOV_CODCF));
clifo.put(CLI_TIPOCF, "F");
const TString& codforn = mov.get(MOV_CODCF); const TString4 statopiva(forn.get(CLI_STATOPAIV));
clifo.put(CLI_CODCF, codforn);
clifo.read();
TString cli_statopiva, cli_piva;
cli_statopiva << clifo.get(CLI_STATOPAIV);
cli_piva << clifo.get(CLI_PAIV);
const real tot = mov.get_real(MOV_TOTDOC) + mov.get_real(MOV_RITFIS) + mov.get_real(MOV_RITSOC); const real tot = mov.get_real(MOV_TOTDOC) + mov.get_real(MOV_RITFIS) + mov.get_real(MOV_RITSOC);
TString numdoc = mov.get(MOV_NUMDOCEXT); TString numdoc = mov.get(MOV_NUMDOCEXT);
if (numdoc.empty()) if (numdoc.empty())
numdoc = mov.get(MOV_NUMDOC); numdoc = mov.get(MOV_NUMDOC);
// Controllo datadoc - numdoc - totdoc - p.iva // Controllo datadoc - numdoc - totdoc - p.iva
TString query; TString query;
query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT, P7_DATA AS DATA,\n" << query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT, P7_DATA AS DATA,\n" <<
"\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" << "\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" <<
"JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << "JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" <<
"JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" << "JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" <<
"WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" << "WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" <<
"(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') AND \n" << "(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') \n";
(cli_statopiva.full() ? TString("P2_FISCIVAPAESE = '") << cli_statopiva << "' AND " : "") << if (statopiva.full())
"P2_FISCIVACOD = '" << cli_piva << "' AND \n" << "PQ_IMPTOTDOC = " << tot; query << "' AND \n" << "P2_FISCIVAPAESE = '" << statopiva;
query << "' AND \n" << "P2_FISCIVACOD = '" << forn.get(CLI_PAIV);
if (forn.gruppo_IVA())
query << "' AND \n" "P2_COCAZZO = '" << forn.get(CLI_COFI); // cazzo;
query << "PQ_IMPTOTDOC = " << tot;
if (_db->sq_set_exec(query) && _db->sq_items() == 1) if (_db->sq_set_exec(query) && _db->sq_items() == 1)
{ {
_keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") }; _keys = _db->sq_get("KEYPRGINVIO");
_keys.add(_db->sq_get("KEYHEADERFATT"));
_keys.add(_db->sq_get("KEYBODYFATT"));
return true; return true;
} }
return false; return false;
} }
const char* TFppro::get_keys_fppro() const const char* TFppro::get_keys_fppro()
{ {
static TString keys; TString& keys = get_tmp_string(64);
keys.cut(0) << _keys.prginvio << ";" << _keys.headerfatt << ";" << _keys.bodyfatt;
return (const char*)keys; keys.cut(0) << _keys.get(0) << ";" << _keys.get(1) << ";" << _keys.get(2);
return keys;
} }
int TFppro::get_numreg() long TFppro::get_numreg()
{ {
if (!_is_set) if (!_is_set)
{ {
if (set_query()) if (set_query())
return _db->sq_get_int("PZ_NUMREGCONT"); return _db->sq_get_long("PZ_NUMREGCONT");
return -1; return -1;
} }
return _db->sq_get_int("PZ_NUMREGCONT"); return _db->sq_get_long("PZ_NUMREGCONT");
} }
int TFppro::get_numreg(TToken_string& keys) long TFppro::get_numreg(TToken_string& keys)
{ {
set_keys(keys); set_keys(keys);
return get_numreg(); return get_numreg();
} }
TString TFppro::get_codforn() const long TFppro::get_codforn()
{ {
TString query; TString query;
query << "SELECT PZ_CLIFOR FROM FPPRO00F\n" << where_str(); query << "SELECT PZ_CLIFOR FROM FPPRO00F\n" << where_str();
_db->sq_set_exec(query); _db->sq_set_exec(query);
return _db->sq_get("PZ_CLIFOR"); return _db->sq_get_long("PZ_CLIFOR");
} }
TDate TFppro::get_datareg() TDate TFppro::get_datareg()
@ -127,12 +127,13 @@ TDate TFppro::get_datareg(TToken_string& keys)
return TDate(); return TDate();
} }
real TFppro::get_ritenute() const real TFppro::get_ritenute()
{ {
real imp = ZERO; real imp;
TString query; TString query;
query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" << query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" <<
"WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'"; "WHERE P7_KEYPRGINVIO = '" << _keys.get(0) << "' AND P7_KEYHEADERFATT = '" << _keys.get(1) << "' AND P7_KEYBODYFATT = '" << _keys.get(2) << "'";
_db->sq_set_exec(query, false); _db->sq_set_exec(query, false);
for(bool ok = _db->sq_next(); ok; ok = _db->sq_next()) for(bool ok = _db->sq_next(); ok; ok = _db->sq_next())
imp += _db->sq_get_real("IMPORTO"); imp += _db->sq_get_real("IMPORTO");
@ -140,49 +141,48 @@ real TFppro::get_ritenute() const
} }
TFppro& TFppro::set_keys(TToken_string& keys) TFppro& TFppro::set_keys(TToken_string& keys)
{
if (keys.items() == 3)
{
const keys_s k = { keys.get(0), keys.get(1), keys.get(2) };
return set_keys(k);
}
_is_set = false;
_keys_setted = false;
return *this;
}
TFppro& TFppro::set_keys(const keys_s& keys)
{ {
if (sql_inj(keys)) if (sql_inj(keys))
{ {
TString msg; msg << "Database error: Possibile SQL INJECTION:\n" << keys; TString msg; msg << "Database error: Possibile SQL INJECTION:\n" << keys;
//throw std::exception(msg); ;
error_box(msg); error_box(msg);
_last_error.cut(0) << msg; _last_error.cut(0) << msg;
} }
else if (!keys.prginvio.empty() && !keys.headerfatt.empty() && !keys.bodyfatt.empty()) else
{
TString prginvio = keys.get(0);
TString headerfatt = keys.get(1);
TString bodyfatt = keys.get(2);
if (prginvio.full() && headerfatt.full() && bodyfatt.full())
{ {
_keys = keys; _keys = keys;
_keys_setted = true; _keys_setted = true;
} }
else else
{ {
_last_error.cut(0) << "Chiavi settate non valide:\n" << keys; _last_error = "Chiavi settate non valide:\n";
_last_error << keys;
_keys_setted = false; _keys_setted = false;
} }
}
_is_set = false; _is_set = false;
return *this; return *this;
} }
bool TFppro::associa_mov(const int numreg) const bool TFppro::associa_mov(const long numreg)
{ {
bool ok; bool ok;
TLocalisamfile mov(LF_MOV); TLocalisamfile mov(LF_MOV);
mov.put(MOV_NUMREG, numreg); mov.put(MOV_NUMREG, numreg);
if ((ok = mov.read() == NOERR)) ok = mov.read() == NOERR;
if (ok)
{ {
mov.put(MOV_KEYFPPRO, get_keys_fppro()); mov.put(MOV_KEYFPPRO, get_keys_fppro());
if ((ok = mov.rewrite() == NOERR)) // Scrivo sul movimento il riferimento al fppro ok = mov.rewrite() == NOERR;
if (ok) // Scrivo sul movimento il riferimento al fppro
{ {
TString query; TString query;
query << "UPDATE FPPRO00F \nSET " << query << "UPDATE FPPRO00F \nSET " <<
@ -199,7 +199,7 @@ bool TFppro::associa_mov(const int numreg) const
return ok; return ok;
} }
const char* TFppro::get_tipoprot() const const char* TFppro::get_tipoprot()
{ {
TString query; TString query;
@ -208,80 +208,88 @@ const char* TFppro::get_tipoprot() const
return _db->sq_get("TIPOPROT"); return _db->sq_get("TIPOPROT");
} }
const char* TFppro::get_numprot() const const char* TFppro::get_numprot()
{ {
TString query; TString query;
static TString num;
query << "SELECT PZ_NUMPROT AS NUMPROT FROM FPPRO00F\r\n" << where_str(); query << "SELECT PZ_NUMPROT AS NUMPROT FROM FPPRO00F\r\n" << where_str();
_db->sq_set_exec(query); _db->sq_set_exec(query);
return num.cut(0) = _db->sq_get("NUMPROT");
return _db->sq_get("NUMPROT");
} }
const char* TFppro::get_annoprot() const const char* TFppro::get_annoprot()
{ {
TString query; TString query;
static TString anno;
query << "SELECT PZ_ANNOPROT AS ANNOPROT FROM FPPRO00F\r\n" << where_str(); query << "SELECT PZ_ANNOPROT AS ANNOPROT FROM FPPRO00F\r\n" << where_str();
_db->sq_set_exec(query); _db->sq_set_exec(query);
return anno.cut(0) = _db->sq_get("ANNOPROT"); return _db->sq_get("ANNOPROT");
} }
const char* TFppro::get_dataoraric() const const char * TFppro::get_dataoraric()
{ {
TString query; TString query;
static TString data; TString & data = get_tmp_string(16);
query << "SELECT PZ_DATAORARIC AS DATAORARIC FROM FPPRO00F\r\n" << where_str(); query << "SELECT PZ_DATAORARIC AS DATAORARIC FROM FPPRO00F\r\n" << where_str();
_db->sq_set_exec(query); _db->sq_set_exec(query);
return data.cut(0) << _db->sq_get_date("DATAORARIC").date2ansi(); data << _db->sq_get_date("DATAORARIC").date2ansi();
return data;
} }
const char* TFppro::get_tipodoc() const const char* TFppro::get_tipodoc()
{ {
TString query; TString query;
static TString tipodoc;
query << "SELECT PZ_TIPODOC AS TIPODOC FROM FPPRO00F\r\n" << where_str(); query << "SELECT PZ_TIPODOC AS TIPODOC FROM FPPRO00F\r\n" << where_str();
_db->sq_set_exec(query); _db->sq_set_exec(query);
return tipodoc.cut(0) << _db->sq_get("TIPODOC"); return _db->sq_get("TIPODOC");
} }
const char* TFppro::get_numdoc() const const char* TFppro::get_numdoc()
{ {
TString query; TString query;
static TString numdoc;
query << "SELECT PZ_NUMERO AS NUMDOC FROM FPPRO00F\r\n" << where_str(); query << "SELECT PZ_NUMERO AS NUMDOC FROM FPPRO00F\r\n" << where_str();
_db->sq_set_exec(query); _db->sq_set_exec(query);
return numdoc.cut(0) << _db->sq_get("NUMDOC"); return _db->sq_get("NUMDOC");
} }
TDate TFppro::get_data_first_doc() const TDate TFppro::get_data_first_doc() const
{ {
TString query; TString query;
query << "SELECT min(a.DATA) AS DATA \nFROM( \n\tSELECT P7_DATA as DATA \n" << query << "SELECT min(a.DATA) AS DATA \nFROM( \n\tSELECT P7_DATA as DATA \n" <<
"\tFROM PAA0700F \n\tUNION \n\tSELECT P7_DATA as DATA \n\tFROM PAF0700F \n) a"; "\tFROM PAA0700F \n\tUNION \n\tSELECT P7_DATA as DATA \n\tFROM PAF0700F \n) a";
_db->sq_set_exec(query); _db->sq_set_exec(query);
return _db->sq_get_date("DATA"); return _db->sq_get_date("DATA");
} }
TDate TFppro::get_dataorarioric() const TDate TFppro::get_dataorarioric()
{ {
TString query; TString query;
query << "SELECT P1_DATAORARIC \nFROM PAA0100F \n" << query << "SELECT P1_DATAORARIC \nFROM PAA0100F \n" <<
"WHERE P1_KEYPRGINVIO = '" << _keys.prginvio << "' AND P1_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P1_KEYBODYFATT = '" << _keys.bodyfatt << "'"; "WHERE P1_KEYPRGINVIO = '" << _keys.get(0) << "' AND P1_KEYHEADERFATT = '" << _keys.get(1) << "' AND P1_KEYBODYFATT = '" << _keys.get(2) << "'";
_db->sq_set_exec(query); _db->sq_set_exec(query);
return _db->sq_get_date("P1_DATAORARIC"); return _db->sq_get_date("P1_DATAORARIC");
} }
int TFppro::get_numregcont() const long TFppro::get_numregcont()
{ {
TString query; TString query;
query << "SELECT PZ_NUMREGCONT FROM FPPRO00F\n" << where_str(); query << "SELECT PZ_NUMREGCONT FROM FPPRO00F\n" << where_str();
_db->sq_set_exec(query); _db->sq_set_exec(query);
return _db->sq_get_int("PZ_NUMREGCONT"); return _db->sq_get_long("PZ_NUMREGCONT");
} }
TString TFppro::get_last_error(bool clear) TString TFppro::get_last_error(bool clear)
{ {
TString l(_last_error); TString & l = get_tmp_string(128);
l = _last_error;
if(clear) if(clear)
_last_error.cut(0); _last_error.cut(0);
return l; return l;
@ -297,14 +305,14 @@ bool TFppro::set_query()
return _is_set = false; return _is_set = false;
} }
const char* TFppro::where_str() const const char* TFppro::where_str()
{ {
static TString str; static TString str;
str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.prginvio << "' AND PZ_KEYHEADERFATT = '" << _keys.headerfatt << "' AND PZ_KEYBODYFATT = '" << _keys.bodyfatt << "'"; str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.get(0) << "' AND PZ_KEYHEADERFATT = '" << _keys.get(1) << "' AND PZ_KEYBODYFATT = '" << _keys.get(2) << "'";
return str; return str;
} }
TFppro::TFppro() : _keys({ "\0", "\0", "\0" }), _keys_setted(false), _is_set(false) TFppro::TFppro() : _keys("", ';'), _keys_setted(false), _is_set(false)
{ {
_db = new SSimple_query(); _db = new SSimple_query();
const bool ok = set_connection(*_db); const bool ok = set_connection(*_db);
@ -324,11 +332,12 @@ prot_s TProtocollo::get_prot()
TString& TProtocollo::prot_in(const int year, const char* tipoprot, const char* progres) TString& TProtocollo::prot_in(const int year, const char* tipoprot, const char* progres)
{ {
static TString protocollo; TString & protocollo = get_tmp_string(128);
TString tipo(tipoprot); TString tipo(tipoprot);
if (tipo.empty()) if (tipo.empty())
tipo << "no_prot"; tipo << "no_prot";
protocollo.cut(0) << year << "-" << tipo << "/" << progres; protocollo << year << "-" << tipo << "/" << progres;
return protocollo; return protocollo;
} }
@ -363,29 +372,21 @@ const char* get_ini_codcaus()
return ini_get_string(FILE_CONFIG, FILE_SECTION, F1_CAUS); return ini_get_string(FILE_CONFIG, FILE_SECTION, F1_CAUS);
} }
const char* get_codcaus(const char * tipodoc, const char* codcf) const char* get_codcaus(const char * tipodoc, long codcf)
{ {
TLocalisamfile cfven(LF_CFVEN); TCli_for f = cached_clifor('F', codcf);
cfven.put(CFV_TIPOCF, "F");
cfven.put(CFV_CODCF, codcf);
const char* codcaus = "";
const char* codcausnc = "";
const bool nc = TString(tipodoc) == "TD04"; const bool nc = TString(tipodoc) == "TD04";
if (cfven.read() == NOERR)
{
codcaus = cfven.get(CFV_CODCAUS);
codcausnc = cfven.get(CFV_CODCAUSNC);
}
if (nc) if (nc)
{ {
if (!TString(codcausnc).empty()) const TString & codcaus = f.vendite().get(CFV_CODCAUSNC);
return codcausnc; if (codcaus.full())
return codcaus;
} }
else else
{ {
if (!TString(codcaus).empty()) const TString & codcaus = f.vendite().get(CFV_CODCAUS);
if (codcaus.full())
return codcaus; return codcaus;
} }
return get_ini_codcaus(); return get_ini_codcaus();
@ -444,74 +445,42 @@ bool check_causale(const TString& cod_caus, bool acq)
bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq) bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq)
{ {
const TCausale& caus = cached_causale(cod_caus); const TCausale& c = cached_causale(cod_caus);
if(tipo_doc == "FA" || tipo_doc == "BD" || tipo_doc == "AF" || tipo_doc == "FF") if(tipo_doc == "FA" || tipo_doc == "BD" || tipo_doc == "AF" || tipo_doc == "FF")
return caus.tipo_doc() == tipo_doc; return c.tipo_doc() == tipo_doc;
if (tipo_doc == "NC" || tipo_doc == "ND") if (tipo_doc == "NC" || tipo_doc == "ND")
{ {
bool nota; bool nota;
bool nota_iva = false; bool nota_iva = false;
if ((nota = caus.tipo_doc() == tipo_doc))
if ((nota = c.tipo_doc() == tipo_doc))
{ {
if (acq) if (acq)
nota_iva = caus.reg().tipo() == iva_acquisti; nota_iva = c.reg().tipo() == iva_acquisti;
else else
nota_iva = caus.reg().tipo() == iva_vendite; nota_iva = c.reg().tipo() == iva_vendite;
} }
return nota && nota_iva; return nota && nota_iva;
} }
return false; return false;
} }
bool check_caus_has_rit(const TString& cod_caus, bool rit) bool check_caus_has_rit(const TString& cod_caus, int year)
{ {
TLocalisamfile causali(LF_CAUSALI); const TCausale & c = cached_causale(cod_caus, year);
causali.put(CAU_CODCAUS, cod_caus);
causali.read(); return c.causale_770().full();
return *causali.get(CAU_M770) != '\0';
} }
void run_cont_ini(bool liq) void run_cont_ini(bool liq)
{ {
static TString run_string; TString cmd;
#ifdef DBG
run_string.cut(0) << "cg2 -0 -i" << F1_INIREGCONT << "*" << ".ini" << " -f1" << (liq? " -liq" : " ") << " /u" << user();
#else
run_string.cut(0) << "cg2 -0 -i" << TFilename().tempdir() << "\\" << F1_INIREGCONT << "*" << ".ini" << " -f1" << (liq ? " -liq" : " ") << " /u" << user();
#endif
TExternal_app(run_string).run();
}
void TF1_log::log(int severity, const char* msg) cmd.cut(0) << "cg2 -0 -i" << TFilename().temp("cg2CONTAB", "ini") << " -f1" << (liq ? " -liq" : " ") << " /u" << user();
{
if (_log == nullptr)
{
_log = new TLog_report("Stato contabilizzazione:");
// Tento l'eliminazione del file
std::remove("f1_cg.log");
}
static TString txt; TExternal_app app(cmd);
txt.cut(0) << msg;
_log->log(severity, txt);
// Scrivo anche su file
std::filebuf fb;
fb.open("f1_cg.log", std::ios::out | std::ios::app);
std::ostream os(&fb);
os << txt << std::endl;
fb.close();
}
bool TF1_log::show_log() app.run();
{
if (_log)
{
_log->preview();
delete _log;
_log = nullptr;
}
return true;
} }

View File

@ -8,7 +8,6 @@
#define FILE_CONFIG CONFIG_DITTA #define FILE_CONFIG CONFIG_DITTA
#define FILE_SECTION "f1" #define FILE_SECTION "f1"
#define F1_CAUS "caus" #define F1_CAUS "caus"
#define F1_INIREGCONT "cg2CONTAB"
#define LOG_MSG 0 #define LOG_MSG 0
#define LOG_WARN 1 #define LOG_WARN 1
#define LOG_ERR 2 #define LOG_ERR 2
@ -39,61 +38,44 @@ typedef struct _prot_s
*/ */
class TFppro : public TObject class TFppro : public TObject
{ {
struct keys_s TToken_string _keys;
{
TString prginvio;
TString headerfatt;
TString bodyfatt;
operator const char*() const
{
static TToken_string a("", ';');
a.add(prginvio);
a.add(headerfatt);
a.add(bodyfatt);
return a;
}
} _keys;
SSimple_query* _db; SSimple_query* _db;
bool _keys_setted; bool _keys_setted;
bool _is_set; // Query is setted bool _is_set; // Query is setted
TString _fppro_query; TString _fppro_query;
TString _last_error; TString _last_error;
static bool sql_inj(const TString& str); bool sql_inj(TToken_string& keys);
static bool sql_inj(const keys_s& keys);
public: public:
const char* where_str() const; const char* where_str();
bool check_reg(TToken_string& keys, int numreg); bool check_reg(TToken_string& keys, int numreg);
// Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e` // Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e`
bool guess_the_doc(const TLocalisamfile& mov); bool guess_the_doc(const TLocalisamfile& mov);
// Getters // Getters
const char* get_keys_fppro() const; const char* get_keys_fppro();
int get_numreg(); long get_numreg();
int get_numreg(TToken_string& keys); long get_numreg(TToken_string& keys);
TString get_codforn() const; long get_codforn();
TDate get_datareg(); TDate get_datareg();
TDate get_datareg(TToken_string& keys); TDate get_datareg(TToken_string& keys);
real get_ritenute() const; real get_ritenute();
TDate get_data_first_doc() const; TDate get_data_first_doc() const;
TDate get_dataorarioric() const; TDate get_dataorarioric();
int get_numregcont() const; long get_numregcont();
TString get_last_error(bool clear = true); TString get_last_error(bool clear = true);
// Setters // Setters
bool set_query(); bool set_query();
TFppro& set_keys(TToken_string& keys); TFppro& set_keys(TToken_string& keys);
TFppro& set_keys(const keys_s& keys);
bool associa_mov(int numreg) const; bool associa_mov(long numreg);
const char* get_tipoprot() const; const char* get_tipoprot();
const char* get_numprot() const; const char* get_numprot();
const char* get_annoprot() const; const char* get_annoprot();
const char* get_dataoraric() const; const char* get_dataoraric();
const char* get_tipodoc() const; const char* get_tipodoc();
const char* get_numdoc() const; const char* get_numdoc();
TFppro(); TFppro();
TFppro(TToken_string& keys) : TFppro() { set_keys(keys); } TFppro(TToken_string& keys) : TFppro() { set_keys(keys); }
@ -125,19 +107,17 @@ public:
}; };
class TF1_log : TObject class TF1_log : public TLog_report
{ {
TLog_report* _log;
public: public:
TF1_log() : _log(nullptr){} TF1_log() : TLog_report("Stato contabilizzazione:") {}
void log(int severity, const char* msg); bool show_log() { export_text("f1_cg.log", false); return preview(); }
bool show_log();
}; };
TFppro& fppro_db(); TFppro& fppro_db();
const char* get_ini_codcaus(); const char* get_ini_codcaus();
const char* get_codcaus(const char * tipodoc, const char* codcf); const char* get_codcaus(const char * tipodoc, long codcf);
bool get_endatareg(); bool get_endatareg();
TString get_datainireg(); TString get_datainireg();
TString get_dataendreg(); TString get_dataendreg();
@ -153,7 +133,7 @@ void set_periodprec(bool flag);
bool check_causale(const TString& cod_caus, bool acq = true); bool check_causale(const TString& cod_caus, bool acq = true);
// Controlla se il "cod_caus" ha come "tipo_doc" FA o NC (di acquisto) // Controlla se il "cod_caus" ha come "tipo_doc" FA o NC (di acquisto)
bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq = true); bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq = true);
bool check_caus_has_rit(const TString& cod_caus, bool rit); bool check_caus_has_rit(const TString& cod_caus, int year = 0);
void run_cont_ini(bool liq); void run_cont_ini(bool liq);
#endif // _F1LIB_H_ #endif // _F1LIB_H_

View File

@ -593,7 +593,9 @@ bool TF9Prospetto_integr::operator()(const char* numreg_acq, const char* numreg_
_items = _prosp_rs->items(); _items = _prosp_rs->items();
if (_items == 0) if (_items == 0)
{ {
FILE* log = fopen("TF9Prospetto_integr_error.txt", "a"); FILE* log;
fopen_s(&log, "TF9Prospetto_integr_error.txt", "a");
if (!_prosp_rs->last_exec()) if (!_prosp_rs->last_exec())
{ {
if (log != nullptr) if (log != nullptr)

View File

@ -104,10 +104,7 @@ void TPA_mask::load_all_fields()
set(F_DATAEND, ini_get_string(CONFIG_DITTA, "fp", "dataend")); set(F_DATAEND, ini_get_string(CONFIG_DITTA, "fp", "dataend"));
const TToken_string s_accepted_docs(ini_get_string(CONFIG_DITTA, "fp", "accepted_docs"), ';'); const TToken_string s_accepted_docs(ini_get_string(CONFIG_DITTA, "fp", "accepted_docs"), ';');
// TSheet_field& sheet = sfield(F_DOCUMENTI_TIPO);
auto& sheet = sfield(F_DOCUMENTI_TIPO);
sheet.hide();
TFP_selected_docs selected_docs; TFP_selected_docs selected_docs;
if (selected_docs.has_selected_docs()) if (selected_docs.has_selected_docs())
@ -212,7 +209,7 @@ void TPA_mask::fill()
continue; continue;
bool sent = false; bool sent = false;
if (chiave_paf(doc, hfatt, bfatt)) if (chiave_paf_doc(doc, hfatt, bfatt))
{ {
if (paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != " " && paf0100f.sq_get("P1_ERRINT") != "*") if (paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != " " && paf0100f.sq_get("P1_ERRINT") != "*")
{ {
@ -307,7 +304,7 @@ void TPA_mask::set_pronto()
static TString campo_hfatt, campo_bfatt, query; static TString campo_hfatt, campo_bfatt, query;
TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), riga->get(xvtil_cid2index(S_CODNUM)), riga->get_long(xvtil_cid2index(S_NDOC))); TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), riga->get(xvtil_cid2index(S_CODNUM)), riga->get_long(xvtil_cid2index(S_NDOC)));
if (chiave_paf(doc, campo_hfatt, campo_bfatt)) if (chiave_paf_doc(doc, campo_hfatt, campo_bfatt))
{ {
// Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo // Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo
query.cut(0) << "UPDATE PAF0100F SET P1_GESTIONE = 'P' WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'"; query.cut(0) << "UPDATE PAF0100F SET P1_GESTIONE = 'P' WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'";
@ -345,7 +342,7 @@ void TPA_mask::connect_keys()
TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), riga->get(xvtil_cid2index(S_CODNUM)), riga->get_long(xvtil_cid2index(S_NDOC))); TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), riga->get(xvtil_cid2index(S_CODNUM)), riga->get_long(xvtil_cid2index(S_NDOC)));
static TString campo_hfatt, campo_bfatt, query; static TString campo_hfatt, campo_bfatt, query;
if (chiave_paf(doc, campo_hfatt, campo_bfatt)) if (chiave_paf_doc(doc, campo_hfatt, campo_bfatt))
{ {
// Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo // Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo
query.cut(0) << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'"; query.cut(0) << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'";
@ -687,7 +684,7 @@ void TPA_mask::set_err_paf()
TString hfatt, bfatt; TString hfatt, bfatt;
TPaf_record paf0100f("PAF0100F"); TPaf_record paf0100f("PAF0100F");
if (fdoc.read() == NOERR && chiave_paf(fdoc.curr(), hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt)) if (fdoc.read() == NOERR && chiave_paf_doc(fdoc.curr(), hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt))
{ {
static TString query; static TString query;
query.cut(0) << query.cut(0) <<

View File

@ -17,6 +17,7 @@
#define FILTER_ALL "A" #define FILTER_ALL "A"
#define FILTER_CONT "C" #define FILTER_CONT "C"
#define PARA_FP "fp" #define PARA_FP "fp"
#define F1_INIREGCONT "regcont"
enum enum
{ {
@ -669,7 +670,7 @@ int TPassive_mask::prepara_contab() const
{ {
TString prokeys = row->get(sf.cid2index(S_PROKEY)); TString prokeys = row->get(sf.cid2index(S_PROKEY));
TToken_string keys(prokeys, ';'); TToken_string keys(prokeys, ';');
const TString codcaus(get_codcaus(row->get(cid2index(S_TIPODOCSDI)), row->get(cid2index(S_FORNITORE)))); const TString codcaus(get_codcaus(row->get(cid2index(S_TIPODOCSDI)), row->get_long(cid2index(S_FORNITORE))));
TString tipodoc(row->get(sf.cid2index(S_TIPODOCSDI))); TString tipodoc(row->get(sf.cid2index(S_TIPODOCSDI)));
if (tipodoc == "TD01" && !check_causale(codcaus, "FA", true)) if (tipodoc == "TD01" && !check_causale(codcaus, "FA", true))
@ -868,7 +869,7 @@ int TPassive_mask::check_err() const
{ {
if (row->starts_with("X")) if (row->starts_with("X"))
{ {
TString codcaus(get_codcaus(row->get(cid2index(S_TIPODOCSDI)), row->get(cid2index(S_FORNITORE)))); TString codcaus(get_codcaus(row->get(cid2index(S_TIPODOCSDI)), row->get_long(cid2index(S_FORNITORE))));
if (codcaus.empty()) if (codcaus.empty())
return no_codcaus; return no_codcaus;
if (TString(row->get(cid2index(S_FORNITORE))).empty()) if (TString(row->get(cid2index(S_FORNITORE))).empty())

View File

@ -13,19 +13,14 @@
#include "fp0700a.h" #include "fp0700a.h"
#include "fp0100a.h" #include "fp0100a.h"
/////////////////////////////////////////////////////////////////////////////////////
// Globals
/////////////////////////////////////////////////////////////////////////////////////
#define LEN_HFATT 20
#define LEN_BFATT 50
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
// TPAR_mask // TPAR_mask
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
class TPAR_mask : public TAutomask class TPAR_mask : public TAutomask
{ {
TAssoc_array _causali;
protected: protected:
enum { _codnum, _tipodoc, _dastato, _astato, _tiposdi }; enum { _codnum, _tipodoc, _dastato, _astato, _tiposdi };
@ -50,35 +45,29 @@ protected:
bool _enable_chiave_fixer; bool _enable_chiave_fixer;
public: public:
TPAR_mask() : TAutomask("fp0700a"), _filter_changed(true), _enable_chiave_fixer(false) const TAssoc_array & causali() const { return _causali; }
{ void save_all_fields();
disable(DLG_OK); TPAR_mask();
disable(DLG_SAVEREC); virtual ~TPAR_mask() {}
disable(DLG_FINDREC);
load_all_fields();
const TDate data_inizio = get_date_start_new_fatt();
}
void save_all_fields() const;
}; };
void TPAR_mask::save_all_fields() const TPAR_mask *__mask = nullptr;
void TPAR_mask::save_all_fields()
{ {
TSheet_field & scaus = sfield(F_CAUSALI_TIPO);
// Salvo le impostazioni
ini_set_string(CONFIG_DITTA, "fp", "dataini", get(F_DATAINI)); ini_set_string(CONFIG_DITTA, "fp", "dataini", get(F_DATAINI));
ini_set_string(CONFIG_DITTA, "fp", "dataend", get(F_DATAEND)); ini_set_string(CONFIG_DITTA, "fp", "dataend", get(F_DATAEND));
ini_set_string(CONFIG_DITTA, "fp", "TIPO_SDI", get(F_TIPO_SDI));
// Salvo lo sheet // Salvo lo sheet
TFP_selected_docs selected_docs; _causali.destroy();
selected_docs.save_sheet(sfield(F_CAUSALI_TIPO)); FOR_EACH_SHEET_ROW_LOOP(scaus, r)
{
// Salvo le impostazioni const TString & codcaus = scaus.get_str_row_cell(r, S_COD_CAUS);
/* ini_set_string(CONFIG_DITTA, "fp", "CAUSALE", codcaus, r);
set_esp_pri_empty(get_bool(F_SETDEFCOD)); _causali.add(codcaus);
set_send_all_rifs(get_bool(F_SENDALLRIFS)); }
set_esp_est(get_bool(F_SETCODEST));
set_esp_est_cod(get(F_VALCODEST));
*/
} }
void TPAR_mask::force_reload_sheet() void TPAR_mask::force_reload_sheet()
@ -97,117 +86,71 @@ void TPAR_mask::load_all_fields()
set(F_DATAEND, ini_get_string(CONFIG_DITTA, "fp", "dataend")); set(F_DATAEND, ini_get_string(CONFIG_DITTA, "fp", "dataend"));
const TToken_string s_accepted_docs(ini_get_string(CONFIG_DITTA, "fp", "accepted_docs"), ';'); const TToken_string s_accepted_docs(ini_get_string(CONFIG_DITTA, "fp", "accepted_docs"), ';');
// TSheet_field& scaus = sfield(F_CAUSALI_TIPO);
TSheet_field& sheet = sfield(F_CAUSALI_TIPO);
TFP_selected_regs selected_regs; for (int i = 0;; i++)
{
TString16 caus = ini_get_string(CONFIG_DITTA, "fp", "CAUSALE", "", i);
if (selected_regs.has_selected_regs()) if (caus.full())
{ scaus.set_row_cell(S_COD_CAUS, caus);
// Super nuova gestione super avanzata!
selected_regs.fill_sheet(sheet);
}
else if(s_accepted_docs.full())
{
// Nuova gestione avanzata!
FOR_EACH_STR_TOKEN(s_accepted_docs, tok)
{
TToken_string& row = sheet.row(-1);
row.add(tok);
row.add(TTipo_documento(TToken_string(tok).get(1)).tipo_doc_sdi());
}
}
else else
{ break;
// Vecchia gestione ):
const TString& codnum = ini_get_string(CONFIG_DITTA, "fp", "codnum");
TToken_string tipidocs(ini_get_string(CONFIG_DITTA, "fp", "tipodocs"));
FOR_EACH_STR_TOKEN(tipidocs, tok)
{
TToken_string& row = sheet.row(-1);
row.add(codnum);
row.add(tok);
// Considero 1 e 9 come stati default?
row.add(1);
row.add(9);
row.add(TTipo_documento(tok).tipo_doc_sdi());
} }
scaus.force_update();
set(F_TIPO_SDI, ini_get_string(CONFIG_DITTA, "fp", "TIPO_SDI"));
} }
sheet.force_update();
sheet.show();
/* DA FARE
set(F_SETDEFCOD, get_esp_pri_empty());
set(F_SENDALLRIFS, get_send_all_rifs());
set(F_SETCODEST, get_esp_est());
set(F_VALCODEST, get_esp_est_cod());
*/
bool caus_filter(const TRelation* r)
{
return __mask->causali().is_key(r->lfile().get(MOV_CODCAUS));
} }
void TPAR_mask::fill() void TPAR_mask::fill()
{ {
// Salvo subito su file le impostazioni di esportazione, in fplib accedo ai file
save_all_fields();
TSheet_field& docs = sfield(F_DOCS);
TString_array& sht = docs.rows_array();
docs.hide();
sht.destroy();
const TDate dal = get(F_DATAINI); const TDate dal = get(F_DATAINI);
const TDate al = get(F_DATAEND); const TDate al = get(F_DATAEND);
TString filter_selected = get(F_DOCSEL); TString filter_selected = get(F_REGSEL);
// Record di controllo per eventuali elaborazioni precedenti
TString hfatt, bfatt;
TPaf_record paf0100f("PAF0100F");
TSheet_field& regs = sfield(F_REGS);
TString query;
enable(DLG_OK, filter_selected.empty() || filter_selected == "E"); enable(DLG_OK, filter_selected.empty() || filter_selected == "E");
enable(DLG_SAVEREC, (is_f8() && filter_selected == "X") || filter_selected == "D"); enable(DLG_SAVEREC, (is_f8() && filter_selected == "X") || filter_selected == "D");
enable(DLG_FINDREC, filter_selected == "D"); enable(DLG_FINDREC, filter_selected == "D");
enable(DLG_PRINT, _enable_chiave_fixer && filter_selected.empty()); enable(DLG_PRINT, _enable_chiave_fixer && filter_selected.empty());
// Record di controllo per eventuali elaborazioni precedenti query << "USE " << LF_MOV << " KEY 3 SELECT (BETWEEN(" << MOV_DATAREG << ","
TString hfatt(LEN_HFATT), bfatt(LEN_BFATT); << dal.date2ansi() << ',' << al.date2ansi() << "))&&(REG!=\"\")"
TPaf_record paf0100f("PAF0100F"); << "\nFROM " << MOV_TIPO << "=C\nTO " << MOV_TIPO "=C";
TString query;
query << "USE 33 KEY 3 \n" <<
"SELECT 33.TIPOCF==\"C\" \n" <<
"JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
"JOIN 17 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
"JOIN %TIP TO 33 ALIAS 400 INTO CODTAB==TIPODOC \n" <<
"FROM DATADOC=#DADATADOC \n" <<
"TO DATADOC=#ADATADOC";
TISAM_recordset rec(query); TISAM_recordset rec(query);
rec.set_var("#DADATADOC", dal); rec.set_filterfunction(caus_filter);
rec.set_var("#ADATADOC", al);
TProgress_monitor pi(rec.items(), nullptr); TProgress_monitor pi(rec.items(), nullptr);
bool first, show, ask = !((show = (first = true))); bool first, show, ask = !((show = (first = true)));
int fat_no_cod = 0; int fat_no_cod = 0;
const TString16 tipodocsdi = get(F_TIPO_SDI);
const TDate data_inizio = get_date_start_new_fatt();
// Disabilito la colonna del codice ufficio // Disabilito la colonna del codice ufficio
docs.enable_column(cid2index(S_UFFICIO), false); regs.enable_column(cid2index(S_UFFICIO), false);
const TDate data_inizio = get_date_start_new_fatt(); regs.reset();
for (bool okc = rec.move_first(); okc; okc = rec.move_next()) for (bool okc = rec.move_first(); okc; okc = rec.move_next())
{ {
if (!pi.add_status()) if (!pi.add_status())
break; break;
const TRectype& doc = rec.cursor()->curr(); const TRectype& mov = rec.cursor()->curr();
const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); const TCli_for & cli = cached_clifor(mov.get_char(MOV_TIPO), mov.get_long(MOV_CODCF));
// Controllo che la numerazione sia tra quelle giuste
// Controllo che il tipo documento sia OK
if(!check_doc_filter(doc))
continue;
bool sent = false; bool sent = false;
if (chiave_paf(doc, hfatt, bfatt))
if (chiave_paf_mov(mov, tipodocsdi, hfatt, bfatt))
{ {
if (paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != " " && paf0100f.sq_get("P1_ERRINT") != "*") if (paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != " " && paf0100f.sq_get("P1_ERRINT") != "*")
{ {
@ -219,26 +162,17 @@ void TPAR_mask::fill()
continue; continue;
} }
TToken_string& row = docs.row(-1); int r = regs.set_row_cell(S_SELECTED, sent);
row = sent ? " " : "X";
row.add(rec.get(DOC_ANNO).as_int(), 1);
row.add(rec.get(DOC_CODNUM).as_string());
row.add(rec.get(DOC_TIPODOC).as_string());
TString tipodoc = rec.get(DOC_TIPODOCSDI).as_string(); regs.set_row_cell(S_ANNO, rec.get_int(MOV_ANNOES), r);
regs.set_row_cell(S_NUMREG, rec.get_string(MOV_NUMREG), r);
regs.set_row_cell(S_DATAREG, rec.get(MOV_DATAREG).as_date(), r);
regs.set_row_cell(S_CLIENTE, rec.get_long(MOV_CODCF), r);
regs.set_row_cell(S_RAGSOC, cli.get(CLI_RAGSOC), r);
if (tipodoc.blank()) // non c'è ? TString cod_ind_sped = rec.get(DOC_CODINDSP).as_string();
tipodoc = td.tipo_doc_sdi(); TString rif = get_dest_sdi(rec.get_string(CFV_TIPOCF)[0], rec.get_long(CFV_CODCF), EMPTY_STRING);
if (today <data_inizio && (tipodoc == "TD24" || tipodoc == "TD25" || tipodoc == "TD27"))
tipodoc = "TD01";
row.add(tipodoc);
row.add(rec.get(DOC_NDOC).as_int());
row.add(rec.get(DOC_DATADOC).as_date());
row.add(rec.get(CFV_CODCF).as_int());
row.add(rec.get("20." CLI_RAGSOC).as_string());
TString cod_ind_sped = rec.get(DOC_CODINDSP).as_string();
TString rif = get_dest_sdi(rec.get(CFV_TIPOCF).as_string()[0], rec.get(CFV_CODCF).as_int(), cod_ind_sped);
// Se è ancora vuoto potrebbe essere estero // Se è ancora vuoto potrebbe essere estero
if(rif.empty()) if(rif.empty())
{ {
@ -247,17 +181,17 @@ void TPAR_mask::fill()
{ {
first = false; first = false;
// Abilito la colonna del codice ufficio per segnalare l'errore // Abilito la colonna del codice ufficio per segnalare l'errore
docs.enable_column(docs.cid2index(S_UFFICIO)); regs.enable_column(regs.cid2index(S_UFFICIO));
} }
docs.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, rec.current_row(), docs.cid2index(S_UFFICIO)); regs.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, rec.current_row(), regs.cid2index(S_UFFICIO));
fat_no_cod++; fat_no_cod++;
} }
; regs.set_row_cell(S_UFFICIO, rif, r);
row.add(rif); regs.set_row_cell(S_RIFAMM, cli.vendite().get(CFV_PARIFAMM), r);
row.add(rec.get("17." CFV_PARIFAMM).as_string()); regs.set_row_cell(S_COFI, cli.get(CLI_COFI), r);
row.add(rec.get("20." CLI_COFI).as_string());
bool split = cli.get_bool("20." CLI_SPLITPAY);
bool split = rec.get("20." CLI_SPLITPAY).as_bool();
if (split) if (split)
{ {
const long numreg = rec.get(DOC_NUMREG).as_int(); const long numreg = rec.get(DOC_NUMREG).as_int();
@ -267,16 +201,13 @@ void TPAR_mask::fill()
split = is_split_payment(mov); split = is_split_payment(mov);
} }
} }
row.add(split ? "X" : " "); regs.set_row_cell(S_SPLITPAY, split, r);
regs.set_row_cell(S_ATTACH, false, r); // verificare
const bool attach = !rec.get("COLL_GOLEM").is_empty(); regs.set_row_cell(S_ONLYGEN, true, r); // verificare
row.add(attach ? "X" : " ");
row.add(!td.invio_xml() ? "X" : "");
} }
docs.force_update(); regs.force_update();
docs.show(); regs.show();
if (fat_no_cod > 0) if (fat_no_cod > 0)
warning_box("Sono state trovate una o più fatture senza codice destinatario né pec"); warning_box("Sono state trovate una o più fatture senza codice destinatario né pec");
@ -289,7 +220,7 @@ void TPAR_mask::set_filter_changed()
void TPAR_mask::set_pronto() void TPAR_mask::set_pronto()
{ {
TString_array& sht = sfield(F_DOCS).rows_array(); TString_array& sht = sfield(F_REGS).rows_array();
TProgress_monitor pi(sht.items(), "Esportazione Fatture"); TProgress_monitor pi(sht.items(), "Esportazione Fatture");
FOR_EACH_ARRAY_ROW(sht, r, riga) FOR_EACH_ARRAY_ROW(sht, r, riga)
{ {
@ -302,7 +233,7 @@ void TPAR_mask::set_pronto()
static TString campo_hfatt, campo_bfatt, query; static TString campo_hfatt, campo_bfatt, query;
TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), EMPTY_STRING, riga->get_long(xvtil_cid2index(S_NUMREG))); TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), EMPTY_STRING, riga->get_long(xvtil_cid2index(S_NUMREG)));
if (chiave_paf(doc, campo_hfatt, campo_bfatt)) if (chiave_paf_doc(doc, campo_hfatt, campo_bfatt))
{ {
// Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo // Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo
query.cut(0) << "UPDATE PAF0100F SET P1_GESTIONE = 'P' WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'"; query.cut(0) << "UPDATE PAF0100F SET P1_GESTIONE = 'P' WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'";
@ -317,7 +248,7 @@ void TPAR_mask::set_pronto()
void TPAR_mask::connect_keys() void TPAR_mask::connect_keys()
{ {
TString_array& sht = sfield(F_DOCS).rows_array(); TString_array& sht = sfield(F_REGS).rows_array();
TLog_report legno("Allineamento chiavi documento"); TLog_report legno("Allineamento chiavi documento");
// Non sto a fare 8000 variabili, oggi mi sento a corto di Byte // Non sto a fare 8000 variabili, oggi mi sento a corto di Byte
static TString msg_log; static TString msg_log;
@ -340,7 +271,7 @@ void TPAR_mask::connect_keys()
TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), EMPTY_STRING, riga->get_long(xvtil_cid2index(S_NUMREG))); TDocumento doc('D', riga->get_int(xvtil_cid2index(S_ANNO)), EMPTY_STRING, riga->get_long(xvtil_cid2index(S_NUMREG)));
static TString campo_hfatt, campo_bfatt, query; static TString campo_hfatt, campo_bfatt, query;
if (chiave_paf(doc, campo_hfatt, campo_bfatt)) if (chiave_paf_doc(doc, campo_hfatt, campo_bfatt))
{ {
// Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo // Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo
query.cut(0) << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'"; query.cut(0) << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'";
@ -440,7 +371,7 @@ void TPAR_mask::export_paf()
{ {
int ndocs = 0; int ndocs = 0;
TLocalisamfile doc(LF_DOC); TLocalisamfile doc(LF_DOC);
TString_array& sht = sfield(F_DOCS).rows_array(); TString_array& sht = sfield(F_REGS).rows_array();
TDoc_fp elab; TDoc_fp elab;
//elab.set_cache_insert(true); //elab.set_cache_insert(true);
@ -454,8 +385,8 @@ void TPAR_mask::export_paf()
if (riga->starts_with("X")) if (riga->starts_with("X"))
{ {
const int anno = riga->get_int(sfield(F_DOCS).cid2index(S_ANNO)); const int anno = riga->get_int(sfield(F_REGS).cid2index(S_ANNO));
const long nreg = riga->get_long(sfield(F_DOCS).cid2index(S_NUMREG)); const long nreg = riga->get_long(sfield(F_REGS).cid2index(S_NUMREG));
const TDoc_key key(anno, EMPTY_STRING, nreg); //da fare const TDoc_key key(anno, EMPTY_STRING, nreg); //da fare
// Verifico che il codice sdi nello sheet sia lo stesso sulla testata del documento in caso contrario lo aggiorno // Verifico che il codice sdi nello sheet sia lo stesso sulla testata del documento in caso contrario lo aggiorno
@ -502,7 +433,7 @@ bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
case F_DATAEND: case F_DATAEND:
if (e == fe_init) if (e == fe_init)
o.set(TDate(TODAY)); o.set(TDate(TODAY));
case F_DOCS: case F_REGS:
if (e == se_query_add || e == se_query_del) if (e == se_query_add || e == se_query_del)
return false; return false;
break; break;
@ -513,15 +444,10 @@ bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
case DLG_USER: case DLG_USER:
if (e == fe_button && jolly > 0) if (e == fe_button && jolly > 0)
{ {
TSheet_field& docs = sfield(F_DOCS); TSheet_field& regs = sfield(F_REGS);
TToken_string& row = docs.row(docs.selected()); TToken_string& row = regs.row(regs.selected());
TRectype doc(LF_DOC); // Salvo subito su file le impostazioni di esportazione, in fplib accedo ai file
doc.put(DOC_PROVV, 'D'); save_all_fields();
doc.put(DOC_ANNO, row.get(1));
doc.put(DOC_CODNUM, row.get(2));
doc.put(DOC_TIPODOC, row.get(3));
doc.put(DOC_NDOC, row.get(5));
if (doc.edit(LF_DOC, "", "ve0")) // Perchè prima andava senza dovergli mettere nulla?
fill(); fill();
} }
break; break;
@ -529,8 +455,8 @@ bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
if (e == fe_button) if (e == fe_button)
{ {
TSheet_field& docs = sfield(F_DOCS); TSheet_field& regs = sfield(F_REGS);
TString_array& sht = docs.rows_array(); TString_array& sht = regs.rows_array();
const int items = sht.items(); const int items = sht.items();
if (items > 0) if (items > 0)
@ -538,7 +464,7 @@ bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
const TString4 select = *(sht.row(0).get(0)) == 'X' ? "" : "X"; const TString4 select = *(sht.row(0).get(0)) == 'X' ? "" : "X";
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
sht.row(i).add(select, 0); sht.row(i).add(select, 0);
docs.force_update(); regs.force_update();
} }
} }
} }
@ -580,7 +506,7 @@ void TPAR_mask::next_page(int p)
{ {
if ((ok = _filter_changed = check_full_fields())) if ((ok = _filter_changed = check_full_fields()))
{ {
TSheet_field& sf = sfield(F_DOCS); save_all_fields();
fill(); fill();
_filter_changed = false; _filter_changed = false;
} }
@ -605,7 +531,7 @@ bool TPAR_mask::on_key(const KEY key)
bool TPAR_mask::check_not_empty() bool TPAR_mask::check_not_empty()
{ {
TSheet_field& sheet = sfield(F_DOCS); TSheet_field& sheet = sfield(F_REGS);
TString msg; TString msg;
if (sheet.empty()) if (sheet.empty())
@ -637,8 +563,10 @@ bool TPAR_mask::check_doc_filter(const TDocumentoEsteso& d) const
const TString& tipodoc = d.get(DOC_TIPODOC); const TString& tipodoc = d.get(DOC_TIPODOC);
const char stato = d.stato(); const char stato = d.stato();
const TTipo_documento& td = cached_tipodoc(d.get(DOC_TIPODOC)); const TTipo_documento& td = cached_tipodoc(d.get(DOC_TIPODOC));
TSheet_field & scaus = sfield(F_CAUSALI_TIPO);
// Mi precarico la tabella dei documenti scelti // Mi precarico la tabella dei documenti scelti
FOR_EACH_SHEET_ROW(sfield(F_CAUSALI_TIPO), nr, row) FOR_EACH_SHEET_ROW(scaus, nr, row)
{ {
if (codnum.compare(row->get(_codnum)) == 0 && // Codice numerazione if (codnum.compare(row->get(_codnum)) == 0 && // Codice numerazione
tipodoc.compare(row->get(_tipodoc)) == 0 && // Tipo documento tipodoc.compare(row->get(_tipodoc)) == 0 && // Tipo documento
@ -653,36 +581,27 @@ bool TPAR_mask::check_doc_filter(const TDocumentoEsteso& d) const
void TPAR_mask::set_err_paf() void TPAR_mask::set_err_paf()
{ {
// Vado a riportare sui paf l'errore // Vado a riportare sui paf l'errore
TSheet_field& sfld = sfield(F_DOCS); TSheet_field& sfld = sfield(F_REGS);
TString_array& sht = sfld.rows_array(); TProgress_monitor pi(sfld.items(), "Cambio stato fatture");
TLocalisamfile fdoc(LF_DOC); const TString tipodocsdi = get(F_TIPO_SDI);
if (!sht.empty())
{
TProgress_monitor pi(sht.items(), "Cambio stato fatture");
FOR_EACH_ARRAY_ROW(sht, r, riga) FOR_EACH_SHEET_ROW_LOOP(sfld, r)
{ {
if (!pi.add_status()) if (!pi.add_status())
break; break;
if (riga->starts_with("X")) if (sfld.get_bool_row_cell(r, S_SELECTED))
{ {
const int anno = riga->get_int(sfield(F_DOCS).cid2index(S_ANNO));
const long nreg = riga->get_long(sfield(F_DOCS).cid2index(S_NUMREG));
const TDoc_key key(anno, EMPTY_STRING, nreg);
// Ricontrollo che la fattura sia presente in Campo prima di cambiare stato // Ricontrollo che la fattura sia presente in Campo prima di cambiare stato
fdoc.zero(); long nreg = sfld.get_long_row_cell(r, S_NUMREG);
fdoc.put(DOC_PROVV, key.provv()); const TRectype & mov = cache().get(LF_MOV, nreg);
fdoc.put(DOC_ANNO, key.anno());
fdoc.put(DOC_CODNUM, key.codnum());
fdoc.put(DOC_NDOC, key.ndoc());
TString hfatt, bfatt; TString hfatt, bfatt;
TPaf_record paf0100f("PAF0100F"); TPaf_record paf0100f("PAF0100F");
if (fdoc.read() == NOERR && chiave_paf(fdoc.curr(), hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt))
if (chiave_paf_mov(mov, tipodocsdi, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt))
{ {
static TString query; TString query;
query.cut(0) << query <<
"UPDATE PAF0100F SET P1_GESTIONE = 'E', P1_KEYPRGINVIO = 'DELETED' WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF0100F SET P1_GESTIONE = 'E', P1_KEYPRGINVIO = 'DELETED' WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';\n" <<
"UPDATE PAF0200F SET P2_GESTIONE = 'E', P2_KEYPRGINVIO = 'DELETED' WHERE P2_KEYHEADERFATT = '" << hfatt << "' AND P2_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF0200F SET P2_GESTIONE = 'E', P2_KEYPRGINVIO = 'DELETED' WHERE P2_KEYHEADERFATT = '" << hfatt << "' AND P2_KEYBODYFATT = '" << bfatt << "';\n" <<
"UPDATE PAF0400F SET P4_GESTIONE = 'E', P4_KEYPRGINVIO = 'DELETED' WHERE P4_KEYHEADERFATT = '" << hfatt << "' AND P4_KEYBODYFATT = '" << bfatt << "';\n" << "UPDATE PAF0400F SET P4_GESTIONE = 'E', P4_KEYPRGINVIO = 'DELETED' WHERE P4_KEYHEADERFATT = '" << hfatt << "' AND P4_KEYBODYFATT = '" << bfatt << "';\n" <<
@ -708,23 +627,32 @@ void TPAR_mask::set_err_paf()
"UPDATE PAFW300F SET PW_KEYPRGINVIO = 'DELETED' WHERE PW_KEYHEADERFATT = '" << hfatt << "' AND PW_KEYBODYFATT = '" << bfatt << "';\n"; "UPDATE PAFW300F SET PW_KEYPRGINVIO = 'DELETED' WHERE PW_KEYHEADERFATT = '" << hfatt << "' AND PW_KEYBODYFATT = '" << bfatt << "';\n";
if(!fp_db().sq_set_exec(query)) if(!fp_db().sq_set_exec(query))
{ {
TString err = "Impossibile salvare la fattura "; err << anno << " " << " " << nreg << "\nVerrà saltata."; TString err = "Impossibile salvare la regolarizzazione "; err << nreg << "\nVerrà saltata.";
error_box(err); error_box(err);
} }
} }
else else
{ {
TString err = "Impossibile trovare la fattura "; err << anno << " " << " " << nreg << "\nVerrà saltata."; TString err = "Impossibile trovare la fattura "; err << nreg << "\nVerrà saltata.";
error_box(err); error_box(err);
} }
} }
} }
fp_db().sq_commit(); fp_db().sq_commit();
}
force_reload_sheet(); force_reload_sheet();
} }
TPAR_mask::TPAR_mask() : TAutomask("fp0700a"), _filter_changed(true), _enable_chiave_fixer(false)
{
disable(DLG_OK);
disable(DLG_SAVEREC);
disable(DLG_FINDREC);
load_all_fields();
const TDate data_inizio = get_date_start_new_fatt();
__mask = this;
}
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
// TReg2Paf // TReg2Paf

View File

@ -1,11 +1,11 @@
#define F_DATAINI 401 #define F_DATAINI 401
#define F_DATAEND 402 #define F_DATAEND 402
#define F_DOCSEL 403 #define F_REGSEL 403
#define F_CAUSALI_TIPO 404 #define F_CAUSALI_TIPO 404
#define F_TIPO_SDI 405 #define F_TIPO_SDI 405
#define F_DOCS 406 #define F_REGS 406
#define START_MASK F_DATAINI #define START_MASK F_DATAINI
#define END_MASK F_DOCS #define END_MASK F_REGS
#define S_COD_CAUS 101 #define S_COD_CAUS 101

View File

@ -62,11 +62,14 @@ BEGIN
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
RADIOBUTTON F_DOCSEL 7 80 RADIOBUTTON F_REGSEL 7 80
BEGIN BEGIN
PROMPT 1 3 "Documenti da visualizzare" PROMPT 1 3 "Registrazioni da visualizzare"
ITEM "P|Provvisori" ITEM "|Da inviare"
ITEM "D|Definitivi" ITEM "X|XML Generato"
ITEM "N|Notificato"
ITEM "E|In errore"
ITEM "D|Diag."
FLAGS "Z" FLAGS "Z"
END END
@ -97,7 +100,7 @@ END
ENDPAGE ENDPAGE
PAGE "Elenco Regolarizzazioni" 0 2 0 0 PAGE "Elenco Regolarizzazioni" 0 2 0 0
SPREADSHEET F_DOCS SPREADSHEET F_REGS
BEGIN BEGIN
PROMPT 0 2 "" PROMPT 0 2 ""
ITEM "@1" ITEM "@1"

View File

@ -35,8 +35,9 @@ TString& complete_num_fp(const TCodice_numerazione& codnum, const int numdoc);
// Genera la chiave per i paf // Genera la chiave per i paf
bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt); bool chiave_paf_mov(const TRectype& mov, const TString & tipodoc, TString& hfatt, TString& bfatt);
bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt); bool chiave_paf_doc(const TDocumento& doc, TString& hfatt, TString& bfatt);
bool chiave_paf_doc(const TRectype& doc, TString& hfatt, TString& bfatt);
// Ritorna cod sdi, pec o vuoto. Chiama get_coddest() // Ritorna cod sdi, pec o vuoto. Chiama get_coddest()
TString get_dest_sdi(char tipocf, long codcf, const TString& cod_ind_sped); TString get_dest_sdi(char tipocf, long codcf, const TString& cod_ind_sped);
// Valorizza codice sdi e pec in base alle configurazioni del monitor // Valorizza codice sdi e pec in base alle configurazioni del monitor
@ -421,9 +422,8 @@ inline TFP_custom_cache& cached_custom_fp()
return *carmelo; return *carmelo;
} }
class TFP_expression : public TObject class TFP_expression : public TObject // ma perchè non derivano da expre documento cazzone ? se sono più espressioni prima si separa la token string
{ {
private:
enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq, and, or }; enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq, and, or };
// Etrattori // Etrattori
@ -445,8 +445,8 @@ public:
static bool check_condition(const TString& cond, TRiga_documento& rdoc); static bool check_condition(const TString& cond, TRiga_documento& rdoc);
static bool check_condition(const TString& cond, TDocumento& doc) { return check_condition(cond, doc[1]); } static bool check_condition(const TString& cond, TDocumento& doc) { return check_condition(cond, doc[1]); }
TFP_expression() = default; TFP_expression() {};
virtual ~TFP_expression() = default; virtual ~TFP_expression() {};
}; };
// Gestione PAF // Gestione PAF

View File

@ -159,7 +159,27 @@ TString& complete_num_fp(const TCodice_numerazione& codnum, const int numdoc)
*/ */
// Crea la coppia di chiavi per il db PAF a partire da un documento vero e proprio // Crea la coppia di chiavi per il db PAF a partire da un documento vero e proprio
bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt) bool chiave_paf_mov(const TRectype& mov, const TString & tipodoc, TString& hfatt, TString& bfatt)
{
TCli_for cli(mov.get_char(MOV_TIPO), mov.get_long(MOV_CODCF));
hfatt.cut(0);
if (cli.is_occasionale())
hfatt << "O" << mov.get(MOV_OCFPI);
else
hfatt << cli.tipo() << cli.codice();
CHECK(hfatt.full(), "Destinatario fattura P.A. non valido");
//20180101_TD01_123456712345671234567
TString numdoc = mov.get(MOV_NUMDOC);
numdoc.lpad(mov.length(DOC_NDOC), '0');
bfatt = mov.get_date(MOV_DATAREG).date2ansi();
bfatt << '_' << tipodoc << '_' << numdoc;
return hfatt.full() && bfatt.full();
}
bool chiave_paf_doc(const TDocumento& doc, TString& hfatt, TString& bfatt)
{ {
hfatt.cut(0); hfatt.cut(0);
if (doc.clifor().is_occasionale()) if (doc.clifor().is_occasionale())
@ -174,10 +194,10 @@ bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt)
} }
// Crea la coppia di chiavi per il db PAF a partire da un semplice record di testata documento // Crea la coppia di chiavi per il db PAF a partire da un semplice record di testata documento
bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt) bool chiave_paf_doc(const TRectype& doc, TString& hfatt, TString& bfatt)
{ {
const TDocumento d(doc); const TDocumento d(doc);
chiave_paf(d, hfatt, bfatt); chiave_paf_doc(d, hfatt, bfatt);
return hfatt.full(); return hfatt.full();
} }
@ -1015,7 +1035,7 @@ bool TDoc_fp::initialize(TDocumentoEsteso& doc)
// Paese del documento // Paese del documento
_paese = "IT"; _paese = "IT";
_has_bolla = false; _has_bolla = false;
if (!chiave_paf(doc, _hfatt, _bfatt)) if (!chiave_paf_doc(doc, _hfatt, _bfatt))
return false; return false;
// Preparo il log // Preparo il log
log(-1, _bfatt); log(-1, _bfatt);
@ -1838,16 +1858,19 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
rifs.trim(); rifs.trim();
if (rifs == "0") if (rifs == "0")
rifs.cut(0); rifs.cut(0);
int pos = rifs.find(" - ");
int len = rifs.len(); int len = rifs.len();
long numlinea = 0;
if (len > 0 && pos < 0) if (len > 0)
pos = len;
for(; pos >= 0;)
{ {
TToken_string rif(rifs.left(pos), ' '); rifs.replace(" - ", "|");
long numlinea = 0;
TToken_string elab_rifs(rifs);
FOR_EACH_STR_TOKEN(elab_rifs, str)
{
TToken_string rif(str, ' ');
// <DatiDDT> // // <DatiDDT> //
reset(paf1600f); reset(paf1600f);
@ -1860,13 +1883,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf1600f.set("PF_DATADDT", dataddt); paf1600f.set("PF_DATADDT", dataddt);
paf1600f.set("PF_GESTIONE", "D"); paf1600f.set("PF_GESTIONE", "D");
paf1600f.set("PF_RIFNUMLINEA", numlinea++); paf1600f.set("PF_RIFNUMLINEA", numlinea++);
ok &= insert(paf1600f); ok &= insert(paf1600f); // </DatiDDT>
rifs.ltrim(pos + 3); }
pos = rifs.find(" - ");
len = rifs.len();
if (len > 0 && pos < 0)
pos = len;
// </DatiDDT>
} }
} }
FOR_EACH_PHYSICAL_FPRDOC(doc, r, rdoc) FOR_EACH_PHYSICAL_FPRDOC(doc, r, rdoc)

View File

@ -91,7 +91,7 @@ bool TFp_mail_sender::send(const TString& msg)
TPaf_record paf0100f("PAF0100F"); TPaf_record paf0100f("PAF0100F");
TString query; TString query;
if (chiave_paf(fdoc, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt)) if (chiave_paf_doc(fdoc, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt))
{ {
query << "UPDATE PAF0100F SET P1_ERRINT = 'S' WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "'"; query << "UPDATE PAF0100F SET P1_ERRINT = 'S' WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "'";
fp_db().sq_set_exec(query); fp_db().sq_set_exec(query);

View File

@ -477,7 +477,8 @@ void TFP_expression::split_condition(const TString& cond, TString& cond_sx, TStr
} }
} }
// Questa funzione potrebbe diventare standard per TRectype // Questa funzione potrebbe diventare standard per TRectype. Ma vai a cagare i variant sono da eliminare
TVariant& TFP_expression::get_value(const TRectype& rec, const TString& campo) TVariant& TFP_expression::get_value(const TRectype& rec, const TString& campo)
{ {
TVariant& ret = get_tmp_var(); TVariant& ret = get_tmp_var();

View File

@ -73,7 +73,7 @@ int n;
tmpa[i] = pSrc[i]; tmpa[i] = pSrc[i];
/* sort pointers */ /* sort pointers */
qsort((void *)tmpa,n,sizeof(DEC *), _SortInc); qsort((void *)tmpa,n,sizeof(DEC *), (int (__cdecl *)(void)) _SortInc);
if (n%2) if (n%2)
_MacDCopy(pDst, tmpa[(n-1)/2]); _MacDCopy(pDst, tmpa[(n-1)/2]);

View File

@ -5,7 +5,6 @@
#include "../cg/cglib.h" #include "../cg/cglib.h"
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TRigheF24_set // TRigheF24_set
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -5,7 +5,7 @@
#include <utility.h> #include <utility.h>
#include "../cg/cg2101.h" #include "../cg/cg2101.h"
#include "../cg/cg2103.h" #include "../cg/cglib.h"
#include "../cg/cgsaldac.h" #include "../cg/cgsaldac.h"
#include "../mg/movmag.h" #include "../mg/movmag.h"
#include "../mg/rmovmag.h" #include "../mg/rmovmag.h"

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