Skip to content

Commit 3b79c1d

Browse files
committed
1 parent 0de4dec commit 3b79c1d

233 files changed

Lines changed: 177641 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 16
4+
VisualStudioVersion = 16.0.31729.503
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Px5Migrator", "Px5Migrator\Px5Migrator.csproj", "{F2BA3515-821E-4960-85F5-16C5122303B9}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14+
{F2BA3515-821E-4960-85F5-16C5122303B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{F2BA3515-821E-4960-85F5-16C5122303B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{F2BA3515-821E-4960-85F5-16C5122303B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{F2BA3515-821E-4960-85F5-16C5122303B9}.Release|Any CPU.Build.0 = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(SolutionProperties) = preSolution
20+
HideSolutionNode = FALSE
21+
EndGlobalSection
22+
GlobalSection(ExtensibilityGlobals) = postSolution
23+
SolutionGuid = {D4A70624-FA9F-47C6-876E-AA79C6DBA072}
24+
EndGlobalSection
25+
EndGlobal
Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!--
3+
For more information on how to configure your ASP.NET application, please visit
4+
http://go.microsoft.com/fwlink/?LinkId=169433
5+
-->
6+
<configuration>
7+
<configSections>
8+
<section name="appStatic" type="System.Configuration.NameValueSectionHandler" />
9+
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
10+
</configSections>
11+
<system.codedom>
12+
<compilers>
13+
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
14+
</compilers>
15+
</system.codedom>
16+
<runtime>
17+
<gcAllowVeryLargeObjects enabled="true" />
18+
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
19+
<dependentAssembly>
20+
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
21+
<bindingRedirect oldVersion="0.0.0.0-2.0.14.0" newVersion="2.0.14.0" />
22+
</dependentAssembly>
23+
</assemblyBinding>
24+
</runtime>
25+
<appSettings>
26+
<!--
27+
**********************************************************************
28+
API
29+
**********************************************************************
30+
-->
31+
<!-- API - Maintenance flag [TRUE, FALSE] -->
32+
<add key="API_MAINTENANCE" value="FALSE" />
33+
<!-- API - Windows Authentication [ANONYMOUS, WINDOWS, ANY] -->
34+
<add key="API_AUTHENTICATION_TYPE" value="ANY" />
35+
<!-- API - Stateless [TRUE, FALSE] -->
36+
<add key="API_STATELESS" value="TRUE" />
37+
<!-- API - Success response (case sensitive) -->
38+
<add key="API_SUCCESS" value="success" />
39+
<!-- API - Session Cookie (case sensitive) -->
40+
<add key="API_SESSION_COOKIE" value="session" />
41+
<!--
42+
**********************************************************************
43+
API - JSONRPC
44+
**********************************************************************
45+
-->
46+
<!-- API - JSONRPC - Mask parameters (comas separated, case insensitive) -->
47+
<add key="API_JSONRPC_MASK_PARAMETERS" value="MtrInput,Lgn1Fa,Totp" />
48+
<!--
49+
**********************************************************************
50+
API - eMail
51+
**********************************************************************
52+
-->
53+
<!-- EMAIL - MAIL - Switch on [TRUE] or off [FALSE] the Email service -->
54+
<add key="API_EMAIL_ENABLED" value="FALSE" />
55+
<!-- EMAIL - MAIL - NoReply email address -->
56+
<add key="API_EMAIL_MAIL_NOREPLY" value="" />
57+
<!-- EMAIL - MAIL - Sender email address -->
58+
<add key="API_EMAIL_MAIL_SENDER" value="" />
59+
<!-- EMAIL - SMTP - Server IP address -->
60+
<add key="API_EMAIL_SMTP_SERVER" value="" />
61+
<!-- EMAIL - SMTP - Port number -->
62+
<add key="API_EMAIL_SMTP_PORT" value="25" />
63+
<!-- EMAIL - SMTP - Switch on [TRUE] or off [FALSE] the authentication -->
64+
<add key="API_EMAIL_SMTP_AUTHENTICATION" value="FALSE" />
65+
<!-- EMAIL - SMTP - Set the Username if authentication is required -->
66+
<add key="API_EMAIL_SMTP_USERNAME" value="" />
67+
<!-- EMAIL - SMTP - Set the Password if authentication is required -->
68+
<add key="API_EMAIL_SMTP_PASSWORD" value="" />
69+
<!-- EMAIL - SMTP - Switch on [TRUE] or off [FALSE] the SSL -->
70+
<add key="API_EMAIL_SMTP_SSL" value="FALSE" />
71+
<!-- EMAIL - TEMPLATE - Datetime Mask -->
72+
<add key="API_EMAIL_DATETIME_MASK" value="dd/MM/yyyy - HH:mm:ss" />
73+
<!--
74+
**********************************************************************
75+
API - ADO
76+
**********************************************************************
77+
-->
78+
<!-- ADO - Default Connection Name -->
79+
<add key="API_ADO_DEFAULT_CONNECTION" value="defaultConnection" />
80+
<!-- ADO - Execution timeout in seconds -->
81+
<add key="API_ADO_EXECUTION_TIMEOUT" value="3600" />
82+
<!-- ADO - Bulk Copy timeout in seconds -->
83+
<add key="API_ADO_BULKCOPY_TIMEOUT" value="3600" />
84+
<!-- ADO - Bulk Copy BatchSize in number of rows -->
85+
<add key="API_ADO_BULKCOPY_BATCHSIZE" value="50000" />
86+
<!--
87+
**********************************************************************
88+
MIGRATION
89+
**********************************************************************
90+
-->
91+
<add key="ClientSettingsProvider.ServiceUri" value="" />
92+
<add key="DEFAUT_STATISTIC_CODE" value="STATISTIC" />
93+
<add key="DEFAUT_STATISTIC_VALUE" value="Statistic" />
94+
</appSettings>
95+
<!-- Static configuration -->
96+
<appStatic configSource="Static.config" />
97+
<!--
98+
**********************************************************************
99+
DB - Connection Strings
100+
**********************************************************************
101+
-->
102+
<connectionStrings>
103+
<add name="defaultConnection" connectionString="Server=;Initial Catalog=;User ID=;Password=;Persist Security Info=False;Column Encryption Setting=enabled;" />
104+
</connectionStrings>
105+
<!--
106+
**********************************************************************
107+
LOGGING - Log4Net
108+
**********************************************************************
109+
-->
110+
<log4net>
111+
<root>
112+
<!-- Set the level to ERROR for Live/UAT and ALL for TD-->
113+
<level value="ERROR" />
114+
<appender-ref ref="FileAppender" />
115+
<appender-ref ref="SmtpAppender" />
116+
<appender-ref ref="AdoNetAppender" />
117+
</root>
118+
<appender name="FileAppender" type="log4net.Appender.FileAppender">
119+
<!-- Set threshold to ERROR for Live/UAT and ALL for TD-->
120+
<threshold value="ERROR" />
121+
<file type="log4net.Util.PatternString" value="Logs\Log4Net.[%processid].log" />
122+
<appendToFile value="true" />
123+
<layout type="log4net.Layout.PatternLayout">
124+
<conversionPattern value="%date [%thread] %level %class.%method:%line - %message%newline" />
125+
</layout>
126+
<filter type="log4net.Filter.LevelMatchFilter">
127+
<acceptOnMatch value="false" />
128+
<levelToMatch value="INFO" />
129+
</filter>
130+
<lockingModel type="log4net.Appender.FileAppender+InterProcessLock" />
131+
</appender>
132+
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
133+
<!-- Set threshold to ERROR for Live/UAT and OFF for TD-->
134+
<threshold value="OFF" />
135+
<!-- List of coma separated emails for the recipients -->
136+
<to value="" />
137+
<!-- Email of the sender -->
138+
<from value="" />
139+
<!-- Email's subject -->
140+
<subject type="log4net.Util.PatternString" value="Error log" />
141+
<!-- SMTP IP address -->
142+
<smtpHost value="3.1.2.22" />
143+
<!-- SMTP IP port -->
144+
<port value="25" />
145+
<authentication value="None" />
146+
<bufferSize value="1" />
147+
<lossy value="true" />
148+
<layout type="log4net.Layout.PatternLayout">
149+
<conversionPattern value="%date [%thread] %level %class.%method:%line - %message%newline" />
150+
</layout>
151+
</appender>
152+
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
153+
<!-- Set threshold to ERROR for Live/UAT and ALL for TD-->
154+
<threshold value="OFF" />
155+
<bufferSize value="1" />
156+
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
157+
<connectionString value="Server=;Initial Catalog=;User ID=;Password=;Persist Security Info=False;Column Encryption Setting=enabled;" />
158+
<commandText value="INSERT INTO TD_LOGGING ([LGG_DATETIME],[LGG_THREAD],[LGG_LEVEL],[LGG_CLASS],[LGG_METHOD],[LGG_LINE],[LGG_MESSAGE],[LGG_EXCEPTION]) VALUES (@Datetime,@Thread,@Level,@Class,@Method,@Line,@Message,@Exception)" />
159+
<parameter>
160+
<parameterName value="@Datetime" />
161+
<dbType value="DateTime" />
162+
<layout type="log4net.Layout.RawTimeStampLayout" />
163+
</parameter>
164+
<parameter>
165+
<parameterName value="@Thread" />
166+
<dbType value="String" />
167+
<size value="8" />
168+
<layout type="log4net.Layout.PatternLayout">
169+
<conversionPattern value="%thread" />
170+
</layout>
171+
</parameter>
172+
<parameter>
173+
<parameterName value="@Level" />
174+
<dbType value="String" />
175+
<size value="8" />
176+
<layout type="log4net.Layout.PatternLayout">
177+
<conversionPattern value="%level" />
178+
</layout>
179+
</parameter>
180+
<parameter>
181+
<parameterName value="@Class" />
182+
<dbType value="String" />
183+
<size value="256" />
184+
<layout type="log4net.Layout.PatternLayout">
185+
<conversionPattern value="%class" />
186+
</layout>
187+
</parameter>
188+
<parameter>
189+
<parameterName value="@Method" />
190+
<dbType value="String" />
191+
<size value="256" />
192+
<layout type="log4net.Layout.PatternLayout">
193+
<conversionPattern value="%method" />
194+
</layout>
195+
</parameter>
196+
<parameter>
197+
<parameterName value="@Line" />
198+
<dbType value="String" />
199+
<size value="8" />
200+
<layout type="log4net.Layout.PatternLayout">
201+
<conversionPattern value="%line" />
202+
</layout>
203+
</parameter>
204+
<parameter>
205+
<parameterName value="@Message" />
206+
<dbType value="String" />
207+
<size value="-1" />
208+
<layout type="log4net.Layout.PatternLayout">
209+
<conversionPattern value="%message" />
210+
</layout>
211+
</parameter>
212+
<parameter>
213+
<parameterName value="@Exception" />
214+
<dbType value="String" />
215+
<size value="-1" />
216+
<layout type="log4net.Layout.ExceptionLayout" />
217+
</parameter>
218+
</appender>
219+
</log4net>
220+
<system.web>
221+
<membership defaultProvider="ClientAuthenticationMembershipProvider">
222+
<providers>
223+
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
224+
</providers>
225+
</membership>
226+
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
227+
<providers>
228+
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
229+
</providers>
230+
</roleManager>
231+
</system.web>
232+
</configuration>
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
using API;
2+
using System;
3+
using System.Collections.Generic;
4+
5+
namespace Px5Migrator
6+
{
7+
internal class DataReader
8+
{
9+
internal IDmatrix ReadReleaseDmatrix(IADO ado, int mtrId)
10+
{
11+
IDmatrix dmatrix = new Dmatrix();
12+
try
13+
{
14+
15+
16+
17+
dmatrix.CreatedDateString = DateTime.Now.ToString("yyyyMMdd HH:mm");
18+
dmatrix.CreatedDateTime = DateTime.Now;
19+
20+
Migration_ADO dAdo = new Migration_ADO();
21+
22+
var dmatrixData = dAdo.DataMatrixReadByMatrixId(ado, mtrId);
23+
24+
if (!dmatrixData.hasData) return dmatrix;
25+
26+
dmatrix.Code = dmatrixData.data[0].MtrCode;
27+
dmatrix.FormatVersion = dmatrixData.data[0].FrmVersion;
28+
dmatrix.IsOfficialStatistic = dmatrixData.data[0].MtrOfficialFlag;
29+
dmatrix.FormatType = dmatrixData.data[0].FrmType;
30+
dmatrix.Languages = new List<string>();
31+
dmatrix.Languages.Add(dmatrixData.data[0].LngIsoCode);
32+
dmatrix.Copyright.CprCode = dmatrixData.data[0].CprCode;
33+
dmatrix.Copyright.CprValue = dmatrixData.data[0].CprValue;
34+
dmatrix.Copyright.CprUrl = dmatrixData.data[0].CprUrl;
35+
dmatrix.Id = dmatrixData.data[0].MtrId;
36+
dmatrix.Language = dmatrixData.data[0].LngIsoCode;
37+
38+
39+
40+
IDspec dspec = new Dspec();
41+
dspec.Dimensions = new List<StatDimension>();
42+
dspec.Notes = new List<string>();
43+
44+
if (dmatrix.Cells == null)
45+
{
46+
var dbMatrixData = dAdo.GetFieldDataForMatrix(ado, dmatrix.Id);
47+
dmatrix.Cells = (List<dynamic>)DeserializeData(dbMatrixData);
48+
// dmatrix.Decimals = (short)dbMatrixData.data[0].MtdDecimal;
49+
}
50+
51+
dmatrix.Dspecs = new Dictionary<string, Dspec>();
52+
53+
IDspec spec = new Dspec();
54+
spec.Dimensions = new List<StatDimension>();
55+
spec.Contents = dmatrixData.data[0].MtrTitle;
56+
spec.CopyrightUrl = dmatrixData.data[0].CprUrl;
57+
spec.Language = dmatrix.Language;
58+
spec.MatrixCode = dmatrix.Code;
59+
spec.MatrixId = dmatrix.Id;
60+
spec.Notes = new List<string>() { dmatrixData.data[0].MtrNote };
61+
spec.Source = dmatrix.Copyright.CprValue;
62+
spec.Title = dmatrixData.data[0].MtrTitle;
63+
64+
spec.ContentVariable = "Statistic";
65+
66+
67+
68+
69+
70+
var dbDimensions = dAdo.GetDimensionsForMatrix(ado, dmatrix.Id);
71+
72+
if (dbDimensions.hasData)
73+
{
74+
int previousLambda = dmatrix.Cells.Count;
75+
76+
foreach (var dim in dbDimensions.data)
77+
{
78+
StatDimension statDim = new StatDimension()
79+
{
80+
Code = dim.MdmCode,
81+
Role = dim.DmrCode,
82+
Sequence = dim.MdmSequence,
83+
Value = dim.MdmValue,
84+
Id = dim.MdmId,
85+
Variables = new List<IDimensionVariable>()
86+
};
87+
88+
var dbVariables = dAdo.GetItemsForDimension(ado, statDim.Id);
89+
if (dbVariables.hasData)
90+
foreach (var vrb in dbVariables.data)
91+
{
92+
DimensionVariable dv = new DimensionVariable()
93+
{
94+
Code = vrb.DmtCode,
95+
Value = vrb.DmtValue,
96+
Sequence = vrb.DmtSequence,
97+
Elimination = vrb.DmtEliminationFlag,
98+
Decimals = (short)vrb.DmtDecimals,
99+
Unit = vrb.DmtUnit.Equals(DBNull.Value) ? null : vrb.DmtUnit
100+
};
101+
statDim.Variables.Add(dv);
102+
}
103+
statDim.Lambda = previousLambda / statDim.Variables.Count;
104+
statDim.PreviousLambda = previousLambda;
105+
previousLambda = statDim.Lambda;
106+
107+
spec.Dimensions.Add(statDim);
108+
}
109+
110+
111+
}
112+
dmatrix.Dspecs.Add(dmatrix.Language, (Dspec)spec);
113+
return dmatrix;
114+
}
115+
catch (Exception ex)
116+
{
117+
Log.Instance.Error($"Failed to migrate matrix: id={mtrId}");
118+
Log.Instance.Error($"Error message: {ex.Message}");
119+
return dmatrix;
120+
}
121+
}
122+
123+
private IEnumerable<dynamic> DeserializeData(ADO_readerOutput result)
124+
{
125+
return Utility.JsonDeserialize_IgnoreLoopingReference<List<dynamic>>(result.data[0].MtdData);
126+
127+
}
128+
}
129+
}

0 commit comments

Comments
 (0)