Example #1
0
        public void UpdateTask(DtoTask task, DtoOperation[] bindedOpers)
        {
            repository.UpdateTask(task, bindedOpers);

            UpdateDtoEntitiesList(operations);
            UpdateTaskList();
            SendServiceInfo($"Changed task {task.Id}");
        }
Example #2
0
        public long CreateTask(DtoTask task, DtoOperation[] bindedOpers)
        {
            var newTaskId = repository.CreateTask(task,
                                                  bindedOpers);

            UpdateDtoEntitiesList(operations);
            UpdateTaskList();
            SendServiceInfo($"Created task {newTaskId}");
            return(newTaskId);
        }
Example #3
0
        public void UpdateTask(DtoTask task, params DtoOperation[] bindedOpers)
        {
            context.UsingTransaction(transContext =>
            {
                try
                {
                    var currentOperIds = context.CreateSimple
                                             ($"select id from operation where taskid={task.Id}")
                                         .ExecuteQueryFirstColumn <int>().ToList();

                    var newOperIds = bindedOpers.Select(oper => oper.Id).ToList();

                    var operIdsToDelete = currentOperIds.Except(newOperIds)
                                          .ToList();

                    var opersToUpdate = bindedOpers.Where(oper =>
                                                          newOperIds.Intersect(currentOperIds).Contains(oper.Id)).ToList();

                    var opersToWrite = bindedOpers.Where(oper =>
                                                         newOperIds.Except(currentOperIds).Contains(oper.Id));

                    transContext.Update("Task", task, "Id");

                    if (operIdsToDelete.Any())
                    {
                        transContext.CreateSimple(
                            $"Update Operation set isDeleted=1 where TaskId={task.Id} and " +
                            $"id in ({string.Join(",", operIdsToDelete)})")
                        .ExecuteNonQuery();
                    }

                    foreach (var oper in opersToUpdate
                             ) //no chances of so many  opers will be updated so no losses
                    {
                        transContext.Update("Operation", oper, "Id");
                    }


                    opersToWrite.WriteToServer(transContext, "Operation");
                }

                catch (Exception e)
                {
                    SendAppWarning("Error occured while updating Task" +
                                   $" record: {e.Message}");
                    throw;
                }
            });
        }
Example #4
0
        public int CreateTask(DtoTask task, params DtoOperation[] bindedOpers)
        {
            int newTaskId = 0;

            context.UsingTransaction(transContext =>
            {
                try
                {
                    newTaskId = transContext.CreateInsertWithOutput("Task", task,
                                                                    new List <string> {
                        "Id"
                    }, "Id")
                                .ExecuteQueryFirstColumn <int>().First();

                    if (bindedOpers == null)
                    {
                        return;
                    }

                    foreach (var oper in bindedOpers)
                    {
                        oper.TaskId = newTaskId;
                    }

                    bindedOpers.WriteToServer(transContext, "Operation");
                }

                catch (Exception e)
                {
                    SendAppWarning("Error occured while creating new Task" +
                                   $" record: {e.Message}");
                    throw;
                }
            });

            return(newTaskId);
        }
Example #5
0
        public async Task TestExportPackageScriptCreator()
        {
            IContainer autofac = InitializeTestContainer();

            await ConfigureDbForTestScenario();

            var dtoTask = new DtoTask();

            dtoTask.Id   = 1;
            dtoTask.Name = $"{nameof(DbImporter)} - {nameof(DbPackageDataConsumer)} Test";

            // setup a simple db import operation, which initializes an operaion package in the taskContext:
            string packageInitializingQuery1 = @"select id, ConfigTemplate 
from [dbo].[OperTemplate]";

            CreateOperation(dtoTask.Id
                            , 1
                            , nameof(DbImporter)
                            , packageInitializingQuery1
                            , "PackageToConsume"
                            , out DtoOperation packageInitializeOperation1);

            // setup a simple db import operation, which initializes an operaion package in the taskContext:
            string packageInitializingQuery2 = @"select 'AAA' testJoinField, 'Works' as msg
union all 
select 'BBB', ' bad!'
union all 
select 'AAA', 'fine!';";

            CreateOperation(dtoTask.Id
                            , 2
                            , nameof(DbImporter)
                            , packageInitializingQuery2
                            , "PackageToConsume2"
                            , out DtoOperation packageInitializeOperation2);

            //  setup a package consuming operation:
            string consumingQuery = @"select o.id, tt.msg
from [dbo].[Operation] o
join #RepPackPackageToConsume t on t.ConfigTemplate = o.config
join (select msg, testJoinField from #RepPackPackageToConsume2 where testJoinField != 'BBB') tt on o.config = tt.testJoinField";

            CreateOperation(dtoTask.Id
                            , 3
                            , nameof(DbPackageDataConsumer)
                            , consumingQuery
                            , "ConsumedPackage"
                            , out DtoOperation packageConsumingOperation);

            SetupRepository(autofac, dtoTask, packageInitializeOperation1, packageInitializeOperation2, packageConsumingOperation);

            var logic = autofac.Resolve <ILogic>();

            logic.Start();
            logic.ForceExecute(dtoTask.Id);

            var taskContext   = autofac.Resolve <IReportTaskRunContext>(); //  as it was registered as singleton during init.
            var packageParser = autofac.Resolve <IPackageParser>();

            while (taskContext.Packages.TryGetValue("ConsumedPackage", out _) == false)
            {
                await Task.Delay(1000); //  delay till package appears.
            }
            var commandText = autofac.Resolve <SqlCommandInitializer>().ResolveCommand().CommandText;

            Assert.Equal(
                @$ "CREATE TABLE #RepPackPackageToConsume ([id] INT NOT NULL,[ConfigTemplate] NVARCHAR(4000) NOT NULL)
INSERT INTO #RepPackPackageToConsume (" "id" "," "ConfigTemplate" ")
VALUES(@p0,@p1)
INSERT INTO #RepPackPackageToConsume (" "id" "," "ConfigTemplate" ")
VALUES(@p2,@p3)
INSERT INTO #RepPackPackageToConsume (" "id" "," "ConfigTemplate" ")
VALUES(@p4,@p5)
INSERT INTO #RepPackPackageToConsume (" "id" "," "ConfigTemplate" ")
VALUES(@p6,@p7)
CREATE TABLE #RepPackPackageToConsume2 ([testJoinField] NVARCHAR(4000) NOT NULL,[msg] NVARCHAR(4000) NOT NULL)
INSERT INTO #RepPackPackageToConsume2 (" "testJoinField" "," "msg" ")
VALUES(@p8,@p9)
INSERT INTO #RepPackPackageToConsume2 (" "testJoinField" "," "msg" ")
VALUES(@p10,@p11)
INSERT INTO #RepPackPackageToConsume2 (" "testJoinField" "," "msg" ")
VALUES(@p12,@p13)
select o.id, tt.msg
from [dbo].[Operation] o