Files
Nuvolar/Nuvolar.Module.CSharp/BusinessObjects/Migration/Migration_VC.cs
T

487 lines
28 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Text;
using DevExpress.Data.Filtering;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Actions;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Layout;
using DevExpress.ExpressApp.Model.NodeGenerators;
using DevExpress.ExpressApp.SystemModule;
using DevExpress.ExpressApp.Templates;
using DevExpress.ExpressApp.Utils;
using DevExpress.ExpressApp.Xpo;
using DevExpress.Persistent.Base;
using DevExpress.Persistent.BaseImpl;
using DevExpress.Persistent.Validation;
using DevExpress.PivotGrid.Criteria;
using DevExpress.Xpo;
using MySql.Data.MySqlClient;
namespace Nuvolar.Module.BusinessObjects.Migration
{
// For more typical usage scenarios, be sure to check out https://documentation.devexpress.com/eXpressAppFramework/clsDevExpressExpressAppViewControllertopic.aspx.
public partial class Migration_VC : ViewController
{
public Migration_VC()
{
InitializeComponent();
// Target required Views (via the TargetXXX properties) and create their Actions.
}
protected override void OnActivated()
{
base.OnActivated();
// Perform various tasks depending on the target View.
}
protected override void OnViewControlsCreated()
{
base.OnViewControlsCreated();
// Access and customize the target View control.
}
protected override void OnDeactivated()
{
// Unsubscribe from previously subscribed events and release other references and resources.
base.OnDeactivated();
}
private void aMigrateBaseObjects_Execute(object sender, SimpleActionExecuteEventArgs e)
{
MigrationParameters _MigrationParameters = View.SelectedObjects[0] as MigrationParameters;
XPObjectSpace _ocur = View.ObjectSpace as XPObjectSpace;
if (_MigrationParameters.SQLType == eSQLType.MSSQL)
{
//Sync_XPObjectType_MSSQL_MySQL(_ocur);
//Sync_HCategory_ChartOfAccounts_MSSQL_MySQL(_ocur);
//Sync_ChartOfAccounts_MSSQL_MySQL(_ocur);
Sync_ChartOfAccountsYear_MSSQL_MySQL(_ocur);
//Sync_HCategory_Controlling_MSSQL_MySQL(_ocur);
}
}
private void Sync_XPObjectType_MSSQL_MySQL(XPObjectSpace _ocur)
{
MakeObjectType<HCategory>(_ocur);
MakeObjectType<ChartOfAccounts>(_ocur);
MakeObjectType<ChartOfAccountsYear>(_ocur);
MakeObjectType<Controlling>(_ocur);
MakeObjectType<ControllingYear>(_ocur);
}
private void MakeObjectType<T>(XPObjectSpace _ocur)
{
XPObjectType _XPObjectType = _ocur.FindObject<XPObjectType>(CriteriaOperator.Parse("TypeName = ?", typeof(T).FullName));
if (_XPObjectType == null)
{
Assembly a = typeof(T).Assembly;
_XPObjectType = _ocur.CreateObject<XPObjectType>();
_XPObjectType.TypeName = typeof(T).FullName;
_XPObjectType.AssemblyName = a.FullName.Split(',')[0];
}
_ocur.CommitChanges();
}
private int GetObjectTypeOID<T>(XPObjectSpace _ocur)
{
int _return = -1;
XPObjectType _XPObjectType = _ocur.FindObject<XPObjectType>(CriteriaOperator.Parse("TypeName = ?", typeof(T).FullName));
if (_XPObjectType != null)
{
_return = _XPObjectType.Oid;
}
return _return;
}
private void Sync_HCategory_ChartOfAccounts_MSSQL_MySQL(XPObjectSpace _ocur)
{
MigrationParameters _MigrationParameters = View.SelectedObjects[0] as MigrationParameters;
_ocur.Session.ExecuteNonQuery("SET FOREIGN_KEY_CHECKS=0");
string _ConnectionStringMSSQL = string.Format(" User ID={0}; " +
" Password={1};" +
" Pooling=false;" +
" Data Source={2};" +
" Initial Catalog={3}",
_MigrationParameters.SQLUser,
_MigrationParameters.SQLPassword,
_MigrationParameters.SQLServer,
_MigrationParameters.SQLDatabase);
SqlConnection _SqlConnection = new SqlConnection(_ConnectionStringMSSQL);
MySqlConnection _MySqlConnection = new MySqlConnection(Nuvolar.Module.GeneralFunction.GLOBAL_ConnectionString.Replace("XpoProvider=MySql;", ""));
_SqlConnection.Open();
_MySqlConnection.Open();
if (_SqlConnection.State == ConnectionState.Open)
{
int _ObjectType_OID = GetObjectTypeOID<ChartOfAccounts>(_ocur);
string _SQL = " select t1.* " +
" from HCategory t1" +
" where oid in (select Oid from ChartOfAccounts) and t1.GCRecord is null";
SqlCommand _SqlCommand = new SqlCommand(_SQL, _SqlConnection);
SqlDataReader _SqlDataReader = _SqlCommand.ExecuteReader();
if (_SqlDataReader.HasRows)
{
while (_SqlDataReader.Read())
{
string _MySQL = "SELECT count(*) FROM HCategory WHERE Oid=@Oid";
using (MySqlCommand _MySqlCommand = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
{
_MySqlCommand.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
object _Found = _MySqlCommand.ExecuteScalar();
if (_Found != null)
{
double _F;
IsNumeric(_Found, out _F);
if (_F == 0)
{
_MySQL = " SET FOREIGN_KEY_CHECKS=0;" +
" INSERT INTO HCategory (Oid,Parent,Name,ObjectType)" +
" SELECT @Oid,@Parent,@Name,@ObjectType;";
using (MySqlCommand _MySqlCommand_Insert = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
{
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@Parent", DbType = DbType.Guid, Value = _SqlDataReader["Parent"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@Name", DbType = DbType.String, Value = _SqlDataReader["Name"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ObjectType", DbType = DbType.Int64, Value = _ObjectType_OID });
_MySqlCommand_Insert.ExecuteNonQuery();
}
}
else // Ha már VAN
{
_MySQL = " SET FOREIGN_KEY_CHECKS=0;" +
" UPDATE HCategory SET Name=@Name," +
" Parent=@Parent " +
" WHERE Oid=@Oid";
using (MySqlCommand _MySqlCommand_Update = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
{
_MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
_MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Parent", DbType = DbType.Guid, Value = _SqlDataReader["Parent"] });
_MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Name", DbType = DbType.String, Value = _SqlDataReader["Name"] });
_MySqlCommand_Update.ExecuteNonQuery();
}
}
}
}
}
}
}
_SqlConnection.Close();
_MySqlConnection.Close();
_ocur.Session.ExecuteNonQuery("SET FOREIGN_KEY_CHECKS=1");
}
private void Sync_HCategory_Controlling_MSSQL_MySQL(XPObjectSpace _ocur)
{
MigrationParameters _MigrationParameters = View.SelectedObjects[0] as MigrationParameters;
_ocur.Session.ExecuteNonQuery("SET FOREIGN_KEY_CHECKS=0");
string _ConnectionStringMSSQL = string.Format(" User ID={0}; " +
" Password={1};" +
" Pooling=false;" +
" Data Source={2};" +
" Initial Catalog={3}",
_MigrationParameters.SQLUser,
_MigrationParameters.SQLPassword,
_MigrationParameters.SQLServer,
_MigrationParameters.SQLDatabase);
SqlConnection _SqlConnection = new SqlConnection(_ConnectionStringMSSQL);
MySqlConnection _MySqlConnection = new MySqlConnection(Nuvolar.Module.GeneralFunction.GLOBAL_ConnectionString.Replace("XpoProvider=MySql;", ""));
_SqlConnection.Open();
_MySqlConnection.Open();
if (_SqlConnection.State == ConnectionState.Open)
{
int _ObjectType_OID = GetObjectTypeOID<Controlling>(_ocur);
string _SQL = " select t1.* " +
" from HCategory t1" +
" where oid in (select Oid from Controlling) and t1.GCRecord is null";
SqlCommand _SqlCommand = new SqlCommand(_SQL, _SqlConnection);
SqlDataReader _SqlDataReader = _SqlCommand.ExecuteReader();
if (_SqlDataReader.HasRows)
{
while (_SqlDataReader.Read())
{
string _MySQL = "SELECT count(*) FROM HCategory WHERE Oid=@Oid";
using (MySqlCommand _MySqlCommand = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
{
_MySqlCommand.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
object _Found = _MySqlCommand.ExecuteScalar();
if (_Found != null)
{
double _F;
IsNumeric(_Found, out _F);
if (_F == 0)
{
_MySQL = " SET FOREIGN_KEY_CHECKS=0;" +
" INSERT INTO HCategory (Oid,Parent,Name,ObjectType)" +
" SELECT @Oid,@Parent,@Name,@ObjectType;";
using (MySqlCommand _MySqlCommand_Insert = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
{
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@Parent", DbType = DbType.Guid, Value = _SqlDataReader["Parent"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@Name", DbType = DbType.String, Value = _SqlDataReader["Name"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ObjectType", DbType = DbType.Int64, Value = _ObjectType_OID });
_MySqlCommand_Insert.ExecuteNonQuery();
}
}
else // Ha már VAN
{
_MySQL = " SET FOREIGN_KEY_CHECKS=0;" +
" UPDATE HCategory SET Name=@Name," +
" Parent=@Parent " +
" WHERE Oid=@Oid";
using (MySqlCommand _MySqlCommand_Update = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
{
_MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
_MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Parent", DbType = DbType.Guid, Value = _SqlDataReader["Parent"] });
_MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Name", DbType = DbType.String, Value = _SqlDataReader["Name"] });
_MySqlCommand_Update.ExecuteNonQuery();
}
}
}
}
}
}
}
_SqlConnection.Close();
_MySqlConnection.Close();
_ocur.Session.ExecuteNonQuery("SET FOREIGN_KEY_CHECKS=1");
}
private void Sync_ChartOfAccounts_MSSQL_MySQL(XPObjectSpace _ocur)
{
MigrationParameters _MigrationParameters = View.SelectedObjects[0] as MigrationParameters;
_ocur.Session.ExecuteNonQuery("SET FOREIGN_KEY_CHECKS=0");
string _ConnectionStringMSSQL = string.Format(" User ID={0}; " +
" Password={1};" +
" Pooling=false;" +
" Data Source={2};" +
" Initial Catalog={3}",
_MigrationParameters.SQLUser,
_MigrationParameters.SQLPassword,
_MigrationParameters.SQLServer,
_MigrationParameters.SQLDatabase);
SqlConnection _SqlConnection = new SqlConnection(_ConnectionStringMSSQL);
MySqlConnection _MySqlConnection = new MySqlConnection(Nuvolar.Module.GeneralFunction.GLOBAL_ConnectionString.Replace("XpoProvider=MySql;", ""));
_SqlConnection.Open();
_MySqlConnection.Open();
if (_SqlConnection.State == ConnectionState.Open)
{
string _SQL = " select t1.* " +
" from ChartOfAccounts t1 left join HCategory t2 on" +
" t1.Oid=t2.Oid" +
" WHERE t2.GCRecord is null";
SqlCommand _SqlCommand = new SqlCommand(_SQL, _SqlConnection);
SqlDataReader _SqlDataReader = _SqlCommand.ExecuteReader();
if (_SqlDataReader.HasRows)
{
while (_SqlDataReader.Read())
{
string _MySQL = "SELECT count(*) FROM ChartOfAccounts WHERE Oid=@Oid";
using (MySqlCommand _MySqlCommand = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
{
_MySqlCommand.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
object _Found = _MySqlCommand.ExecuteScalar();
if (_Found != null)
{
double _F;
IsNumeric(_Found, out _F);
if (_F == 0)
{
_MySQL = " SET FOREIGN_KEY_CHECKS=0;" +
" INSERT INTO ChartOfAccounts (Oid,AccountYear,AccountNumber,IsParent,ChartOfAccounts_Parent,ChartOfAccounts1," +
" ChartOfAccounts2,ChartOfAccounts3,ChartOfAccounts4,ChartOfAccounts5,ChartOfAccounts6,ChartOfAccounts7,ChartOfAccounts8)" +
" SELECT @Oid,@AccountYear,@AccountNumber,@IsParent,@ChartOfAccounts_Parent,@ChartOfAccounts1," +
" @ChartOfAccounts2,@ChartOfAccounts3,@ChartOfAccounts4,@ChartOfAccounts5,@ChartOfAccounts6,@ChartOfAccounts7,@ChartOfAccounts8;";
using (MySqlCommand _MySqlCommand_Insert = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
{
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@AccountYear", DbType = DbType.Int64, Value = _SqlDataReader["AccountYear"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@AccountNumber", DbType = DbType.String, Value = _SqlDataReader["AccountNumber"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@IsParent", DbType = DbType.Boolean, Value = _SqlDataReader["IsParent"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ChartOfAccounts_Parent", DbType = DbType.Guid, Value = _SqlDataReader["ChartOfAccounts_Parent"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ChartOfAccounts1", DbType = DbType.Guid, Value = _SqlDataReader["ChartOfAccounts1"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ChartOfAccounts2", DbType = DbType.Guid, Value = _SqlDataReader["ChartOfAccounts2"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ChartOfAccounts3", DbType = DbType.Guid, Value = _SqlDataReader["ChartOfAccounts3"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ChartOfAccounts4", DbType = DbType.Guid, Value = _SqlDataReader["ChartOfAccounts4"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ChartOfAccounts5", DbType = DbType.Guid, Value = _SqlDataReader["ChartOfAccounts5"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ChartOfAccounts6", DbType = DbType.Guid, Value = _SqlDataReader["ChartOfAccounts6"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ChartOfAccounts7", DbType = DbType.Guid, Value = _SqlDataReader["ChartOfAccounts7"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@ChartOfAccounts8", DbType = DbType.Guid, Value = _SqlDataReader["ChartOfAccounts8"] });
_MySqlCommand_Insert.ExecuteNonQuery();
}
}
else // Ha már VAN
{
//_MySQL = " SET FOREIGN_KEY_CHECKS=0;" +
// " UPDATE HCategory SET Name=@Name," +
// " Parent=@Parent " +
// " WHERE Oid=@Oid";
//using (MySqlCommand _MySqlCommand_Update = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
//{
// _MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
// _MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Parent", DbType = DbType.Guid, Value = _SqlDataReader["Parent"] });
// _MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Name", DbType = DbType.String, Value = _SqlDataReader["Name"] });
// _MySqlCommand_Update.ExecuteNonQuery();
//}
}
}
}
}
}
}
_SqlConnection.Close();
_MySqlConnection.Close();
_ocur.Session.ExecuteNonQuery("SET FOREIGN_KEY_CHECKS=1");
}
private void Sync_ChartOfAccountsYear_MSSQL_MySQL(XPObjectSpace _ocur)
{
MigrationParameters _MigrationParameters = View.SelectedObjects[0] as MigrationParameters;
_ocur.Session.ExecuteNonQuery("SET FOREIGN_KEY_CHECKS=0");
string _ConnectionStringMSSQL = string.Format(" User ID={0}; " +
" Password={1};" +
" Pooling=false;" +
" Data Source={2};" +
" Initial Catalog={3}",
_MigrationParameters.SQLUser,
_MigrationParameters.SQLPassword,
_MigrationParameters.SQLServer,
_MigrationParameters.SQLDatabase);
SqlConnection _SqlConnection = new SqlConnection(_ConnectionStringMSSQL);
MySqlConnection _MySqlConnection = new MySqlConnection(Nuvolar.Module.GeneralFunction.GLOBAL_ConnectionString.Replace("XpoProvider=MySql;", ""));
_SqlConnection.Open();
_MySqlConnection.Open();
if (_SqlConnection.State == ConnectionState.Open)
{
string _SQL = " select t1.* " +
" from ChartOfAccountsYear t1 " +
" WHERE t1.GCRecord is null";
SqlCommand _SqlCommand = new SqlCommand(_SQL, _SqlConnection);
SqlDataReader _SqlDataReader = _SqlCommand.ExecuteReader();
if (_SqlDataReader.HasRows)
{
while (_SqlDataReader.Read())
{
string _MySQL = "SELECT count(*) FROM ChartOfAccountsYear WHERE Oid=@Oid";
using (MySqlCommand _MySqlCommand = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
{
_MySqlCommand.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
object _Found = _MySqlCommand.ExecuteScalar();
if (_Found != null)
{
double _F;
IsNumeric(_Found, out _F);
if (_F == 0)
{
_MySQL = " SET FOREIGN_KEY_CHECKS=0;" +
" INSERT INTO ChartOfAccountsYear (Oid,AccountYear,IsClosed)" +
" SELECT @Oid,@AccountYear,@IsClosed;";
using (MySqlCommand _MySqlCommand_Insert = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
{
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@AccountYear", DbType = DbType.Int64, Value = _SqlDataReader["AccountYear"] });
_MySqlCommand_Insert.Parameters.Add(new MySqlParameter() { ParameterName = "@IsClosed", DbType = DbType.Boolean, Value = _SqlDataReader["IsClosed"] });
_MySqlCommand_Insert.ExecuteNonQuery();
}
}
else // Ha már VAN
{
//_MySQL = " SET FOREIGN_KEY_CHECKS=0;" +
// " UPDATE HCategory SET Name=@Name," +
// " Parent=@Parent " +
// " WHERE Oid=@Oid";
//using (MySqlCommand _MySqlCommand_Update = new MySqlCommand() { CommandText = _MySQL, Connection = _MySqlConnection })
//{
// _MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Oid", DbType = DbType.Guid, Value = _SqlDataReader["Oid"] });
// _MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Parent", DbType = DbType.Guid, Value = _SqlDataReader["Parent"] });
// _MySqlCommand_Update.Parameters.Add(new MySqlParameter() { ParameterName = "@Name", DbType = DbType.String, Value = _SqlDataReader["Name"] });
// _MySqlCommand_Update.ExecuteNonQuery();
//}
}
}
}
}
}
}
_SqlConnection.Close();
_MySqlConnection.Close();
_ocur.Session.ExecuteNonQuery("SET FOREIGN_KEY_CHECKS=1");
}
private bool IsNumeric(object Expression, out double retNum)
{
bool isNum = Double.TryParse(Convert.ToString(Expression), NumberStyles.Any, NumberFormatInfo.InvariantInfo, out retNum);
return isNum;
}
}
}