private static List <ORM_ORD_CUO_CustomerOrder_Position_2_ShipmentPosition> Search(Query query, string connectionString, DbConnection connection, DbTransaction transaction)
            {
                CSV2Core.Core.Interfaces.IManagedConnection managedConnection = new CSV2Core_MySQL.MySQLManagedConnection();
                List <ORM_ORD_CUO_CustomerOrder_Position_2_ShipmentPosition> items;

                try
                {
                    managedConnection.set(connectionString, connection, transaction);
                    var loader = new CSV2Core_MySQL.Dictionaries.MultiTable.Loader.DictionaryLoader(managedConnection.getConnection(), managedConnection.getTransaction());

                    DbCommand command = managedConnection.manage(query.CreateSelectQuery(TableName));
                    query.SetParameters(command);

                    items = new List <ORM_ORD_CUO_CustomerOrder_Position_2_ShipmentPosition>();

                    var reader = new CSV2Core_MySQL.Support.DBSQLReader(command.ExecuteReader());
                    reader.SetOrdinals(new string[] { "AssignmentID", "ORD_CUO_CustomerOrder_Position_RefID", "LOG_SHP_Shipment_Position_RefID", "CMN_BPT_CTM_OrganizationalUnit_RefID", "Creation_Timestamp", "Tenant_RefID", "IsDeleted" });
                    while (reader.Read())
                    {
                        ORM_ORD_CUO_CustomerOrder_Position_2_ShipmentPosition item = new ORM_ORD_CUO_CustomerOrder_Position_2_ShipmentPosition();
                        //0:Parameter AssignmentID of type Guid
                        item.AssignmentID = reader.GetGuid(0);
                        //1:Parameter ORD_CUO_CustomerOrder_Position_RefID of type Guid
                        item.ORD_CUO_CustomerOrder_Position_RefID = reader.GetGuid(1);
                        //2:Parameter LOG_SHP_Shipment_Position_RefID of type Guid
                        item.LOG_SHP_Shipment_Position_RefID = reader.GetGuid(2);
                        //3:Parameter CMN_BPT_CTM_OrganizationalUnit_RefID of type Guid
                        item.CMN_BPT_CTM_OrganizationalUnit_RefID = reader.GetGuid(3);
                        //4:Parameter Creation_Timestamp of type DateTime
                        item.Creation_Timestamp = reader.GetDate(4);
                        //5:Parameter Tenant_RefID of type Guid
                        item.Tenant_RefID = reader.GetGuid(5);
                        //6:Parameter IsDeleted of type Boolean
                        item.IsDeleted = reader.GetBoolean(6);


                        item.Status_IsAlreadySaved = true;
                        item.Status_IsDirty        = false;
                        items.Add(item);
                    }
                    reader.Close();
                    loader.Load();
                    managedConnection.commit();
                }
                catch (Exception ex)
                {
                    managedConnection.rollback();
                    throw;
                }
                return(items);
            }
        protected static FR_Base Execute(DbConnection Connection, DbTransaction Transaction, P_L5CO_CSHwP_1519 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Base();

            #region Get CustomerOrderPositions

            var param = new P_L5CO_GACOPaOUDfCH_1623()
            {
                CustomerOrderHeaderID = Parameter.CustomerOrderHeaderID
            };
            var customerOrderPositions = cls_Get_AllCustomerOrderPositions_and_OrganizationalUnitDistributions_for_CustomerOrderHeaderID.Invoke(Connection, Transaction, param, securityTicket).Result;

            #endregion

            #region Create ShipmentHeaders

            var orgUnit2ShipmentHeader = new Dictionary <Guid, Guid>();

            var allOrganizationalUnitsInOrder = customerOrderPositions.SelectMany(i => i.OrgUnitAssigments).Select(j => j.CMN_BPT_CTM_OrganizationalUnit_RefID).Distinct();

            foreach (var organizationalUnits in allOrganizationalUnitsInOrder)
            {
                var shipmentHeaderParam = new P_L5CO_CSHfCO_1528()
                {
                    CustomerOrderHeaderID = Parameter.CustomerOrderHeaderID
                };

                var shipmentHeaderID = cls_Create_ShipmentHeader_for_CustomerOrderID.Invoke(Connection, Transaction, shipmentHeaderParam, securityTicket).Result;

                orgUnit2ShipmentHeader.Add(organizationalUnits, shipmentHeaderID);
            }

            #endregion

            #region Positions

            if (customerOrderPositions != null)
            {
                foreach (var position in customerOrderPositions)
                {
                    #region Orders for office

                    foreach (var item in position.OrgUnitAssigments)
                    {
                        var shippmentHeaderID = orgUnit2ShipmentHeader[item.CMN_BPT_CTM_OrganizationalUnit_RefID];

                        var shipmentPosition = new CL1_LOG_SHP.ORM_LOG_SHP_Shipment_Position
                        {
                            LOG_SHP_Shipment_PositionID   = Guid.NewGuid(),
                            LOG_SHP_Shipment_Header_RefID = shippmentHeaderID,
                            CMN_PRO_Product_RefID         = position.CMN_PRO_Product_RefID,
                            Tenant_RefID       = securityTicket.TenantID,
                            Creation_Timestamp = DateTime.Now,
                            QuantityToShip     = item.Quantity,
                            ShipmentPosition_PricePerUnitValueWithoutTax = position.Position_ValuePerUnit,
                            ShipmentPosition_ValueWithoutTax             = (decimal)item.Quantity * position.Position_ValuePerUnit
                        };
                        shipmentPosition.Save(Connection, Transaction);

                        var customerOrderToShipmentPosition = new CL1_ORD_CUO.ORM_ORD_CUO_CustomerOrder_Position_2_ShipmentPosition
                        {
                            AssignmentID       = Guid.NewGuid(),
                            Creation_Timestamp = DateTime.Now,
                            Tenant_RefID       = securityTicket.TenantID,
                            LOG_SHP_Shipment_Position_RefID      = shipmentPosition.LOG_SHP_Shipment_PositionID,
                            ORD_CUO_CustomerOrder_Position_RefID = position.ORD_CUO_CustomerOrder_PositionID,
                            CMN_BPT_CTM_OrganizationalUnit_RefID = item.CMN_BPT_CTM_OrganizationalUnit_RefID,
                            IsDeleted = false
                        };
                        customerOrderToShipmentPosition.Save(Connection, Transaction);

                        #region Update ShipmentHeader

                        var shipmentHeader = new CL1_LOG_SHP.ORM_LOG_SHP_Shipment_Header();
                        shipmentHeader.Load(Connection, Transaction, shippmentHeaderID);

                        shipmentHeader.ShipmentHeader_ValueWithoutTax += shipmentPosition.ShipmentPosition_ValueWithoutTax;
                        shipmentHeader.Save(Connection, Transaction);

                        #endregion
                    }

                    #endregion

                    #region Orders for company

                    var quantitiesForOffices = position.OrgUnitAssigments.Sum(i => i.Quantity);
                    var quantitiesForCompany = position.Position_Quantity - quantitiesForOffices;

                    if (quantitiesForCompany > 0)
                    {
                        var shippmentHeaderID    = Guid.Empty;
                        var containsOrderCompany = orgUnit2ShipmentHeader.ContainsKey(Guid.Empty);

                        if (!containsOrderCompany)
                        {
                            var shipmentHeaderParam = new P_L5CO_CSHfCO_1528()
                            {
                                CustomerOrderHeaderID = Parameter.CustomerOrderHeaderID
                            };

                            shippmentHeaderID = cls_Create_ShipmentHeader_for_CustomerOrderID.Invoke(Connection, Transaction, shipmentHeaderParam, securityTicket).Result;
                            orgUnit2ShipmentHeader.Add(Guid.Empty, shippmentHeaderID);
                        }

                        shippmentHeaderID = orgUnit2ShipmentHeader[Guid.Empty];

                        var shipmentPosition = new CL1_LOG_SHP.ORM_LOG_SHP_Shipment_Position
                        {
                            LOG_SHP_Shipment_PositionID   = Guid.NewGuid(),
                            LOG_SHP_Shipment_Header_RefID = shippmentHeaderID,
                            CMN_PRO_Product_RefID         = position.CMN_PRO_Product_RefID,
                            Tenant_RefID       = securityTicket.TenantID,
                            Creation_Timestamp = DateTime.Now,
                            QuantityToShip     = quantitiesForCompany,
                            ShipmentPosition_PricePerUnitValueWithoutTax = position.Position_ValuePerUnit,
                            ShipmentPosition_ValueWithoutTax             = (decimal)quantitiesForCompany * position.Position_ValuePerUnit
                        };
                        shipmentPosition.Save(Connection, Transaction);

                        var customerOrderToShipmentPosition = new CL1_ORD_CUO.ORM_ORD_CUO_CustomerOrder_Position_2_ShipmentPosition
                        {
                            AssignmentID       = Guid.NewGuid(),
                            Creation_Timestamp = DateTime.Now,
                            Tenant_RefID       = securityTicket.TenantID,
                            LOG_SHP_Shipment_Position_RefID      = shipmentPosition.LOG_SHP_Shipment_PositionID,
                            ORD_CUO_CustomerOrder_Position_RefID = position.ORD_CUO_CustomerOrder_PositionID,
                            CMN_BPT_CTM_OrganizationalUnit_RefID = Guid.Empty
                        };
                        customerOrderToShipmentPosition.Save(Connection, Transaction);

                        #region Update ShipmentHeader

                        var shipmentHeader = new CL1_LOG_SHP.ORM_LOG_SHP_Shipment_Header();
                        shipmentHeader.Load(Connection, Transaction, shippmentHeaderID);

                        shipmentHeader.ShipmentHeader_ValueWithoutTax += shipmentPosition.ShipmentPosition_ValueWithoutTax;
                        shipmentHeader.Save(Connection, Transaction);

                        #endregion
                    }

                    #endregion
                }
            }

            #endregion

            #region Comments

            var allOrgUnitIDs = orgUnit2ShipmentHeader.Select(x => x.Key);

            foreach (var orgUnitID in allOrgUnitIDs)
            {
                var currentShipmentID = orgUnit2ShipmentHeader[orgUnitID];

                var custOrderNotes = ORM_ORD_CUO_CustomerOrder_Note.Query.Search(Connection, Transaction, new ORM_ORD_CUO_CustomerOrder_Note.Query()
                {
                    CustomerOrder_Header_RefID           = Parameter.CustomerOrderHeaderID,
                    CMN_BPT_CTM_OrganizationalUnit_RefID = orgUnitID,
                    IsDeleted = false
                }
                                                                                 );

                foreach (var custOrderNote in custOrderNotes)
                {
                    var shipmentHeader = new CL1_LOG_SHP.ORM_LOG_SHP_Shipment_Header();
                    shipmentHeader.Load(Connection, Transaction, currentShipmentID);

                    var shipmentNote = new ORM_LOG_SHP_Shipment_Note()
                    {
                        LOG_SHP_Shipment_NoteID      = Guid.NewGuid(),
                        Shipment_Header_RefID        = currentShipmentID,
                        Shipment_Position_RefID      = Guid.Empty,
                        IsNotePrintedOnDeliveryPaper = true,
                        Title               = custOrderNote.Title,
                        Comment             = custOrderNote.Comment,
                        NotePublishDate     = custOrderNote.NotePublishDate,
                        SequenceOrderNumber = custOrderNote.SequenceOrderNumber,
                        Creation_Timestamp  = DateTime.Now,
                        Tenant_RefID        = securityTicket.TenantID,
                        CreatedBy_BusinessParticipant_RefID = shipmentHeader.RecipientBusinessParticipant_RefID
                    };

                    shipmentNote.Save(Connection, Transaction);
                }
            }

            #endregion

            return(returnValue);

            #endregion UserCode
        }