From 28726fee017188063444b4afea5ef5289a6842c9 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Fri, 5 Apr 2019 16:50:38 +0200 Subject: [PATCH 01/24] In progress: Jeeves communication is now based on SQLAlchemy --- Dockerfile | 5 +- README.rst | 2 +- config.yml | 35 +++--- docker-compose.yml | 8 +- pyjeeves/__init__.py | 6 + pyjeeves/config.py | 70 +++++++++++ pyjeeves/connector.py | 142 ++++++++++++++++++++++ pyjeeves/db.py | 26 ---- pyjeeves/db_meta.py | 12 ++ pyjeeves/jvsquery.py | 6 +- pyjeeves/main.py | 26 ++-- pyjeeves/models/__init__.py | 5 +- pyjeeves/models/abc.py | 112 +++++++++++++++++ pyjeeves/models/{jvsmodels.py => meta.py} | 2 +- pyjeeves/models/raw.py | 104 ++++++++++++++++ pyjeeves/process.py | 13 +- pyjeeves/repositories/__init__.py | 2 + pyjeeves/repositories/article.py | 44 +++++++ pyjeeves/repositories/location.py | 69 +++++++++++ requirements.txt | 14 +-- setup.py | 12 +- 21 files changed, 637 insertions(+), 78 deletions(-) create mode 100644 pyjeeves/config.py create mode 100644 pyjeeves/connector.py delete mode 100644 pyjeeves/db.py create mode 100644 pyjeeves/db_meta.py create mode 100644 pyjeeves/models/abc.py rename pyjeeves/models/{jvsmodels.py => meta.py} (99%) create mode 100644 pyjeeves/models/raw.py create mode 100644 pyjeeves/repositories/__init__.py create mode 100644 pyjeeves/repositories/article.py create mode 100644 pyjeeves/repositories/location.py diff --git a/Dockerfile b/Dockerfile index d70c98a..1369783 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,7 @@ LABEL description="PyJeeves syncronization application" \ maintainer="Marcus Lindvall " RUN apk add --no-cache build-base freetds-dev git \ + && pip install --no-cache-dir cython \ && pip install --no-cache-dir git+https://github.com/pymssql/pymssql.git \ && apk del --purge build-base freetds-dev git @@ -12,7 +13,9 @@ RUN apk add --no-cache freetds WORKDIR /app COPY ./requirements.txt /app/requirements.txt -RUN pip install --no-cache-dir -r requirements.txt +RUN apk add --no-cache build-base libffi-dev openssl-dev \ + && pip install --no-cache-dir -r requirements.txt \ + && apk del --purge build-base COPY . /app diff --git a/README.rst b/README.rst index 830553d..872edcf 100644 --- a/README.rst +++ b/README.rst @@ -6,7 +6,7 @@ This project is a Jeeves data extraction and integration project. ## Initial creation of database schema. -´docker run --link db --network marcus_default -v /srv/pyjeeves/config.yml:/app/config.yml gitlab.lndvll.se:5500/lindvallskaffe/pyjeeves python ./pyjeeves/db.py´ +´docker run --link db --network marcus_default -v /srv/pyjeeves/config.yml:/app/config.yml gitlab.lndvll.se:5500/lindvallskaffe/pyjeeves python ./pyjeeves/db_raw.py´ ## Connecting to DB with client diff --git a/config.yml b/config.yml index 0165604..e420e45 100644 --- a/config.yml +++ b/config.yml @@ -1,17 +1,17 @@ sync_interval: 60 -mysql: - host: localhost - port: 3306 - user: pyjeeves - passwd: jeeves - db: pyjeeves - -jeeves_db: - server: 'BlackSheep01' - database: 'LKTest' - user: 'jvsdbo' - password: 'password' +databases: + meta: + host: db + port: 3306 + user: pyjeeves + passwd: jeeves + db: pyjeeves + raw: + server: '192.168.0.5' + database: 'LKTest' + user: 'jvsdbo' + password: 'J33v3s33' logging: version: 1 @@ -26,19 +26,22 @@ logging: level: DEBUG formatter: simpleFormatter stream: ext://sys.stdout + root: + handlers: + - consoleHandler + level: DEBUG loggers: PyJeeves: handlers: - fileHandler - - consoleHandler level: DEBUG alembic: handlers: - - consoleHandler + - fileHandler level: INFO sqlalchemy: handlers: - - consoleHandler + - fileHandler level: WARN qualname: sqlalchemy.engine formatters: @@ -47,4 +50,4 @@ logging: alembic: script_location: migrations - sqlalchemy.url: 'mysql+pymysql://pyjeeves:jeeves@localhost/pyjeeves?charset=utf8mb4' + sqlalchemy.url: 'mysql+pymysql://pyjeeves:jeeves@db/pyjeeves?charset=utf8mb4' diff --git a/docker-compose.yml b/docker-compose.yml index f02bda0..3304133 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,12 +3,14 @@ version: '2' services: db: image: mysql - restart: always + restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD: rootpassword + MYSQL_ROOT_PASSWORD: J33v3s33 MYSQL_USER: pyjeeves MYSQL_PASSWORD: jeeves MYSQL_DATABASE: pyjeeves + ports: + - 3306:3306 pyjeeves: container_name: pyjeeves @@ -49,4 +51,4 @@ services: environment: - POSTGRES_DB=metabase - POSTGRES_USER=metabase - - POSTGRES_PASSWORD="m3t@b@s3" \ No newline at end of file + - POSTGRES_PASSWORD="m3t@b@s3" diff --git a/pyjeeves/__init__.py b/pyjeeves/__init__.py index e69de29..3d50cf7 100644 --- a/pyjeeves/__init__.py +++ b/pyjeeves/__init__.py @@ -0,0 +1,6 @@ + +# from logging.config import dictConfig + +# import config + +import logging diff --git a/pyjeeves/config.py b/pyjeeves/config.py new file mode 100644 index 0000000..f0a16a2 --- /dev/null +++ b/pyjeeves/config.py @@ -0,0 +1,70 @@ +from logging.config import dictConfig +import os +import yaml + + +defaults = { + 'alembic': { + 'script_location': 'migrations', + 'sqlalchemy.url': ''}, + 'databases': { + 'meta': {}, + 'raw': {}}, + 'logging': { + 'formatters': { + 'simpleFormatter': { + 'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s'}}, + 'handlers': { + 'consoleHandler': { + 'class': 'logging.StreamHandler', + 'formatter': 'simpleFormatter', + 'level': 'DEBUG', + 'stream': 'ext://sys.stdout'}, + 'fileHandler': { + 'class': 'logging.FileHandler', + 'filename': 'pyjeeves.log', + 'formatter': 'simpleFormatter', + 'level': 'INFO'}}, + 'loggers': { + 'PyJeeves': {'handlers': ['fileHandler'], + 'level': 'DEBUG'}, + 'alembic': {'handlers': ['fileHandler'], + 'level': 'INFO'}, + 'sqlalchemy': {'handlers': ['fileHandler'], + 'level': 'WARN', + 'qualname': 'sqlalchemy.engine'}}, + 'root': {'handlers': ['consoleHandler'], 'level': 'DEBUG'}, + 'version': 1}, + 'sync_interval': 60} + + +try: + with open("config.yml", 'r') as ymlfile: + file_config = yaml.load(ymlfile, Loader=yaml.FullLoader) + config = {**defaults, **file_config} # Syntax introduced in Python 3.5 +except IOError as e: + pass + +dictConfig(config['logging']) + +config['debug'] = os.getenv('ENVIRONEMENT') == 'DEV' + +DB_CONTAINER = os.getenv('APPLICATION_DB_CONTAINER', 'db') +config['databases']['raw'] = { + 'user': os.getenv('JEEVES_USER', 'jvsdbo'), + 'pw': os.getenv('JEEVES_PW', ''), + 'host': os.getenv('JEEVES_HOST', ''), + 'port': os.getenv('JEEVES_PORT', 1433), + 'db': os.getenv('JEEVES_DB', ''), +} +config['databases']['meta'] = { + 'user': os.getenv('META_MYSQL_USER', 'pyjeeves'), + 'pw': os.getenv('META_MYSQL_PW', ''), + 'host': os.getenv('META_MYSQL_HOST', DB_CONTAINER), + 'port': os.getenv('META_MYSQL_PORT', 3306), + 'db': os.getenv('META_MYSQL_DB', 'pyjeeves'), +} +# DB_URI = 'postgresql://%(user)s:%(pw)s@%(host)s:%(port)s/%(db)s' % POSTGRES +config['alembic']['sqlalchemy.url'] = ( + 'mysql+pymysql://%(user)s:%(pw)s@%(host)s:%(port)s/%(db)s?charset=utf8mb4' % + config['databases']['meta']) diff --git a/pyjeeves/connector.py b/pyjeeves/connector.py new file mode 100644 index 0000000..0eba94a --- /dev/null +++ b/pyjeeves/connector.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- +""" + pyjeeves + ~~~~~~~~~~~~~~~ + + Global objects +""" +from pyjeeves import logging, config +from weakref import WeakValueDictionary +from sqlalchemy import create_engine, orm +from sqlalchemy.orm import sessionmaker, scoped_session, Query, aliased +from sqlalchemy.orm.exc import UnmappedClassError +from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta + +logger = logging.getLogger("PyJeeves." + __name__) + + +class BaseFilterQuery(Query): + def get(self, ident): + # Override get() so that the flag is always checked in the + # DB as opposed to pulling from the identity map. - this is optional. + return Query.get(self.populate_existing(), ident) + + def __iter__(self): + return Query.__iter__(self.private()) + + def from_self(self, *ent): + # Override from_self() to automatically apply + # the criterion to. this works with count() and + # others. + return Query.from_self(self.private(), *ent) + + def private(self): + # Fetch the model name and column list and apply model-specific base filters + mzero = self._mapper_zero() + + if mzero: + # Sometimes a plain model class will be fetched instead of mzero + try: + model = mzero.class_ + obj = mzero.class_ + except Exception: + model = mzero.__class__ + obj = mzero + + if hasattr(model, '_base_filters'): + return self.enable_assertions(False).filter(model._base_filters(obj)) + + return self + + +class Model(object): + """Baseclass for custom user models.""" + + #: the query class used. The :attr:`query` attribute is an instance + #: of this class. By default a :class:`BaseQuery` is used. + query_class = BaseFilterQuery + + #: an instance of :attr:`query_class`. Can be used to query the + #: database for instances of this model. + query = None + + +class MetaBaseModel(DeclarativeMeta): + """ Define a metaclass for the BaseModel + Implement `__getitem__` for managing aliases """ + + def __init__(cls, *args): + super().__init__(*args) + cls.aliases = WeakValueDictionary() + + def __getitem__(cls, key): + try: + alias = cls.aliases[key] + except KeyError: + alias = aliased(cls) + cls.aliases[key] = alias + return alias + + +class _QueryProperty(object): + + def __init__(self, sa): + self.sa = sa + + def __get__(self, obj, type): + try: + mapper = orm.class_mapper(type) + if mapper: + if type.__module__ == 'pyjeeves.models.raw': + return type.query_class(mapper, session=self.sa.raw_session()) + else: + return type.query_class(mapper, session=self.sa.meta_session()) + except UnmappedClassError: + return None + + +class DBConnector(object): + """This class is used to control the SQLAlchemy integration""" + def __init__(self, enabled_sessions=['raw'], metadata=None): + logger.info("Creating engines and sessionmakers") + + self.raw_session, self.meta_session = self.create_scoped_session(enabled_sessions) + self.Model = self.make_declarative_base(metadata) + # self.Query = Query + + @property + def metadata(self): + """Returns the metadata""" + return self.Model.metadata + + # @property + # def _config(self): + # """Returns the configuration""" + # return config() + + def make_declarative_base(self, metadata=None): + """Creates the declarative base.""" + base = declarative_base(cls=Model, name='Model', + metadata=metadata, + metaclass=MetaBaseModel) + base.query = _QueryProperty(self) + return base + + def create_scoped_session(self, sessions=[]): + RawSession, MetaSession = None, None + if 'raw' in sessions: + raw_engine = create_engine( + 'mssql+pymssql://{user}:{pw}@{host}:{port}/{db}?charset=utf8'.format( + **config.config['databases']['raw']), + implicit_returning=False) + + RawSession = scoped_session(sessionmaker(bind=raw_engine)) + + if 'meta' in sessions: + meta_engine = create_engine( + 'mysql+pymysql://{user}:{pw}@{host}:{port}/{db}?charset=utf8mb4'.format( + **config.config['databases']['meta'])) + + MetaSession = scoped_session(sessionmaker(bind=meta_engine)) + + return RawSession, MetaSession diff --git a/pyjeeves/db.py b/pyjeeves/db.py deleted file mode 100644 index f95618d..0000000 --- a/pyjeeves/db.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -from sqlalchemy import create_engine -from sqlalchemy.orm.session import Session - -from models.jvsmodels import Base - - -class MySQLSession(Session): - """docstring for MySQLSession""" - def __init__(self, settings): - self.engine = create_engine( - 'mysql+pymysql://{user}:{passwd}@{host}:{port}/{db}?charset=utf8mb4'.format(**settings)) - super(MySQLSession, self).__init__(bind=self.engine) - - def create_db(self): - Base.metadata.create_all(self.engine) - - -if __name__ == '__main__': - import yaml - with open("config.yml", 'r') as ymlfile: - cfg = yaml.load(ymlfile) - - session = MySQLSession(cfg['mysql']) - session.create_db() diff --git a/pyjeeves/db_meta.py b/pyjeeves/db_meta.py new file mode 100644 index 0000000..228d59d --- /dev/null +++ b/pyjeeves/db_meta.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +from pyjeeves import meta_engine +from models.meta import Base + + +if __name__ == '__main__': + from pyjeeves import logging + logger = logging.getLogger("PyJeeves." + __name__) + + logger.info("Creating meta database") + Base.metadata.create_all(meta_engine) diff --git a/pyjeeves/jvsquery.py b/pyjeeves/jvsquery.py index 1d90122..1db78f1 100644 --- a/pyjeeves/jvsquery.py +++ b/pyjeeves/jvsquery.py @@ -7,14 +7,14 @@ """ import pymssql import datetime -import logging +from pyjeeves import logging, config class JvsQuery(): """JvsQuery based on http://pymssql.org/en/stable/ """ - def __init__(self, settings): + def __init__(self): super(JvsQuery, self).__init__() - self.settings = settings + self.settings = config['jeeves_db'] self.logger = logging.getLogger("PyJeeves.jvsquery") def _execute(self, query="", params=(), iterator=True): diff --git a/pyjeeves/main.py b/pyjeeves/main.py index 27cd260..56b2b76 100644 --- a/pyjeeves/main.py +++ b/pyjeeves/main.py @@ -1,19 +1,19 @@ # -*- coding: utf-8 -*- import pprint -import yaml import signal import sys -import logging -import logging.config +# import logging +# import logging.config from alembic.config import Config from alembic import command +from pyjeeves.connector import DBConnector +from pyjeeves import config from process import Process from jvsquery import JvsQuery -from db import MySQLSession from utils import TaskThread @@ -25,8 +25,9 @@ class SyncTread(TaskThread): def __init__(self, config): super(SyncTread, self).__init__() - jvs_query = JvsQuery(config['jeeves_db']) - db_session = MySQLSession(config['mysql']) + # Use RawSession instead... + jvs_query = JvsQuery() + None, db_session = DBConnector.create_scoped_session(['meta']) self.process = Process(jvs_query, db_session) self.logger = logging.getLogger("PyJeeves.SyncTread") @@ -38,16 +39,15 @@ class SyncTread(TaskThread): if __name__ == '__main__': - with open("config.yml", 'r') as ymlfile: - cfg = yaml.load(ymlfile) - logging.config.dictConfig(cfg['logging']) + from pyjeeves import logging + # logging.config.dictConfig(config['logging']) logger = logging.getLogger("PyJeeves") logger.info("Running migrations") alembic_cfg = Config() - for k in cfg['alembic']: - alembic_cfg.set_main_option(k, cfg['alembic'][k]) + for k in config['alembic']: + alembic_cfg.set_main_option(k, config['alembic'][k]) command.upgrade(alembic_cfg, "head") logger.info("Application started") @@ -59,9 +59,9 @@ if __name__ == '__main__': signal.signal(signal.SIGINT, sigterm_handler) signal.signal(signal.SIGTERM, sigterm_handler) - sync_thread = SyncTread(cfg) + sync_thread = SyncTread() try: - sync_thread.setInterval(cfg['sync_interval']) + sync_thread.setInterval(config['sync_interval']) sync_thread.start() sync_thread.join() finally: diff --git a/pyjeeves/models/__init__.py b/pyjeeves/models/__init__.py index 99b282c..9f3380d 100644 --- a/pyjeeves/models/__init__.py +++ b/pyjeeves/models/__init__.py @@ -3,7 +3,8 @@ pyjeeves.models ~~~~~~~~~~~~~~~ - consolodated models module + models for databases """ +from pyjeeves.connector import DBConnector -from .jvsmodels import * # noqa +db = DBConnector() diff --git a/pyjeeves/models/abc.py b/pyjeeves/models/abc.py new file mode 100644 index 0000000..ad6f7c2 --- /dev/null +++ b/pyjeeves/models/abc.py @@ -0,0 +1,112 @@ +""" +Define an Abstract Base Class (ABC) for models +""" +from datetime import datetime +from decimal import Decimal +from sqlalchemy import inspect +from sqlalchemy.sql.expression import and_ +from sqlalchemy.orm.collections import InstrumentedList + +from pyjeeves import logging + +from . import db + +logger = logging.getLogger("PyJeeves." + __name__) + + +class RawBaseModel(): + """ Generalize __init__, __repr__ and to_json + Based on the models columns , ForetagKod=1""" + + print_only = () # First filter + print_filter = () # Second filter + to_json_filter = () # Only json filter + column_map = {} + + __table_args__ = { + 'extend_existing': True + } + + @classmethod + def _base_filters(self, obj, filters=and_()): + # This method provides base filtering, additional filtering can be done in subclasses + # Add this method to your model if you want more filtering, otherwise leave it out + # import and_ from sqlalchemy package + # this is a base filter for ALL queries + return and_( + obj.ForetagKod == 1, + filters + ) + + def __repr__(self): + """ Define a base way to print models + Columns inside `print_filter` are excluded """ + return '%s(%s)' % (self.__class__.__name__, { + column: value + for column, value in self._to_dict().items() + if column not in self.print_filter + }) + + @staticmethod + def _to_json_types(value): + if isinstance(value, datetime): + return value.strftime('%Y-%m-%d') + if isinstance(value, Decimal): + return "%.2f" % value + try: + if isinstance(value, InstrumentedList): + return [x.json for x in value] + if type(value).__module__ != 'builtins': # Perhaps == builtin? + return value.json + except AttributeError: + logger.debug(str(type(value)) + " was not converted to jsonifyable type") + return None + + return value + + @property + def json(self): + """ Define a base way to jsonify models + Columns inside `to_json_filter` are excluded + Columns inside `to_json_only_filter` are only included """ + return { + column: RawBaseModel._to_json_types(value) + # if not isinstance(value, datetime) else value.strftime('%Y-%m-%d') + # if type(value).__module__ != self.__module__ # Perhaps == builtin? + # else value.json # Convert instances to json if same module + for column, value in self._to_dict().items() + if column not in self.to_json_filter + } + + def _to_dict(self): + """ This would more or less be the same as a `to_json` + But putting it in a "private" function + Allows to_json to be overriden without impacting __repr__ + Or the other way around + And to add filter lists """ + return { + self._map_columns(column.key): getattr(self, column.key) + for column in inspect(self.__class__).attrs + if not self.print_only or column.key in self.print_only + } + + def _map_columns(self, key): + if key in self.column_map: + return self.column_map[key] + return key + + def merge(self): + db.raw_session.merge(self) + return self + + def commit(self): + db.raw_session.commit() + + def save(self): + db.raw_session.add(self) + db.raw_session.commit() + return self + + def delete(self): + db.raw_session.delete(self) + db.raw_session.commit() diff --git a/pyjeeves/models/jvsmodels.py b/pyjeeves/models/meta.py similarity index 99% rename from pyjeeves/models/jvsmodels.py rename to pyjeeves/models/meta.py index dbf61b6..767ccaa 100644 --- a/pyjeeves/models/jvsmodels.py +++ b/pyjeeves/models/meta.py @@ -3,7 +3,7 @@ pyjeeves.models ~~~~~~~~~~~~~~~~~~~~~~ - Jeeves data models + Jeeves meta data models """ from sqlalchemy.ext.declarative import declarative_base diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py new file mode 100644 index 0000000..1c1531a --- /dev/null +++ b/pyjeeves/models/raw.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +""" + pyjeeves.models + ~~~~~~~~~~~~~~~~~~~~~~ + + Jeeves raw data models +""" +# from sqlalchemy import Column, String +from sqlalchemy.schema import MetaData, ForeignKey, Column +from sqlalchemy.orm import relationship +from sqlalchemy.types import Integer, String +from sqlalchemy.ext.automap import automap_base +from sqlalchemy.sql.expression import and_ + +# from pyjeeves.session import raw_engine +from . import db + +from pyjeeves import logging +from .abc import RawBaseModel + +logger = logging.getLogger("PyJeeves." + __name__) +logger.info("Reading Jeeves DB structure") + +meta = MetaData() +meta.reflect(bind=db.raw_session.connection(), only=['ar', 'ars', 'fr', 'kus', 'oh', 'lp', 'vg']) + +# Table('fr', meta, implicit_returning=False) + +Base = automap_base(cls=db.Model, name='Model', metadata=meta) + + +class CommodityGroup(Base, RawBaseModel): + __tablename__ = 'vg' + column_map = {'VaruGruppKod': 'CommodityGroupNumber', 'VaruGruppBeskr': 'CommodityGroupName'} + print_only = ('VaruGruppKod', 'VaruGruppBeskr') + print_filter = ('Articles', 'articles_collection') + # to_json_filter = ('Articles', 'articles_collection') + + +class ArticleBalance(Base, RawBaseModel): + __tablename__ = 'ars' + column_map = {'LagSaldo': 'Balance', + 'LagResAnt': 'ReservedBalance', + 'LagsaldoAltEnh': 'BalanceAlternative', + 'LagResAntAltEnh': 'ReservedAlternativeBalance', + 'LagStalle': 'StorageLocationNumber'} + print_only = ('LagSaldo', + 'LagResAnt', + 'LagsaldoAltEnh', + 'LagResAntAltEnh', + 'LagStalle') + # print_filter = ('Articles', 'articles_collection') + # to_json_filter = ('Articles', 'articles_collection') + + ArtNr = Column(Integer, ForeignKey('ar.ArtNr'), primary_key=True) + + +class Articles(Base, RawBaseModel): + __tablename__ = 'ar' + + column_map = {'ArtNr': 'ArticleNumber', + 'ArtBeskr': 'ArticleName', + 'LagSaldoArtikel': 'Balance', + 'EnhetsKod': 'Unit', + 'ArtListPris': 'ListPrice'} + print_only = ( + 'ArtNr', + 'ArtBeskr', + 'CommodityGroup', + 'ArticleBalance', + 'EnhetsKod', + 'LagSaldoArtikel', + 'RowCreatedDt', + 'ArtListPris') + + ArtNr = Column(Integer, primary_key=True) + + VaruGruppKod = Column(Integer, ForeignKey('vg.VaruGruppKod'), primary_key=True) + + CommodityGroup = relationship(CommodityGroup) + ArticleBalance = relationship(ArticleBalance) + + @classmethod + def _base_filters(self, obj): + return RawBaseModel._base_filters( + obj, + and_(obj.LagTyp == 0) + ) + + +class Companies(Base, RawBaseModel): + __tablename__ = 'fr' + column_map = {'FtgNr': 'CompanyNumber', 'FtgNamn': 'CompanyName'} + print_only = ('CompanyNumber', 'CompanyName') + + FtgNr = Column(String, primary_key=True) + + +Base.prepare() + +# Base companies for cusomters and suppliers +Customers = Base.classes.kus # Customer information +Orders = Base.classes.oh # Orders by customers +DelivLoc = Base.classes.lp # Connections between a delivery company and customer company diff --git a/pyjeeves/process.py b/pyjeeves/process.py index c0822b3..2a47e95 100644 --- a/pyjeeves/process.py +++ b/pyjeeves/process.py @@ -7,7 +7,7 @@ """ -from models import Articles, Customers, InvoiceRows, OrderRows +from models.meta import Articles, Customers, InvoiceRows, OrderRows from sqlalchemy import desc from sqlalchemy.inspection import inspect @@ -19,9 +19,10 @@ class Process(): """docstring for Process""" def __init__(self, jvs_query, db_session): super(Process, self).__init__() + # Refactor code to use RawSession instead of raw jvs queries self.query = jvs_query self.session = db_session - self.logger = logging.getLogger("PyJeeves.process") + self.logger = logging.getLogger("PyJeeves." + __name__) def _update_model(self, model, kwargs): for k, v in kwargs.items(): @@ -47,6 +48,7 @@ class Process(): if _data: self.logger.info("Syncing %s" % jvs_tbl) + nth_item = 0 for item in _data: _filter_kwargs = {k: item.get(k) for k in _p_keys} _existing = self.session.query(model).\ @@ -57,6 +59,12 @@ class Process(): else: _new = model(**item) self.session.add(_new) + + if nth_item % 1000 == 0 and nth_item != 0: + self.session.commit() + nth_item += 1 + + self.session.commit() else: self.logger.info("No sync made for %s" % jvs_tbl) @@ -65,4 +73,3 @@ class Process(): self._sync_model(Articles, 'Articles') self._sync_model(InvoiceRows, 'InvoiceRows') self._sync_model(OrderRows, 'OrderRows') - self.session.commit() diff --git a/pyjeeves/repositories/__init__.py b/pyjeeves/repositories/__init__.py new file mode 100644 index 0000000..21e1020 --- /dev/null +++ b/pyjeeves/repositories/__init__.py @@ -0,0 +1,2 @@ +from .location import Location +from .article import Article \ No newline at end of file diff --git a/pyjeeves/repositories/article.py b/pyjeeves/repositories/article.py new file mode 100644 index 0000000..d172954 --- /dev/null +++ b/pyjeeves/repositories/article.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +from pyjeeves.models.raw import Articles +from sqlalchemy.sql.expression import and_ + +from pyjeeves import logging +logger = logging.getLogger("PyJeeves." + __name__) + + +# Relocate Jeeves modules to separate folder and let a "master" module handle imports, and setup. +class Article(): + """Handles dispatch locations in Jeeves""" + def __init__(self): + super(Article, self).__init__() + + @staticmethod + def get(art_no): + """ Query an article by number """ + return Articles.query.filter_by( + ArtNr=art_no + ).one() + + @staticmethod + def get_all(filter_=and_(Articles.ItemStatusCode == 0, Articles.ArtKod != 2)): + # .filter_by(ItemStatusCode=0, ArtKod=2) + return Articles.query.filter(filter_).all() + + +if __name__ == '__main__': + # print([column.key for column in Companies.__table__.columns]) + + logger.info("Starting TEST") + # session = RawSession() + + logger.info("Testing gettings an article") + # c1 = session.query(Companies).filter_by(FtgNr="179580").first() + # print(Articles) + c1 = Articles.query.filter_by(ArtNr="2103").first() + print(c1) + logger.info(c1.json) + + print ( + len(Article.get_all()) + ) diff --git a/pyjeeves/repositories/location.py b/pyjeeves/repositories/location.py new file mode 100644 index 0000000..37485d2 --- /dev/null +++ b/pyjeeves/repositories/location.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- + +from pyjeeves.models.raw import Companies, DelivLoc + +from pyjeeves import logging +logger = logging.getLogger("PyJeeves." + __name__) + + +# Relocate Jeeves modules to separate folder and let a "master" module handle imports, and setup. +class Location(): + """Handles dispatch locations in Jeeves""" + def __init__(self): + super(Location, self).__init__() + self.associated_company = '' # Company with new/existing locations + self._deliv_locs = [] # List of locations to be connected + + def _connect_deliv_loc(self, ftgnr, description, code): + if self.associated_company == '': + raise + if len(description) > 36: + logger.warn("Truncated description %s", (description)) + description = description[:36] + _deliv_loc = DelivLoc( + FtgNr=self.associated_company, OrdLevPlats1=ftgnr, + OrdLevPlBeskr=description, ForetagKod=1) + self._deliv_locs.append(_deliv_loc) + # self.session.merge(_deliv_loc) + return _deliv_loc + + def create_lev_location(self, ftgnr='', name='', address='', + postal_code='', city='', gln='', invoice_ref='', phone=''): + + _loc = Companies( + FtgNr=str(ftgnr), FtgNamn=name, FtgPostadr5=address, + FtgLevPostNr=postal_code, FtgPostLevAdr3=city, + EAN_Loc_Code=gln, FtgPostAdr1=invoice_ref, ComNr=phone, + ForetagKod=1) + + # logger.debug("Adding company to location session") + # with self.session.no_autoflush: + # # self.session.merge(_loc) # "merge" updates if existing location exists. + _deliv_loc = self._connect_deliv_loc(ftgnr, name, gln) + + return _loc, _deliv_loc + + def save_locations(self): + logger.debug("Committing all location changes") + # self.session.commit() # Location company needs to be created in order to connect them. + for deliv_loc in self._deliv_locs: + deliv_loc.merge() + # self.session.merge(deliv_loc) # Create "connnections" between Customer and Location. + Companies.commit() + # self.session.commit() + + +if __name__ == '__main__': + # print([column.key for column in Companies.__table__.columns]) + + logger.info("Starting TEST") + # session = RawSession() + + logger.info("Testing gettings a company") + # c1 = session.query(Companies).filter_by(FtgNr="179580").first() + print(Companies) + c1 = Companies.query.filter_by(FtgNr="179580").first() + logger.info(c1.json) + # RawSession.remove() +# from sqlalchemy.inspection import inspect +# print (inspect(Companies).columns.items()) diff --git a/requirements.txt b/requirements.txt index 8b46b61..f4e9656 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ -nose -sphinx -pymssql -sqlalchemy -PyMySQL -alembic -pyyaml \ No newline at end of file +nose==1.3.7 +Sphinx==1.8.5 +pymssql==2.1.4 +SQLAlchemy==1.3.1 +PyMySQL==0.9.3 +alembic==1.0.8 +PyYAML==5.1 \ No newline at end of file diff --git a/setup.py b/setup.py index f9a041b..7835a5f 100755 --- a/setup.py +++ b/setup.py @@ -18,6 +18,14 @@ setup( author_email='marcus.lindvall@lindvallskaffe.se', url='https://gitlab.lndvll.se/lindvallskaffe/pyjeeves', license=license, - packages=find_packages(exclude=('tests', 'docs', 'sample', 'env', 'migrations')) + packages=find_packages(exclude=('tests', 'docs', 'sample', 'env', 'migrations')), + install_requires=[ + 'nose', + 'sphinx', + 'pymssql', + 'sqlalchemy', + 'PyMySQL', + 'alembic', + 'pyyaml', + ] ) - From 0fae8725e053bc51bcf58ec8140740820336a3bf Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Fri, 5 Apr 2019 14:51:49 +0000 Subject: [PATCH 02/24] Delete config.yml --- config.yml | 53 ----------------------------------------------------- 1 file changed, 53 deletions(-) delete mode 100644 config.yml diff --git a/config.yml b/config.yml deleted file mode 100644 index e420e45..0000000 --- a/config.yml +++ /dev/null @@ -1,53 +0,0 @@ -sync_interval: 60 - -databases: - meta: - host: db - port: 3306 - user: pyjeeves - passwd: jeeves - db: pyjeeves - raw: - server: '192.168.0.5' - database: 'LKTest' - user: 'jvsdbo' - password: 'J33v3s33' - -logging: - version: 1 - handlers: - fileHandler: - class: logging.FileHandler - formatter: simpleFormatter - filename: pyjeeves.log - level: INFO - consoleHandler: - class: logging.StreamHandler - level: DEBUG - formatter: simpleFormatter - stream: ext://sys.stdout - root: - handlers: - - consoleHandler - level: DEBUG - loggers: - PyJeeves: - handlers: - - fileHandler - level: DEBUG - alembic: - handlers: - - fileHandler - level: INFO - sqlalchemy: - handlers: - - fileHandler - level: WARN - qualname: sqlalchemy.engine - formatters: - simpleFormatter: - format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s' - -alembic: - script_location: migrations - sqlalchemy.url: 'mysql+pymysql://pyjeeves:jeeves@db/pyjeeves?charset=utf8mb4' From 9b7d7db99692cc24fc640d08f05721d0ccdfcc14 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Mon, 8 Apr 2019 11:02:14 +0200 Subject: [PATCH 03/24] In progress: Fix configuration logic --- pyjeeves/config.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pyjeeves/config.py b/pyjeeves/config.py index f0a16a2..d510c78 100644 --- a/pyjeeves/config.py +++ b/pyjeeves/config.py @@ -3,7 +3,7 @@ import os import yaml -defaults = { +config = { 'alembic': { 'script_location': 'migrations', 'sqlalchemy.url': ''}, @@ -37,16 +37,6 @@ defaults = { 'version': 1}, 'sync_interval': 60} - -try: - with open("config.yml", 'r') as ymlfile: - file_config = yaml.load(ymlfile, Loader=yaml.FullLoader) - config = {**defaults, **file_config} # Syntax introduced in Python 3.5 -except IOError as e: - pass - -dictConfig(config['logging']) - config['debug'] = os.getenv('ENVIRONEMENT') == 'DEV' DB_CONTAINER = os.getenv('APPLICATION_DB_CONTAINER', 'db') @@ -64,7 +54,17 @@ config['databases']['meta'] = { 'port': os.getenv('META_MYSQL_PORT', 3306), 'db': os.getenv('META_MYSQL_DB', 'pyjeeves'), } + # DB_URI = 'postgresql://%(user)s:%(pw)s@%(host)s:%(port)s/%(db)s' % POSTGRES config['alembic']['sqlalchemy.url'] = ( 'mysql+pymysql://%(user)s:%(pw)s@%(host)s:%(port)s/%(db)s?charset=utf8mb4' % config['databases']['meta']) + +try: + with open("config.yml", 'r') as ymlfile: + file_config = yaml.load(ymlfile, Loader=yaml.FullLoader) + config = {**config, **file_config} # Syntax introduced in Python 3.5 +except IOError as e: + pass + +dictConfig(config['logging']) From b77a7069ce4a43f4ac8327840ae6cce910496176 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Thu, 4 Jul 2019 14:25:42 +0200 Subject: [PATCH 04/24] Started using 'sqlservice'. Added support for many new tables. --- .gitignore | 4 +- pyjeeves/__init__.py | 5 - pyjeeves/config.py | 2 +- pyjeeves/models/abc.py | 119 +++++++------- pyjeeves/models/raw.py | 239 +++++++++++++++++++++++++---- pyjeeves/repositories/__init__.py | 4 +- pyjeeves/repositories/article.py | 46 ++++-- pyjeeves/repositories/company.py | 55 +++++++ pyjeeves/repositories/location.py | 17 +- pyjeeves/repositories/pricelist.py | 22 +++ requirements.txt | 1 + setup.py | 1 + 12 files changed, 390 insertions(+), 125 deletions(-) create mode 100644 pyjeeves/repositories/company.py create mode 100644 pyjeeves/repositories/pricelist.py diff --git a/.gitignore b/.gitignore index abb07a9..1f5d317 100644 --- a/.gitignore +++ b/.gitignore @@ -65,4 +65,6 @@ docs/_build *.bak *.log -*.xls \ No newline at end of file +*.xls + +config.yml \ No newline at end of file diff --git a/pyjeeves/__init__.py b/pyjeeves/__init__.py index 3d50cf7..ade1461 100644 --- a/pyjeeves/__init__.py +++ b/pyjeeves/__init__.py @@ -1,6 +1 @@ - -# from logging.config import dictConfig - -# import config - import logging diff --git a/pyjeeves/config.py b/pyjeeves/config.py index d510c78..b1a27d7 100644 --- a/pyjeeves/config.py +++ b/pyjeeves/config.py @@ -64,7 +64,7 @@ try: with open("config.yml", 'r') as ymlfile: file_config = yaml.load(ymlfile, Loader=yaml.FullLoader) config = {**config, **file_config} # Syntax introduced in Python 3.5 -except IOError as e: +except IOError: pass dictConfig(config['logging']) diff --git a/pyjeeves/models/abc.py b/pyjeeves/models/abc.py index ad6f7c2..9130c30 100644 --- a/pyjeeves/models/abc.py +++ b/pyjeeves/models/abc.py @@ -1,11 +1,12 @@ """ Define an Abstract Base Class (ABC) for models """ -from datetime import datetime from decimal import Decimal -from sqlalchemy import inspect + from sqlalchemy.sql.expression import and_ -from sqlalchemy.orm.collections import InstrumentedList +from sqlalchemy.ext.hybrid import hybrid_property + +from sqlservice import ModelBase from pyjeeves import logging @@ -14,19 +15,25 @@ from . import db logger = logging.getLogger("PyJeeves." + __name__) -class RawBaseModel(): +class RawBaseModel(ModelBase): """ Generalize __init__, __repr__ and to_json Based on the models columns , ForetagKod=1""" - print_only = () # First filter - print_filter = () # Second filter - to_json_filter = () # Only json filter - column_map = {} + __to_dict_filter__ = [] + __to_dict_only__ = () + __column_map__ = {} __table_args__ = { 'extend_existing': True } + __dict_args__ = { + 'adapters': { + # datetime: lambda value, col, *_: value.strftime('%Y-%m-%d'), + Decimal: lambda value, col, *_: "{:.2f}".format(value) + } + } + @classmethod def _base_filters(self, obj, filters=and_()): # This method provides base filtering, additional filtering can be done in subclasses @@ -38,63 +45,51 @@ class RawBaseModel(): filters ) - def __repr__(self): - """ Define a base way to print models - Columns inside `print_filter` are excluded """ - return '%s(%s)' % (self.__class__.__name__, { - column: value - for column, value in self._to_dict().items() - if column not in self.print_filter - }) - - @staticmethod - def _to_json_types(value): - if isinstance(value, datetime): - return value.strftime('%Y-%m-%d') - if isinstance(value, Decimal): - return "%.2f" % value - try: - if isinstance(value, InstrumentedList): - return [x.json for x in value] - if type(value).__module__ != 'builtins': # Perhaps == builtin? - return value.json - except AttributeError: - logger.debug(str(type(value)) + " was not converted to jsonifyable type") - return None - - return value - - @property - def json(self): - """ Define a base way to jsonify models - Columns inside `to_json_filter` are excluded - Columns inside `to_json_only_filter` are only included """ - return { - column: RawBaseModel._to_json_types(value) - # if not isinstance(value, datetime) else value.strftime('%Y-%m-%d') - # if type(value).__module__ != self.__module__ # Perhaps == builtin? - # else value.json # Convert instances to json if same module - for column, value in self._to_dict().items() - if column not in self.to_json_filter - } - - def _to_dict(self): - """ This would more or less be the same as a `to_json` - But putting it in a "private" function - Allows to_json to be overriden without impacting __repr__ - Or the other way around - And to add filter lists """ - return { - self._map_columns(column.key): getattr(self, column.key) - for column in inspect(self.__class__).attrs - if not self.print_only or column.key in self.print_only - } - def _map_columns(self, key): - if key in self.column_map: - return self.column_map[key] + if key in self.__column_map__: + return self.__column_map__[key] return key + def descriptors_to_dict(self): + """Return a ``dict`` that maps data loaded in :attr:`__dict__` to this + model's descriptors. The data contained in :attr:`__dict__` represents + the model's state that has been loaded from the database. Accessing + values in :attr:`__dict__` will prevent SQLAlchemy from issuing + database queries for any ORM data that hasn't been loaded from the + database already. + + Note: + The ``dict`` returned will contain model instances for any + relationship data that is loaded. To get a ``dict`` containing all + non-ORM objects, use :meth:`to_dict`. + + Returns: + dict + """ + descriptors = self.descriptors() + + return { # Expose hybrid_property extension + **{key: getattr(self, key) for key in descriptors.keys() + if isinstance(descriptors.get(key), hybrid_property)}, + # and return all items included in descriptors + **{key: value for key, value in self.__dict__.items() + if key in descriptors}} + + def to_dict(self): + rv = super().to_dict() + + if self.__to_dict_only__: + return { + self._map_columns(key): rv[key] + for key in rv + if key in self.__to_dict_only__ + } + + for _filter in self.__to_dict_filter__: + rv.pop(_filter) + + return rv + def merge(self): db.raw_session.merge(self) return self diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index 1c1531a..cdac9ed 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -10,9 +10,10 @@ from sqlalchemy.schema import MetaData, ForeignKey, Column from sqlalchemy.orm import relationship from sqlalchemy.types import Integer, String from sqlalchemy.ext.automap import automap_base +from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.sql.expression import and_ +from sqlalchemy.exc import OperationalError -# from pyjeeves.session import raw_engine from . import db from pyjeeves import logging @@ -22,64 +23,153 @@ logger = logging.getLogger("PyJeeves." + __name__) logger.info("Reading Jeeves DB structure") meta = MetaData() -meta.reflect(bind=db.raw_session.connection(), only=['ar', 'ars', 'fr', 'kus', 'oh', 'lp', 'vg']) - -# Table('fr', meta, implicit_returning=False) +try: + meta.reflect(bind=db.raw_session.connection(), + only=['ar', 'ars', 'xae', 'xare', 'fr', 'kus', 'x1k', + 'oh', 'lp', 'vg', 'xp', 'xm', 'prh', 'prl']) +except OperationalError as e: + logger.error("Failed to read Jeeves DB structure") + raise e Base = automap_base(cls=db.Model, name='Model', metadata=meta) +class ProductClass(Base, RawBaseModel): + __tablename__ = 'xp' + __column_map__ = {'ArtProdKlass': 'ProductClassNumber', 'ArtProdklBeskr': 'ProductClassName'} + __to_dict_only__ = ('ArtProdKlass', 'ArtProdklBeskr') + # print_filter = ('Articles', 'articles_collection') + + +class ArticleClass(Base, RawBaseModel): + __tablename__ = 'xm' + __column_map__ = {'ArtKod': 'ArticleClassNumber', 'ArtTypBeskr': 'ArticleClassName'} + __to_dict_only__ = ('ArtKod', 'ArtTypBeskr') + # print_filter = ('Articles', 'articles_collection') + + class CommodityGroup(Base, RawBaseModel): __tablename__ = 'vg' - column_map = {'VaruGruppKod': 'CommodityGroupNumber', 'VaruGruppBeskr': 'CommodityGroupName'} - print_only = ('VaruGruppKod', 'VaruGruppBeskr') + __column_map__ = {'VaruGruppKod': 'CommodityGroupNumber', + 'VaruGruppBeskr': 'CommodityGroupName'} + __to_dict_only__ = ('VaruGruppKod', 'VaruGruppBeskr', 'ArticleClass') print_filter = ('Articles', 'articles_collection') # to_json_filter = ('Articles', 'articles_collection') + ArtKod = Column(Integer, ForeignKey('xm.ArtKod'), primary_key=True) + + ArticleClass = relationship(ArticleClass) + + +class ArticleAlternativeUnit(Base, RawBaseModel): + __tablename__ = 'xae' + __column_map__ = {'AltEnhetKod': 'UnitCode', 'AltEnhetBeskr': 'UnitName', + 'AltEnhetOmrFaktor': 'DefaultUnitConv'} + __to_dict_only__ = ('AltEnhetBeskr', 'AltEnhetOmrFaktor') + + +class ArticleUnit(Base, RawBaseModel): + __tablename__ = 'xare' + __column_map__ = {'ArtNr': 'ArticleNumber', + 'AltEnhetKod': 'UnitCode', 'AltEnhetOmrFaktor': 'UnitConv', + 'AltEnhetOrderStd': 'DefaultSalesUnit'} + __to_dict_only__ = ('AltEnhetKod', 'AltEnhetOmrFaktor', + 'AltEnhetOrderStd', 'ArticleAlternativeUnit') + + ArtNr = Column(String, ForeignKey('ar.ArtNr'), primary_key=True) + + AltEnhetKod = Column(Integer, ForeignKey('xae.AltEnhetKod'), primary_key=True) + ArticleAlternativeUnit = relationship(ArticleAlternativeUnit) + class ArticleBalance(Base, RawBaseModel): __tablename__ = 'ars' - column_map = {'LagSaldo': 'Balance', - 'LagResAnt': 'ReservedBalance', - 'LagsaldoAltEnh': 'BalanceAlternative', - 'LagResAntAltEnh': 'ReservedAlternativeBalance', - 'LagStalle': 'StorageLocationNumber'} - print_only = ('LagSaldo', - 'LagResAnt', - 'LagsaldoAltEnh', - 'LagResAntAltEnh', - 'LagStalle') - # print_filter = ('Articles', 'articles_collection') - # to_json_filter = ('Articles', 'articles_collection') + __column_map__ = {'LagSaldo': 'Balance', + 'LagResAnt': 'ReservedBalance', + 'LagsaldoAltEnh': 'BalanceAlternative', + 'LagResAntAltEnh': 'ReservedAlternativeBalance', + 'LagStalle': 'StorageLocationNumber'} + __to_dict_only__ = ('LagSaldo', + 'LagResAnt', + 'LagsaldoAltEnh', + 'LagResAntAltEnh', + 'LagStalle') + # print_filter = ('Article', 'articles_collection') + # to_json_filter = ('Article', 'articles_collection') ArtNr = Column(Integer, ForeignKey('ar.ArtNr'), primary_key=True) -class Articles(Base, RawBaseModel): +class Article(Base, RawBaseModel): __tablename__ = 'ar' - column_map = {'ArtNr': 'ArticleNumber', - 'ArtBeskr': 'ArticleName', - 'LagSaldoArtikel': 'Balance', - 'EnhetsKod': 'Unit', - 'ArtListPris': 'ListPrice'} - print_only = ( + __column_map__ = {'ArtNr': 'ArticleNumber', + 'ArtBeskr': 'ArticleName', + 'ArtBeskrSpec': 'ArticleSpec', + 'Edit': 'ArticleLongSpec', + 'LagSaldoArtikel': 'UnitBalance', + 'EnhetsKod': 'Unit', + 'ArtListPris': 'UnitListPrice', + 'Extra1': 'WholeSaleUnit'} + __to_dict_only__ = ( 'ArtNr', 'ArtBeskr', + 'ArtBeskrSpec', + 'Edit', 'CommodityGroup', + 'ProductClass', + 'ArticleClass', 'ArticleBalance', 'EnhetsKod', 'LagSaldoArtikel', 'RowCreatedDt', - 'ArtListPris') + 'ArtListPris', + 'PictureFileName', + 'UnitListPrice', + 'Extra1', + 'ListPrice', + 'Balance') ArtNr = Column(Integer, primary_key=True) VaruGruppKod = Column(Integer, ForeignKey('vg.VaruGruppKod'), primary_key=True) + ArtProdKlass = Column(Integer, ForeignKey('xp.ArtProdKlass'), primary_key=True) + ArtKod = Column(Integer, ForeignKey('xm.ArtKod'), primary_key=True) - CommodityGroup = relationship(CommodityGroup) + CommodityGroup = relationship(CommodityGroup, lazy='joined') + ProductClass = relationship(ProductClass, lazy='joined') + ArticleClass = relationship(ArticleClass, lazy='joined') ArticleBalance = relationship(ArticleBalance) + ArticleUnit = relationship(ArticleUnit) + + def get_unit_conv(self): + if self.ArtFsgForp: + return self.ArtFsgForp + + for unit in self.ArticleUnit: + if unit.AltEnhetOrderStd == "1": + if unit.AltEnhetOmrFaktor: + return unit.AltEnhetOmrFaktor + else: + return unit.ArticleAlternativeUnit.AltEnhetOmrFaktor + + return 1 + + @hybrid_property + def ListPrice(self): + try: + return self.ArtListPris * self.get_unit_conv() + except TypeError: + logger.debug("NoneType error, %s" % self.ArtNr) + + @hybrid_property + def Balance(self): + try: + return self.LagSaldoArtikel / self.get_unit_conv() + except TypeError: + logger.debug("NoneType error, %s" % self.ArtNr) + @classmethod def _base_filters(self, obj): return RawBaseModel._base_filters( @@ -88,17 +178,102 @@ class Articles(Base, RawBaseModel): ) -class Companies(Base, RawBaseModel): +class Company(Base, RawBaseModel): __tablename__ = 'fr' - column_map = {'FtgNr': 'CompanyNumber', 'FtgNamn': 'CompanyName'} - print_only = ('CompanyNumber', 'CompanyName') + __column_map__ = {'FtgNr': 'CompanyNumber', 'FtgNamn': 'CompanyName'} + __to_dict_only__ = ('FtgNr', 'FtgNamn', 'Customer') FtgNr = Column(String, primary_key=True) + Customer = relationship('Customer', uselist=False, back_populates='Company', lazy='joined') + + +class CustomerCategory(Base, RawBaseModel): + __tablename__ = 'x1k' + + KundKategoriKod = Column(Integer, primary_key=True) + + +class Customer(Base, RawBaseModel): + __tablename__ = 'kus' + __column_map__ = {'FtgNr': 'CompanyNumber', 'kundkategorikod': 'CustomerCategoryCode', + 'PrisListaKundSpec': 'PriceListPrimary', 'PrisLista': 'PriceListSecondary'} + __to_dict_only__ = ('kundkategorikod', 'PriceList', 'PriceListCommon', 'CustomerCategory', + 'PrisLista', 'PrisListaKundSpec') + + FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True) + KundKategoriKod = Column(Integer, ForeignKey('x1k.KundKategoriKod')) + PrisLista = Column(Integer, ForeignKey('prh.PrisLista')) + PrisListaKundSpec = Column(Integer, ForeignKey('prh.PrisLista')) + + Company = relationship("Company", back_populates="Customer") + PriceList = relationship("PriceList", uselist=False, + lazy='joined', foreign_keys='PriceList.FtgNr') + + PriceListCommon = relationship("PriceList", uselist=False, + foreign_keys='PriceList.PrisLista', + primaryjoin="Customer.PrisLista==PriceList.PrisLista") + + KundKategori = relationship("CustomerCategory") + + @hybrid_property + def CustomerCategory(self): + return self.KundKategori.KundKatBeskr + + +class PriceList(Base, RawBaseModel): + __tablename__ = 'prh' + __column_map__ = {'PrisListaBeskr': 'Description', 'PrisLista': 'PriceListNumber', + 'MarkUpBelopp': 'PriceFactor'} + __to_dict_only__ = ('PrisListaBeskr', 'PrisLista', 'PriceListItems', 'MarkUpBelopp') + + PrisLista = Column(Integer, primary_key=True) + FtgNr = Column(String, ForeignKey('kus.FtgNr')) + + Customer = relationship('Customer', uselist=False, foreign_keys='Customer.PrisListaKundSpec') + PriceListItems = relationship('PriceListItem', back_populates="PriceList", lazy='joined') + + +class PriceListItem(Base, RawBaseModel): + __tablename__ = 'prl' + __column_map__ = {'ArtNr': 'ArticleNumber', 'vb_pris': 'UnitPrice', + 'MarkUpBelopp': 'UnitPriceFactor', 'NollFaktor': 'NullPriceAllowed'} + __to_dict_only__ = ('ArtNr', 'vb_pris', 'MarkUpBelopp', 'NollFaktor', 'Price') + __to_dict_filter__ = ['PriceList'] + + # Do not serialize price list relationship + __dict_args__ = { + 'adapters': { + **{ + PriceList: None + }, + **RawBaseModel.__dict_args__['adapters'] + } + } + + PrisLista = Column(Integer, ForeignKey('prh.PrisLista'), primary_key=True) + ArtNr = Column(Integer, ForeignKey('ar.ArtNr'), primary_key=True) + + PriceList = relationship('PriceList', uselist=False) + Article = relationship(Article) + + # TODO: Could likely be optimized by getting all articles in one query and mangled in repo + @hybrid_property + def Price(self): + if not self.vb_pris and not self.MarkUpBelopp: + return ( + (self.Article.ArtListPris + self.PriceList.MarkUpBelopp) * + self.Article.get_unit_conv()) + if self.vb_pris: + return self.vb_pris * self.Article.get_unit_conv() + else: + return ( + (self.Article.ArtListPris + self.MarkUpBelopp) * + self.Article.get_unit_conv()) + Base.prepare() # Base companies for cusomters and suppliers -Customers = Base.classes.kus # Customer information -Orders = Base.classes.oh # Orders by customers +Order = Base.classes.oh # Orders by customers DelivLoc = Base.classes.lp # Connections between a delivery company and customer company diff --git a/pyjeeves/repositories/__init__.py b/pyjeeves/repositories/__init__.py index 21e1020..f7f45be 100644 --- a/pyjeeves/repositories/__init__.py +++ b/pyjeeves/repositories/__init__.py @@ -1,2 +1,4 @@ from .location import Location -from .article import Article \ No newline at end of file +from .article import Article, ArticleCategory +from .company import Company +from .pricelist import PriceList \ No newline at end of file diff --git a/pyjeeves/repositories/article.py b/pyjeeves/repositories/article.py index d172954..c4f5bef 100644 --- a/pyjeeves/repositories/article.py +++ b/pyjeeves/repositories/article.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- -from pyjeeves.models.raw import Articles +from pyjeeves.models.raw import Article as ArticleModel, ProductClass, ArticleClass, CommodityGroup from sqlalchemy.sql.expression import and_ +from sqlalchemy.orm.exc import NoResultFound from pyjeeves import logging logger = logging.getLogger("PyJeeves." + __name__) @@ -9,36 +10,51 @@ logger = logging.getLogger("PyJeeves." + __name__) # Relocate Jeeves modules to separate folder and let a "master" module handle imports, and setup. class Article(): - """Handles dispatch locations in Jeeves""" - def __init__(self): - super(Article, self).__init__() + """Handles articles in Jeeves""" @staticmethod def get(art_no): """ Query an article by number """ - return Articles.query.filter_by( - ArtNr=art_no - ).one() + try: + return ArticleModel.query.filter_by( + ArtNr=art_no + ).one() + except NoResultFound: + raise KeyError @staticmethod - def get_all(filter_=and_(Articles.ItemStatusCode == 0, Articles.ArtKod != 2)): + def get_all(filter_=and_(ArticleModel.ItemStatusCode == 0, ArticleModel.ArtKod != 2)): # .filter_by(ItemStatusCode=0, ArtKod=2) - return Articles.query.filter(filter_).all() + return ArticleModel.query.filter(filter_).all() + + +class ArticleCategory(): + """Handles article categories, such as classes and groups in Jeeves""" + + @staticmethod + def get_all(): + # .filter_by(ItemStatusCode=0, ArtKod=2) + prod_classes = ProductClass.query.all() + art_classes = ArticleClass.query.all() + com_groups = CommodityGroup.query.all() + + return {'ProductClasses': prod_classes, + 'ArticleClasses': art_classes, 'CommodityGroups': com_groups} if __name__ == '__main__': - # print([column.key for column in Companies.__table__.columns]) + # print([column.key for column in Company.__table__.columns]) logger.info("Starting TEST") # session = RawSession() logger.info("Testing gettings an article") - # c1 = session.query(Companies).filter_by(FtgNr="179580").first() - # print(Articles) - c1 = Articles.query.filter_by(ArtNr="2103").first() + # c1 = session.query(Company).filter_by(FtgNr="179580").first() + # print(ArticleModel) + c1 = ArticleModel.query.filter_by(ArtNr="2103").first() print(c1) logger.info(c1.json) - print ( - len(Article.get_all()) + print( + len(ArticleModel.get_all()) ) diff --git a/pyjeeves/repositories/company.py b/pyjeeves/repositories/company.py new file mode 100644 index 0000000..62de891 --- /dev/null +++ b/pyjeeves/repositories/company.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +from pyjeeves.models.raw import Company as CompanyModel, Customer as CustomerModel +from sqlalchemy.sql.expression import and_ + +from pyjeeves import logging +logger = logging.getLogger("PyJeeves." + __name__) + + +# Relocate Jeeves modules to separate folder and let a "master" module handle imports, and setup. +class Company(): + """Handles companies in Jeeves""" + + @staticmethod + def get(ftg_nr): + """ Query an article by number """ + return CompanyModel.query.filter_by( + FtgNr=ftg_nr + ).one() + + @staticmethod + def get_all_active_customers(): + cust = CustomerModel.query.filter(and_(CustomerModel.Makulerad == 0)).all() + return [c.CompanyModel for c in cust] + + @staticmethod + def get_list(ftg_nr=[]): + return CompanyModel.query.filter( + CompanyModel.FtgNr.in_(ftg_nr) + ).all() + + +if __name__ == '__main__': + # print([column.key for column in CompanyModel.__table__.columns]) + + logger.info("Starting TEST") + # session = RawSession() + + logger.info("Testing gettings a company") + # c1 = session.query(CompanyModel).filter_by(FtgNr="179580").first() + # print(CompanyModel) + + # print(CompanyModel.get_list(['406569', '179580', '2440070', '179584'])) + from pprint import pprint + pprint(CompanyModel.get('179584').to_dict()) + + # c1 = CompanyModel.query.filter_by(FtgNr="406569").first() + # print(c1) + # logger.info(c1.json) + + # print( + # len(CompanyModel.get_all_active_customers()) + # ) + + # print(CompanyModel.get_all_active_customers()[0].CompanyModel) diff --git a/pyjeeves/repositories/location.py b/pyjeeves/repositories/location.py index 37485d2..c2a4ce4 100644 --- a/pyjeeves/repositories/location.py +++ b/pyjeeves/repositories/location.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from pyjeeves.models.raw import Companies, DelivLoc +from pyjeeves.models.raw import Company, DelivLoc from pyjeeves import logging logger = logging.getLogger("PyJeeves." + __name__) @@ -9,6 +9,7 @@ logger = logging.getLogger("PyJeeves." + __name__) # Relocate Jeeves modules to separate folder and let a "master" module handle imports, and setup. class Location(): """Handles dispatch locations in Jeeves""" + def __init__(self): super(Location, self).__init__() self.associated_company = '' # Company with new/existing locations @@ -30,7 +31,7 @@ class Location(): def create_lev_location(self, ftgnr='', name='', address='', postal_code='', city='', gln='', invoice_ref='', phone=''): - _loc = Companies( + _loc = Company( FtgNr=str(ftgnr), FtgNamn=name, FtgPostadr5=address, FtgLevPostNr=postal_code, FtgPostLevAdr3=city, EAN_Loc_Code=gln, FtgPostAdr1=invoice_ref, ComNr=phone, @@ -49,21 +50,21 @@ class Location(): for deliv_loc in self._deliv_locs: deliv_loc.merge() # self.session.merge(deliv_loc) # Create "connnections" between Customer and Location. - Companies.commit() + Company.commit() # self.session.commit() if __name__ == '__main__': - # print([column.key for column in Companies.__table__.columns]) + # print([column.key for column in Company.__table__.columns]) logger.info("Starting TEST") # session = RawSession() logger.info("Testing gettings a company") - # c1 = session.query(Companies).filter_by(FtgNr="179580").first() - print(Companies) - c1 = Companies.query.filter_by(FtgNr="179580").first() + # c1 = session.query(Company).filter_by(FtgNr="179580").first() + print(Company) + c1 = Company.query.filter_by(FtgNr="179580").first() logger.info(c1.json) # RawSession.remove() # from sqlalchemy.inspection import inspect -# print (inspect(Companies).columns.items()) +# print (inspect(Company).columns.items()) diff --git a/pyjeeves/repositories/pricelist.py b/pyjeeves/repositories/pricelist.py new file mode 100644 index 0000000..b5007f6 --- /dev/null +++ b/pyjeeves/repositories/pricelist.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- + +from pyjeeves.models.raw import PriceList as PriceListModel +from sqlalchemy.orm.exc import NoResultFound + +from pyjeeves import logging +logger = logging.getLogger("PyJeeves." + __name__) + + +# Relocate Jeeves modules to separate folder and let a "master" module handle imports, and setup. +class PriceList(): + """Handles price lists in Jeeves""" + + @staticmethod + def get(price_list_no): + """ Query a price list by number """ + try: + return PriceListModel.query.filter_by( + PrisLista=price_list_no + ).one() + except NoResultFound: + raise KeyError diff --git a/requirements.txt b/requirements.txt index f4e9656..26f5eed 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,7 @@ nose==1.3.7 Sphinx==1.8.5 pymssql==2.1.4 SQLAlchemy==1.3.1 +sqlservice==1.1.3 PyMySQL==0.9.3 alembic==1.0.8 PyYAML==5.1 \ No newline at end of file diff --git a/setup.py b/setup.py index 7835a5f..bf97f9d 100755 --- a/setup.py +++ b/setup.py @@ -24,6 +24,7 @@ setup( 'sphinx', 'pymssql', 'sqlalchemy', + 'sqlservice', 'PyMySQL', 'alembic', 'pyyaml', From 0af38e286e8fc64401dba372cf3a7c12345a9be3 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Fri, 30 Aug 2019 12:09:10 +0200 Subject: [PATCH 05/24] Stored procedure helpers. Order repo and model. More SQLService updates. * A generic stored procedure helper added, and support for calling them. * Order and OrderItem tables added, including helpers and calls to SP for creation and updates. * Minor updates to other repositories. --- pyjeeves/connector.py | 142 +++++++--------- pyjeeves/models/abc.py | 83 +++++++++- pyjeeves/models/raw.py | 177 ++++++++++++++++---- pyjeeves/models/sp_classes.py | 250 +++++++++++++++++++++++++++++ pyjeeves/repositories/__init__.py | 3 +- pyjeeves/repositories/article.py | 37 ++++- pyjeeves/repositories/company.py | 7 +- pyjeeves/repositories/order.py | 166 +++++++++++++++++++ pyjeeves/repositories/pricelist.py | 3 +- 9 files changed, 730 insertions(+), 138 deletions(-) create mode 100644 pyjeeves/models/sp_classes.py create mode 100644 pyjeeves/repositories/order.py diff --git a/pyjeeves/connector.py b/pyjeeves/connector.py index 0eba94a..bb62f48 100644 --- a/pyjeeves/connector.py +++ b/pyjeeves/connector.py @@ -6,29 +6,31 @@ Global objects """ from pyjeeves import logging, config -from weakref import WeakValueDictionary -from sqlalchemy import create_engine, orm -from sqlalchemy.orm import sessionmaker, scoped_session, Query, aliased -from sqlalchemy.orm.exc import UnmappedClassError -from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta + +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker, scoped_session +# from sqlalchemy.orm.exc import UnmappedClassError +from pymssql import OperationalError + +from sqlservice import SQLClient, SQLQuery logger = logging.getLogger("PyJeeves." + __name__) -class BaseFilterQuery(Query): +class BaseFilterQuery(SQLQuery): def get(self, ident): # Override get() so that the flag is always checked in the # DB as opposed to pulling from the identity map. - this is optional. - return Query.get(self.populate_existing(), ident) + return SQLQuery.get(self.populate_existing(), ident) def __iter__(self): - return Query.__iter__(self.private()) + return SQLQuery.__iter__(self.private()) def from_self(self, *ent): # Override from_self() to automatically apply # the criterion to. this works with count() and # others. - return Query.from_self(self.private(), *ent) + return SQLQuery.from_self(self.private(), *ent) def private(self): # Fetch the model name and column list and apply model-specific base filters @@ -49,94 +51,58 @@ class BaseFilterQuery(Query): return self -class Model(object): - """Baseclass for custom user models.""" - - #: the query class used. The :attr:`query` attribute is an instance - #: of this class. By default a :class:`BaseQuery` is used. - query_class = BaseFilterQuery - - #: an instance of :attr:`query_class`. Can be used to query the - #: database for instances of this model. - query = None - - -class MetaBaseModel(DeclarativeMeta): - """ Define a metaclass for the BaseModel - Implement `__getitem__` for managing aliases """ - - def __init__(cls, *args): - super().__init__(*args) - cls.aliases = WeakValueDictionary() - - def __getitem__(cls, key): - try: - alias = cls.aliases[key] - except KeyError: - alias = aliased(cls) - cls.aliases[key] = alias - return alias - - -class _QueryProperty(object): - - def __init__(self, sa): - self.sa = sa - - def __get__(self, obj, type): - try: - mapper = orm.class_mapper(type) - if mapper: - if type.__module__ == 'pyjeeves.models.raw': - return type.query_class(mapper, session=self.sa.raw_session()) - else: - return type.query_class(mapper, session=self.sa.meta_session()) - except UnmappedClassError: - return None - - class DBConnector(object): """This class is used to control the SQLAlchemy integration""" - def __init__(self, enabled_sessions=['raw'], metadata=None): + + def __init__(self, enabled_clients=['raw'], metadata=None): logger.info("Creating engines and sessionmakers") - self.raw_session, self.meta_session = self.create_scoped_session(enabled_sessions) - self.Model = self.make_declarative_base(metadata) - # self.Query = Query + self.raw, self.raw_engine = (self.raw_session() if 'raw' in enabled_clients else {}) + self.meta = (self.meta_session() if 'meta' in enabled_clients else {}) - @property - def metadata(self): - """Returns the metadata""" - return self.Model.metadata + def callproc(self, procedure="", params=[]): + conn = self.raw_engine.raw_connection() - # @property - # def _config(self): - # """Returns the configuration""" - # return config() + with conn.cursor() as cursor: + try: + retval = cursor.callproc(procedure, params) + try: + cursor.nextset() + retval = cursor.fetchall() + except OperationalError: + logger.debug("Executed statement has no resultset") - def make_declarative_base(self, metadata=None): - """Creates the declarative base.""" - base = declarative_base(cls=Model, name='Model', - metadata=metadata, - metaclass=MetaBaseModel) - base.query = _QueryProperty(self) - return base + conn.commit() - def create_scoped_session(self, sessions=[]): - RawSession, MetaSession = None, None - if 'raw' in sessions: - raw_engine = create_engine( - 'mssql+pymssql://{user}:{pw}@{host}:{port}/{db}?charset=utf8'.format( - **config.config['databases']['raw']), - implicit_returning=False) + finally: + conn.close() - RawSession = scoped_session(sessionmaker(bind=raw_engine)) + return retval - if 'meta' in sessions: - meta_engine = create_engine( - 'mysql+pymysql://{user}:{pw}@{host}:{port}/{db}?charset=utf8mb4'.format( - **config.config['databases']['meta'])) + def execute(self, operation=""): + conn = self.raw_engine.raw_connection() - MetaSession = scoped_session(sessionmaker(bind=meta_engine)) + with conn.cursor(as_dict=True) as cursor: + try: + cursor.execute(operation) + results = cursor.fetchall() + finally: + conn.close() + return results - return RawSession, MetaSession + def raw_session(self): + + uri = 'mssql+pymssql://{user}:{pw}@{host}:{port}/{db}?charset=utf8'.format( + **config.config['databases']['raw']) + sql_client_config = {'SQL_DATABASE_URI': uri} + db = SQLClient(sql_client_config, query_class=BaseFilterQuery) + + return db.session, db.engine + + def meta_session(self): + + meta_engine = create_engine( + 'mysql+pymysql://{user}:{pw}@{host}:{port}/{db}?charset=utf8mb4'.format( + **config.config['databases']['meta'])) + + return scoped_session(sessionmaker(bind=meta_engine)) diff --git a/pyjeeves/models/abc.py b/pyjeeves/models/abc.py index 9130c30..592cc5c 100644 --- a/pyjeeves/models/abc.py +++ b/pyjeeves/models/abc.py @@ -2,11 +2,17 @@ Define an Abstract Base Class (ABC) for models """ from decimal import Decimal +from datetime import datetime from sqlalchemy.sql.expression import and_ from sqlalchemy.ext.hybrid import hybrid_property +from sqlalchemy.exc import OperationalError -from sqlservice import ModelBase +from sqlalchemy.schema import MetaData, Column +from sqlalchemy.types import Integer +from sqlalchemy.orm.collections import InstrumentedList + +from sqlservice import ModelBase, as_declarative from pyjeeves import logging @@ -14,7 +20,19 @@ from . import db logger = logging.getLogger("PyJeeves." + __name__) +logger.info("Reading Jeeves DB structure") +meta = MetaData() +try: + meta.reflect(bind=db.raw.connection(), + only=['ar', 'ars', 'xae', 'xare', 'fr', 'kus', 'x1k', + 'oh', 'orp', 'lp', 'vg', 'xp', 'xm', 'prh', 'prl']) +except OperationalError as e: + logger.error("Failed to read Jeeves DB structure") + raise e + + +@as_declarative(metadata=meta) class RawBaseModel(ModelBase): """ Generalize __init__, __repr__ and to_json Based on the models columns , ForetagKod=1""" @@ -22,6 +40,7 @@ class RawBaseModel(ModelBase): __to_dict_filter__ = [] __to_dict_only__ = () __column_map__ = {} + __reversed_column_map__ = lambda self: {v: k for k, v in self.__column_map__.items()} # noqa __table_args__ = { 'extend_existing': True @@ -29,11 +48,19 @@ class RawBaseModel(ModelBase): __dict_args__ = { 'adapters': { - # datetime: lambda value, col, *_: value.strftime('%Y-%m-%d'), - Decimal: lambda value, col, *_: "{:.2f}".format(value) + datetime: lambda value, col, *_: value.strftime('%Y-%m-%d %H:%M'), + Decimal: lambda value, col, *_: float(value) # "{:.2f}".format(value) } } + ForetagKod = Column(Integer, primary_key=True) + + def __init__(self, data=None, **kargs): + if data: + data = self._map_keys(data) + self.update(data, **kargs) + # super(RawBaseModel, self).__init__(data=None, **kargs) + @classmethod def _base_filters(self, obj, filters=and_()): # This method provides base filtering, additional filtering can be done in subclasses @@ -50,6 +77,44 @@ class RawBaseModel(ModelBase): return self.__column_map__[key] return key + def _map_keys(self, data={}): + rv = {} + for key, value in self.__reversed_column_map__().items(): + if key in data: + rv[value] = data[key] + for key, value in data.items(): + if hasattr(self, key): + if key in self.relationships().keys(): + rv[key] = self._map_relationship_keys(key, value) + else: + rv[key] = value + return rv + + def _map_relationship_keys(self, field, value): + """Get model relationships fields value. Almost a copy from SQLService ModelBase""" + relation_attr = getattr(self.__class__, field) + uselist = relation_attr.property.uselist + relation_class = relation_attr.property.mapper.class_ + + if uselist: + if not isinstance(value, (list, tuple)): # pragma: no cover + value = [value] + + # Convert each value instance to relationship class. + value = [relation_class(val) if not isinstance(val, relation_class) + else val + for val in value] + elif value and isinstance(value, dict): + # Convert single value object to relationship class. + value = relation_class(value) + elif not value and isinstance(value, dict): + # If value is {} and we're trying to update a relationship + # attribute, then we need to set to None to nullify relationship + # value. + value = None + + return value + def descriptors_to_dict(self): """Return a ``dict`` that maps data loaded in :attr:`__dict__` to this model's descriptors. The data contained in :attr:`__dict__` represents @@ -90,6 +155,18 @@ class RawBaseModel(ModelBase): return rv + def from_dict(self, data={}): + for key, value in self.__reversed_column_map__().items(): + if key in data: + self[value] = data[key] + for key, value in data.items(): + if hasattr(self, key): + if isinstance(self[key], InstrumentedList): + pass + else: + self[key] = value + return self + def merge(self): db.raw_session.merge(self) return self diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index cdac9ed..c99cfb7 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -5,50 +5,38 @@ Jeeves raw data models """ -# from sqlalchemy import Column, String -from sqlalchemy.schema import MetaData, ForeignKey, Column + +from sqlalchemy.schema import ForeignKey, Column from sqlalchemy.orm import relationship from sqlalchemy.types import Integer, String -from sqlalchemy.ext.automap import automap_base + from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.sql.expression import and_ -from sqlalchemy.exc import OperationalError - -from . import db from pyjeeves import logging from .abc import RawBaseModel +from .sp_classes import OrderHead, OrderRow, PlaceOrder + +import re logger = logging.getLogger("PyJeeves." + __name__) -logger.info("Reading Jeeves DB structure") - -meta = MetaData() -try: - meta.reflect(bind=db.raw_session.connection(), - only=['ar', 'ars', 'xae', 'xare', 'fr', 'kus', 'x1k', - 'oh', 'lp', 'vg', 'xp', 'xm', 'prh', 'prl']) -except OperationalError as e: - logger.error("Failed to read Jeeves DB structure") - raise e - -Base = automap_base(cls=db.Model, name='Model', metadata=meta) -class ProductClass(Base, RawBaseModel): +class ProductClass(RawBaseModel): __tablename__ = 'xp' __column_map__ = {'ArtProdKlass': 'ProductClassNumber', 'ArtProdklBeskr': 'ProductClassName'} __to_dict_only__ = ('ArtProdKlass', 'ArtProdklBeskr') # print_filter = ('Articles', 'articles_collection') -class ArticleClass(Base, RawBaseModel): +class ArticleClass(RawBaseModel): __tablename__ = 'xm' __column_map__ = {'ArtKod': 'ArticleClassNumber', 'ArtTypBeskr': 'ArticleClassName'} __to_dict_only__ = ('ArtKod', 'ArtTypBeskr') # print_filter = ('Articles', 'articles_collection') -class CommodityGroup(Base, RawBaseModel): +class CommodityGroup(RawBaseModel): __tablename__ = 'vg' __column_map__ = {'VaruGruppKod': 'CommodityGroupNumber', 'VaruGruppBeskr': 'CommodityGroupName'} @@ -61,14 +49,14 @@ class CommodityGroup(Base, RawBaseModel): ArticleClass = relationship(ArticleClass) -class ArticleAlternativeUnit(Base, RawBaseModel): +class ArticleAlternativeUnit(RawBaseModel): __tablename__ = 'xae' __column_map__ = {'AltEnhetKod': 'UnitCode', 'AltEnhetBeskr': 'UnitName', 'AltEnhetOmrFaktor': 'DefaultUnitConv'} __to_dict_only__ = ('AltEnhetBeskr', 'AltEnhetOmrFaktor') -class ArticleUnit(Base, RawBaseModel): +class ArticleUnit(RawBaseModel): __tablename__ = 'xare' __column_map__ = {'ArtNr': 'ArticleNumber', 'AltEnhetKod': 'UnitCode', 'AltEnhetOmrFaktor': 'UnitConv', @@ -82,7 +70,7 @@ class ArticleUnit(Base, RawBaseModel): ArticleAlternativeUnit = relationship(ArticleAlternativeUnit) -class ArticleBalance(Base, RawBaseModel): +class ArticleBalance(RawBaseModel): __tablename__ = 'ars' __column_map__ = {'LagSaldo': 'Balance', 'LagResAnt': 'ReservedBalance', @@ -100,7 +88,7 @@ class ArticleBalance(Base, RawBaseModel): ArtNr = Column(Integer, ForeignKey('ar.ArtNr'), primary_key=True) -class Article(Base, RawBaseModel): +class Article(RawBaseModel): __tablename__ = 'ar' __column_map__ = {'ArtNr': 'ArticleNumber', @@ -178,7 +166,7 @@ class Article(Base, RawBaseModel): ) -class Company(Base, RawBaseModel): +class Company(RawBaseModel): __tablename__ = 'fr' __column_map__ = {'FtgNr': 'CompanyNumber', 'FtgNamn': 'CompanyName'} __to_dict_only__ = ('FtgNr', 'FtgNamn', 'Customer') @@ -188,13 +176,17 @@ class Company(Base, RawBaseModel): Customer = relationship('Customer', uselist=False, back_populates='Company', lazy='joined') -class CustomerCategory(Base, RawBaseModel): +class DelivLoc(RawBaseModel): + __tablename__ = 'lp' + + +class CustomerCategory(RawBaseModel): __tablename__ = 'x1k' KundKategoriKod = Column(Integer, primary_key=True) -class Customer(Base, RawBaseModel): +class Customer(RawBaseModel): __tablename__ = 'kus' __column_map__ = {'FtgNr': 'CompanyNumber', 'kundkategorikod': 'CustomerCategoryCode', 'PrisListaKundSpec': 'PriceListPrimary', 'PrisLista': 'PriceListSecondary'} @@ -218,10 +210,10 @@ class Customer(Base, RawBaseModel): @hybrid_property def CustomerCategory(self): - return self.KundKategori.KundKatBeskr + return self.KundKategori.KundKatBeskr if self.KundKategori else "" -class PriceList(Base, RawBaseModel): +class PriceList(RawBaseModel): __tablename__ = 'prh' __column_map__ = {'PrisListaBeskr': 'Description', 'PrisLista': 'PriceListNumber', 'MarkUpBelopp': 'PriceFactor'} @@ -234,7 +226,7 @@ class PriceList(Base, RawBaseModel): PriceListItems = relationship('PriceListItem', back_populates="PriceList", lazy='joined') -class PriceListItem(Base, RawBaseModel): +class PriceListItem(RawBaseModel): __tablename__ = 'prl' __column_map__ = {'ArtNr': 'ArticleNumber', 'vb_pris': 'UnitPrice', 'MarkUpBelopp': 'UnitPriceFactor', 'NollFaktor': 'NullPriceAllowed'} @@ -272,8 +264,123 @@ class PriceListItem(Base, RawBaseModel): self.Article.get_unit_conv()) -Base.prepare() +class Order(RawBaseModel): + __tablename__ = 'oh' + __column_map__ = {'OrderNr': 'OrderNumber', 'FtgNr': 'CompanyNumber', + 'OrdDatum': 'OrderDate', 'OrdStat': 'OrderStatusCode', + 'OrdLevAdr1': 'AddrName', 'OrdLevAdr2': 'AddrCO', + 'OrdLevAdr3': 'AddrStreet', 'OrdLevAdrLandsKod': 'AddrCountry', + 'KundBestNr': 'CustomerContact', 'KundRef2': 'CustomerReference', + 'GodsMarke1': 'ShippingInfo', 'GodsMarke2': 'InternalInfo', + 'TA_MailNotified': 'ShippingEmail', 'TA_PhonNotifiedNo': 'ShippingPhone', + 'TA_SMSNotifiedNo': 'ShippingSMS', 'LevSattKod': 'ShippingTypeCode'} + __to_dict_only__ = ('OrderNr', 'FtgNr', 'OrdDatum', 'OrdStat', 'CompanyName', 'LevSattKod', + 'OrdLevAdr1', 'OrdLevAdr2', 'OrdLevAdr3', + 'OrdLevAdrLandsKod', 'KundBestNr', 'KundRef2', 'GodsMarke1', + 'GodsMarke2', 'OrderItems', 'AddrPostalCode', 'AddrCity', + 'TA_MailNotified', 'TA_PhonNotifiedNo', 'TA_SMSNotifiedNo') -# Base companies for cusomters and suppliers -Order = Base.classes.oh # Orders by customers -DelivLoc = Base.classes.lp # Connections between a delivery company and customer company + __dict_args__ = { + 'adapters': { + **{ + 'OrdDatum': lambda ord_date, *_: ord_date.strftime("%Y-%m-%d"), + }, + **RawBaseModel.__dict_args__['adapters'] + } + } + + OrderNr = Column(Integer, primary_key=True) + FtgNr = Column(String, ForeignKey('fr.FtgNr')) + + Company = relationship('Company', uselist=False) + OrderItems = relationship('OrderItem', uselist=True, back_populates="Order", lazy='joined') + + @hybrid_property + def CompanyName(self): + return self.Company.FtgNamn if self.Company else "" + + @CompanyName.setter + def CompanyName(self, value): + return + + @hybrid_property + def AddrPostalCode(self): + if not self.OrdLevAdr4: + return + s = re.split('(?!\d)\s(?!\d)', self.OrdLevAdr4) + return s[0] if len(s) > 1 else '' + + @AddrPostalCode.setter + def AddrPostalCode(self, value): + self.OrdLevAdr4 = value + (self.OrdLevAdr4 if self.OrdLevAdr4 else '') + + @hybrid_property + def AddrCity(self): + if not self.OrdLevAdr4: + return + s = re.split('(?!\d)\s(?!\d)', self.OrdLevAdr4, maxsplit=1) + return s[1] if len(s) > 1 else '' + + @AddrCity.setter + def AddrCity(self, value): + self.OrdLevAdr4 = (self.OrdLevAdr4 if self.OrdLevAdr4 else '') + ' ' + value + + def create(self, webusername=None): + # TODO: Extend with additional functionlity if desired. + self['OrderNr'], invoicing_possible = OrderHead(self['FtgNr'], webusername).callproc() + return self, invoicing_possible + + def save(self, invoiced=False): + payment_method = 'invoice' + if not invoiced: + payment_method = 'card' + PlaceOrder( + self['FtgNr'], self['OrderNr'], payment_method, data=self.to_dict()).callproc() + + return self + + +class OrderItem(RawBaseModel): + __tablename__ = 'orp' + __column_map__ = {'OrdRadNr': 'OrderRowNumber', 'vb_pris': 'UnitPrice', + 'ArtNr': 'ArticleNumber', 'OrdAntal': 'UnitAmount', + 'OrdAntalAltEnh': 'AltUnitAmount', 'AltEnhetKod': 'AltUnit'} + __to_dict_only__ = ('OrdRadNr', 'vb_pris', 'ArtNr', 'ArticleName', 'OrdAntal', + 'OrdAntalAltEnh', 'AltEnhetKod') + + # Do not serialize order relationship + __dict_args__ = { + 'adapters': { + **{ + Order: None, + }, + **RawBaseModel.__dict_args__['adapters'] + } + } + + OrderNr = Column(Integer, ForeignKey('oh.OrderNr'), primary_key=True) + OrdRadNr = Column(Integer, primary_key=True) + OrdRadNrStrPos = Column(Integer, primary_key=True) + OrdRestNr = Column(Integer, primary_key=True) + + ArtNr = Column(Integer, ForeignKey('ar.ArtNr')) + + Order = relationship('Order', uselist=False) + Article = relationship(Article) + + @hybrid_property + def ArticleName(self): + return self.Article.ArtBeskr if self.Article else "" + + @ArticleName.setter + def ArticleName(self, value): + return + + def save(self): + # TODO: Additional information may be returned if desired. + row_no = OrderRow( + company_no=self['FtgNr'], order_no=self['OrderNr'], item_no=self['ArtNr'], + qty=self['OrdAntal'], qty_alt_unit=self['OrdAntalAltEnh'], + alt_unit=self['AltEnhetKod'], pers_sign='marlin').callproc() + self['OrdRadNr'] = row_no + return self diff --git a/pyjeeves/models/sp_classes.py b/pyjeeves/models/sp_classes.py new file mode 100644 index 0000000..740d694 --- /dev/null +++ b/pyjeeves/models/sp_classes.py @@ -0,0 +1,250 @@ +# -*- coding: utf-8 -*- +import pymssql +from collections import OrderedDict +from pyjeeves.models import db +from pyjeeves import logging +# from datetime import datetime +# from decimal import Decimal + +logger = logging.getLogger("PyJeeves." + __name__) + + +class StoredProcedure(OrderedDict): + __raw_params = {} + # https://www.mssqltips.com/sqlservertip/1669/generate-a-parameter-list-for-all-sql-server-stored-procedures-and-functions/ # noqa + query = """SELECT SCHEMA_NAME(SCHEMA_ID) AS [Schema], + SO.name AS [ObjectName], + SO.Type_Desc AS [ObjectType (UDF/SP)], + P.parameter_id AS [ParameterID], + P.name AS [ParameterName], + TYPE_NAME(P.user_type_id) AS [ParameterDataType], + P.max_length AS [ParameterMaxBytes], + P.is_output AS [IsOutPutParameter] + FROM sys.objects AS SO + INNER JOIN sys.parameters AS P + ON SO.OBJECT_ID = P.OBJECT_ID + WHERE SO.name LIKE '%Jeeves_Esales_%' OR + SO.name LIKE '%JAPP_spr_LogTrade_%' AND + SO.OBJECT_ID IN ( SELECT OBJECT_ID + FROM sys.objects + WHERE TYPE IN ('P','FN')) + ORDER BY [Schema], SO.name, P.parameter_id""" + + logger.debug("Getting information about stored procedures from database") + + for param in db.execute(query): + if param['ObjectName'] not in __raw_params: + __raw_params[param['ObjectName']] = OrderedDict() + param_name = param['ParameterName'][1:] + __raw_params[param['ObjectName']][param_name] = param + + @classmethod + def get_params_for(cls, procedure_name): + rv = OrderedDict() + for key in cls.__raw_params[procedure_name]: + param = cls.__raw_params[procedure_name][key] + if 'int' in param['ParameterDataType'].lower(): + param_type = int + elif ('money' in param['ParameterDataType'].lower() or + 'decimal' in param['ParameterDataType'].lower() or + 'float' in param['ParameterDataType'].lower() or + 'qty' in param['ParameterDataType'].lower()): + param_type = float + else: + # TODO: Format datetime and perhaps decimal? + param_type = str + + if param['IsOutPutParameter'] == 1: + param_type = pymssql.output(param_type) + else: + param_type = param_type() + + rv[key] = param_type + + return rv + + def __init__(self, procedure_name): + super(StoredProcedure, self).__init__() + self.procedure = procedure_name + self.update(StoredProcedure.get_params_for(self.procedure)) + + def _set_output(self, data=(), ret_resultset=False): + if ret_resultset: + return data + if len(self) != len(data): + raise + for p, k in enumerate(self): + if isinstance(self[k], pymssql.output): + self[k] = data[p] + return self + # Should the original object be unmodified? Return a new object: + # return [(k, data[p]) for p, k in enumerate(self)] + + def callproc(self, resultset=False): + return self._set_output(db.callproc( + self.procedure, + self.values()), + resultset) + + def values(self): + return [value if value else None + for value in super(StoredProcedure, self).values()] + + def __setitem__(self, key, obj): + if (key in self and type(self[key]) is not type(obj) and + obj is not None and not isinstance(self[key], pymssql.output)): + raise TypeError + super(StoredProcedure, self).__setitem__(key, obj) + + +class OrderHead(StoredProcedure): + """Mapping for the Jeeves_Esales_CreateOrder stored procedure parameters + webapp031 and WEBAPP003 determines default order status""" + # TODO: Extend with additional functionlity if desired. + + def __init__(self, company_no, web_user_name): + super(OrderHead, self).__init__('Jeeves_Esales_CreateOrder') + + self['c_CompanyNo'] = company_no + + # Some defaults: + self['c_ForetagKod'] = 1 # Hardcoded to LK + self['c_PersSign'] = 'marlin' # From API profile, or default + # self['c_OrderType'] = None # Default set by WEBAPP008 + # self['c_TemplateRowID'] = None # No template used + # self['c_Saljare'] = None # 600 # From API profile, or default + + # Unique ID added to 'kpw' when invoicing is allowed. + print(web_user_name) + self['c_webUserName'] = web_user_name + + # self['LangID'] = 0 # Default to Swedish + # self['BatchId'] = '' # unused + + # self['Run_Type'] = None # Could be 'R', but doesn't work + + # self['Edit'] = None # Custom ordertext, currently not used in procedure + # self['EditExt'] = None # Custom ordertext, currently not used in procedure + + # self['Lagstalle'] = None # '1' # Used to override customer default + # self['OverrideCreditLimit'] = 0 # Set to a char to override credit limit + # self['OrderNumber'] = pymssql.output(int) + + def callproc(self): + super(OrderHead, self).callproc() + # If call succeeded, then order is allowed to be invoiced. + return self['o_OrderNumber'], bool(self['c_webUserName']) + + +class OrderRow(StoredProcedure): + """Mapping for the Jeeves_Esales_AddOrderRow stored procedure parameters + AltEnhetKod logic needs to have been added to the procedure""" + + def __init__(self, company_no, order_no, item_no, + qty=None, qty_alt_unit=None, alt_unit='', pers_sign='biz'): + super(OrderRow, self).__init__('Jeeves_Esales_AddOrderRow') + + self['c_CompanyNo'] = str(company_no) + self['c_OrderNumber'] = int(order_no) + self['c_ItemNo'] = str(item_no) + self['c_Qty'] = float(qty) if qty else None + self['c_QtyAltEnh'] = float(qty_alt_unit) if qty_alt_unit else None + self['c_AltEnhetKod'] = str(alt_unit) + self['c_PersSign'] = str(pers_sign) + + # Used to set date for delivery (c_OrdBegLevDat) and (c_OrdBerLevDat) + self['c_RequestedDate'] = None + + # Some defaults: + self['c_ForetagKod'] = 1 # Hardcoded to LK + # self['OrderNumber'] = 0 # Required, ordernumber to add row to + # self['webUserName'] = order_head['webUserName'] + # self['CompanyNo'] = order_head['CompanyNo'] + # self['PersSign'] = order_head['PersSign'] + # self['LangID'] = order_head['LangID'] + # self['ItemNo'] = '' # Required, item to create row for + # self['c_Qty'] = None # Only one of qty or qtyaltenh may be used + # self['QtyAltEnh'] = None + # self['RequestedDate'] = '' # unused + # self['BatchId'] = order_head['BatchId'] + # self['ArtSerieNr'] = '' # unused + # self['c_OrderType'] = None + # self['Run_Type'] = None # Could be 'R', but doesn't work + # self['c_TemplateRowID'] = None # No template used + # self['Edit'] = None # Custom order row text + # self['EditExt'] = None # Custom extended order row text + # self['Lagstalle'] = None # str: use default + # self['AltEnhetKod'] = '' # Override default alternative unit if desired + # self['AllocateAvailable'] = 0 # unused + # self['OverrideCreditLimit'] = 0 # Set to a char to override credit limit + # self['o_OrderRow'] = pymssql.output(int) + # self['o_NextQty'] = pymssql.output(float) + # self['o_NextDate'] = pymssql.output(str) + # self['o_LastQty'] = pymssql.output(float) + # self['o_LastDate'] = pymssql.output(str) + # self['o_AllocatedQty'] = pymssql.output(float) + # self['o_AllocatedDate'] = pymssql.output(str) + + def callproc(self): + super(OrderRow, self).callproc() + return self['o_OrderRow'] + + +class PlaceOrder(StoredProcedure): + """Mapping for the Jeeves_Esales_PlaceOrder stored procedure parameters + webapp031 and WEBAPP003 determines default order status""" + + def __init__(self, company_no, order_no, payment_method='card', data={}): + super(PlaceOrder, self).__init__('Jeeves_Esales_PlaceOrder') + + self['c_CompanyNo'] = str(company_no) + self['c_OrderNumber'] = int(order_no) + self['c_kundref2'] = data.get('CustomerContact') # Er ref, kontaktperson + self['c_kundbestnr'] = data.get('CustomerReference') + self['c_editext'] = data.get('ExtraText') # Extern text + self['c_CoName'] = data.get('AddrName') + self['c_Addr1'] = data.get('AddrCO') # Lev.adress, c/o + self['c_Addr2'] = data.get('AddrStreet') + self['c_PostalCode'] = data.get('AddrPostalCode') + self['c_City'] = data.get('AddrCity') + self['c_CountryCode'] = data.get('AddrCountry', 'SE') # Ex: SE, FI etc. + self['c_godsmarke1'] = data.get('ShippingInfo') + self['c_godsmarke2'] = data.get('InternalInfo') # Kundspecifikt + + notify_info = NotifyInfo(company_no).callproc() + self['c_TA_MailNotified'] = data.get('ShippingEmail', notify_info.get('email')) + self['c_TA_PhonNotifiedNo'] = data.get('ShippingPhone', notify_info.get('phone')) + self['c_TA_SMSNotifiedNo'] = data.get('ShippingSMS', notify_info.get('sms')) + + # 1 = card, else invoice. Card requires manual update. + self['c_PaymentType'] = '1' if payment_method is 'card' else '0' + + self['c_LevSattKod'] = 2 # 2 = Schenker, 4 = Collect + self['c_orderStatus'] = None # Override orderStatusCode when using invoicing + + self['c_ForetagKod'] = 1 # Hardcoded to LK + self['c_orderStatus'] = None + self['c_ProvinceCode'] = None # For US customers etc. + + +class NotifyInfo(StoredProcedure): + """Mapping for the JAPP_spr_LogTrade_Get_NotifyInfo stored procedure parameters + webapp031 and WEBAPP003 determines default order status""" + + def __init__(self, company_no): + super(NotifyInfo, self).__init__('JAPP_spr_LogTrade_Get_NotifyInfo') + + self['c_FtgNr'] = str(company_no) + + self['c_ForetagKod'] = 1 # Hardcoded to LK + + def callproc(self): + result = super(NotifyInfo, self).callproc(resultset=True) + ret = {'email': None, 'sms': None, 'phone': None} + + if isinstance(result, list): + for r in result: + if r[1][7:].lower() in ret: + ret[r[1][7:].lower()] = r[0] + + return ret diff --git a/pyjeeves/repositories/__init__.py b/pyjeeves/repositories/__init__.py index f7f45be..b58262c 100644 --- a/pyjeeves/repositories/__init__.py +++ b/pyjeeves/repositories/__init__.py @@ -1,4 +1,5 @@ from .location import Location from .article import Article, ArticleCategory from .company import Company -from .pricelist import PriceList \ No newline at end of file +from .pricelist import PriceList +from .order import Order \ No newline at end of file diff --git a/pyjeeves/repositories/article.py b/pyjeeves/repositories/article.py index c4f5bef..d0ad923 100644 --- a/pyjeeves/repositories/article.py +++ b/pyjeeves/repositories/article.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from pyjeeves.models.raw import Article as ArticleModel, ProductClass, ArticleClass, CommodityGroup +from pyjeeves.models import db from sqlalchemy.sql.expression import and_ from sqlalchemy.orm.exc import NoResultFound @@ -10,14 +11,14 @@ logger = logging.getLogger("PyJeeves." + __name__) # Relocate Jeeves modules to separate folder and let a "master" module handle imports, and setup. class Article(): - """Handles articles in Jeeves""" + """Handles articles in Jeeves, currently filters out all articles with class = 2""" @staticmethod def get(art_no): """ Query an article by number """ try: - return ArticleModel.query.filter_by( - ArtNr=art_no + return db.raw.query(ArticleModel).filter_by( + ArtNr=str(art_no) ).one() except NoResultFound: raise KeyError @@ -25,7 +26,29 @@ class Article(): @staticmethod def get_all(filter_=and_(ArticleModel.ItemStatusCode == 0, ArticleModel.ArtKod != 2)): # .filter_by(ItemStatusCode=0, ArtKod=2) - return ArticleModel.query.filter(filter_).all() + return db.raw.query(ArticleModel).filter(filter_).all() + + @staticmethod + def is_salable(art_no_list=[]): + """ Returns true if all articles are salable, + else false with error information """ + articles = db.raw.query(ArticleModel).filter( + and_(ArticleModel.ArtNr.in_(art_no_list))).all() + + blocked_articles = [article.ArtNr for article in articles + if article.ArtKod == 2 or article.ItemStatusCode != 0] + unknown_articles = [x for x in art_no_list + if x not in set([article.ArtNr for article in articles])] + + if blocked_articles or unknown_articles: + errors = {} + if blocked_articles: + errors['blocked_articles'] = blocked_articles + if unknown_articles: + errors['unknown_articles'] = unknown_articles + return False, errors + + return True, {} class ArticleCategory(): @@ -34,9 +57,9 @@ class ArticleCategory(): @staticmethod def get_all(): # .filter_by(ItemStatusCode=0, ArtKod=2) - prod_classes = ProductClass.query.all() - art_classes = ArticleClass.query.all() - com_groups = CommodityGroup.query.all() + prod_classes = db.raw.query(ProductClass).all() + art_classes = db.raw.query(ArticleClass).all() + com_groups = db.raw.query(CommodityGroup).all() return {'ProductClasses': prod_classes, 'ArticleClasses': art_classes, 'CommodityGroups': com_groups} diff --git a/pyjeeves/repositories/company.py b/pyjeeves/repositories/company.py index 62de891..c8d3bd7 100644 --- a/pyjeeves/repositories/company.py +++ b/pyjeeves/repositories/company.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from pyjeeves.models.raw import Company as CompanyModel, Customer as CustomerModel +from pyjeeves.models import db from sqlalchemy.sql.expression import and_ from pyjeeves import logging @@ -14,18 +15,18 @@ class Company(): @staticmethod def get(ftg_nr): """ Query an article by number """ - return CompanyModel.query.filter_by( + return db.raw.query(CompanyModel).filter_by( FtgNr=ftg_nr ).one() @staticmethod def get_all_active_customers(): - cust = CustomerModel.query.filter(and_(CustomerModel.Makulerad == 0)).all() + cust = db.raw.query(CustomerModel).filter(and_(CustomerModel.Makulerad == 0)).all() return [c.CompanyModel for c in cust] @staticmethod def get_list(ftg_nr=[]): - return CompanyModel.query.filter( + return db.raw.query(CompanyModel).filter( CompanyModel.FtgNr.in_(ftg_nr) ).all() diff --git a/pyjeeves/repositories/order.py b/pyjeeves/repositories/order.py new file mode 100644 index 0000000..de7168c --- /dev/null +++ b/pyjeeves/repositories/order.py @@ -0,0 +1,166 @@ +# -*- coding: utf-8 -*- + +from pyjeeves.models.raw import Order as OrderModel, OrderItem as OrderItemModel +from pyjeeves.models import db + +from sqlalchemy.sql.expression import and_ +from sqlalchemy.orm.exc import NoResultFound + +from pyjeeves import logging +logger = logging.getLogger("PyJeeves." + __name__) + + +# Relocate Jeeves modules to separate folder and let a "master" module handle imports, and setup. +class Order(): + """Handles orders in Jeeves""" + + @staticmethod + def get(order_no): + """ Query an order by number """ + try: + return db.raw.query(OrderModel).filter_by( + OrderNr=order_no + ).one() + except NoResultFound: + raise KeyError + + @staticmethod + def get_all_unregistered_order(): + order = OrderModel.query.filter(and_(OrderModel.OrderStatusCode == 00)).all() + return order + + @staticmethod + def get_list(order_no=[]): + return db.raw.query(OrderModel).filter( + OrderModel.OrderNr.in_(order_no) + ).all() + + @staticmethod + def get_all_by_company(ftg_nr=None): + if not ftg_nr: + raise KeyError + return db.raw.query(OrderModel).filter( + OrderModel.FtgNr == str(ftg_nr) + ).all() + + @staticmethod + def create(customer_no, head={}, items=[], web_user_name=None): + head['CompanyNumber'] = str(customer_no) + + # Create order from head dict to get an order number + order, invoice_possible = OrderModel(head).create(web_user_name) + if not order['OrderNr']: + raise + + # Go through order items, if any, and save them to DB. + order['OrderItems'] = Order.create_rows(order['FtgNr'], order['OrderNr'], items) + + # Save the information in the order object + # Boolean argument deceides if order has contact person, and should be set 'registered' + order.save(invoice_possible) + + return order + + @staticmethod + def create_rows(company_no, order_no, items=[]): + rv = [] + + for item in items: + if not isinstance(item, OrderItemModel): + item = OrderItemModel(item) + item['OrderNr'] = order_no + item['FtgNr'] = company_no + rv.append(item.save()) + + return rv + + +if __name__ == '__main__': + + logger.info("Starting TEST") + logger.info("Testing getting an order") + + logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) + + # import os + # os.environ['TDSDUMP'] = 'stdout' + + # Jeeves_Esales_CreateOrder + + # All "Jeeves_Esales_" procedures may perhaps be used? + + # select * + # from LKTest.information_schema.routines + # where routine_type = 'PROCEDURE' + # AND SPECIFIC_NAME LIKE '%Jeeves_Esales_%'; + # data = { + # 'OrderNr': 500500, + # 'OrdDatum': datetime.now(), + # 'OrdTyp': 1, + # 'FtgNr': customer_no, + # 'OrdBerLevDat': datetime(2019, 7, 10), + # 'ValKod': 'SEK', + # 'OrderItems': [ + # {'ArtNr': '2005', + # 'OrdAntal': 5.4} + # ], + # 'Saljare': '500', + # 'PersSign': 'marlin', + # 'MomsKod': 2, + # 'BetKod': '10', + # 'LevVillkKod': 3, + # 'LevSattKod': 2, + # 'LagStalle': 0, + # 'ForetagKod': 1 + # } + order_head = { + 'AddrCO': '', + 'AddrCity': 'Uppsala', + 'AddrCountry': 'SE', + 'AddrName': 'Lindvalls Kaffe', + 'AddrPostalCode': '751 82', + 'AddrStreet': 'Kungsgatan 60', + 'CompanyName': 'Lindvalls Kaffe AB (övrigt)', + 'CompanyNumber': '179580', + 'CustomerContact': 'Test beställning', + 'CustomerReference': 'no po number', + 'InternalInfo': 'Test order', + 'OrderNumber': 419040, + 'OrderStatusCode': 13, + 'ShippingEmail': 'order@lindvallskaffe.se', + 'ShippingInfo': 'Lev till godsmottagning', + 'ShippingPhone': '018-480 20 00', + 'ShippingSMS': '0703 25 25 02', + 'ShippingTypeCode': 4} + order_items = [ + {'AltEnhetKod': 'Bricka5,4', + 'ArticleName': 'Lindvalls Mellanrost', + 'ArticleNumber': '2003', + 'OrdAntalAltEnh': '1.00', + 'OrderRowNumber': 10, + 'UnitAmount': '5.40', + 'UnitPrice': '92.00'}, + {'AltEnhetKod': 'Bricka5,4', + 'ArticleName': 'Lindvalls Mellanrost', + 'ArticleNumber': '2003', + 'OrdAntalAltEnh': 1.666666667, + 'OrderRowNumber': 20, + 'UnitAmount': '9.00', + 'UnitPrice': '92.00'}, + {'AltEnhetKod': 'Bricka5,4', + 'ArticleName': 'Lindvalls Mellanrost', + 'ArticleNumber': '2003', + 'OrdAntalAltEnh': '5.00', + 'OrderRowNumber': 30, + 'UnitAmount': '27.00', + 'UnitPrice': '92.00'}] + + # print(Order.get_list(['406569', '179580', '2440070', '179584'])) + from pprint import pprint + # pprint(Order.get(7000028).to_dict()) + pprint(Order.create('179584', order_head, order_items).to_dict()) + # pprint(Order.get('419033').to_dict()) + + # c1 = CompanyModel.query.filter_by(FtgNr="406569").first() + # print(c1) + # logger.info(c1.json) diff --git a/pyjeeves/repositories/pricelist.py b/pyjeeves/repositories/pricelist.py index b5007f6..cf25e0f 100644 --- a/pyjeeves/repositories/pricelist.py +++ b/pyjeeves/repositories/pricelist.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from pyjeeves.models.raw import PriceList as PriceListModel +from pyjeeves.models import db from sqlalchemy.orm.exc import NoResultFound from pyjeeves import logging @@ -15,7 +16,7 @@ class PriceList(): def get(price_list_no): """ Query a price list by number """ try: - return PriceListModel.query.filter_by( + return db.raw.query(PriceListModel).filter_by( PrisLista=price_list_no ).one() except NoResultFound: From ee902ee733bcd175bc101e25e1a6f971fc18c43a Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Thu, 5 Sep 2019 15:26:18 +0200 Subject: [PATCH 06/24] Set WholeSaleUnit to altUnit if Extra1 is not set. Fix webUserName. --- pyjeeves/models/raw.py | 37 ++++++++++++++++++++++++---------- pyjeeves/models/sp_classes.py | 10 +++++---- pyjeeves/repositories/order.py | 2 +- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index c99cfb7..8ca878d 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -97,8 +97,8 @@ class Article(RawBaseModel): 'Edit': 'ArticleLongSpec', 'LagSaldoArtikel': 'UnitBalance', 'EnhetsKod': 'Unit', - 'ArtListPris': 'UnitListPrice', - 'Extra1': 'WholeSaleUnit'} + # 'Extra1': 'WholeSaleUnit', + 'ArtListPris': 'UnitListPrice'} __to_dict_only__ = ( 'ArtNr', 'ArtBeskr', @@ -114,7 +114,8 @@ class Article(RawBaseModel): 'ArtListPris', 'PictureFileName', 'UnitListPrice', - 'Extra1', + # 'Extra1', + 'WholeSaleUnit', 'ListPrice', 'Balance') @@ -131,19 +132,32 @@ class Article(RawBaseModel): ArticleUnit = relationship(ArticleUnit) + def _get_standard_alt_unit(self): + for unit in self.ArticleUnit: + if unit.AltEnhetOrderStd == "1": + return unit + def get_unit_conv(self): if self.ArtFsgForp: return self.ArtFsgForp - for unit in self.ArticleUnit: - if unit.AltEnhetOrderStd == "1": - if unit.AltEnhetOmrFaktor: - return unit.AltEnhetOmrFaktor - else: - return unit.ArticleAlternativeUnit.AltEnhetOmrFaktor + unit = self._get_standard_alt_unit() + if unit and unit.AltEnhetOmrFaktor: + return unit.AltEnhetOmrFaktor + else: + return unit.ArticleAlternativeUnit.AltEnhetOmrFaktor return 1 + @hybrid_property + def WholeSaleUnit(self): + if self.Extra1: + return self.Extra1 + + unit = self._get_standard_alt_unit() + if unit and not self.ArtFsgForp: + return unit.ArticleAlternativeUnit.AltEnhetBeskr + @hybrid_property def ListPrice(self): try: @@ -330,12 +344,13 @@ class Order(RawBaseModel): self['OrderNr'], invoicing_possible = OrderHead(self['FtgNr'], webusername).callproc() return self, invoicing_possible - def save(self, invoiced=False): + def save(self, invoiced=False, webusername=None): payment_method = 'invoice' if not invoiced: payment_method = 'card' PlaceOrder( - self['FtgNr'], self['OrderNr'], payment_method, data=self.to_dict()).callproc() + self['FtgNr'], self['OrderNr'], webusername, + payment_method, data=self.to_dict()).callproc() return self diff --git a/pyjeeves/models/sp_classes.py b/pyjeeves/models/sp_classes.py index 740d694..42ac6bb 100644 --- a/pyjeeves/models/sp_classes.py +++ b/pyjeeves/models/sp_classes.py @@ -115,7 +115,6 @@ class OrderHead(StoredProcedure): # self['c_Saljare'] = None # 600 # From API profile, or default # Unique ID added to 'kpw' when invoicing is allowed. - print(web_user_name) self['c_webUserName'] = web_user_name # self['LangID'] = 0 # Default to Swedish @@ -141,7 +140,7 @@ class OrderRow(StoredProcedure): AltEnhetKod logic needs to have been added to the procedure""" def __init__(self, company_no, order_no, item_no, - qty=None, qty_alt_unit=None, alt_unit='', pers_sign='biz'): + qty=None, qty_alt_unit=None, alt_unit=None, pers_sign='biz'): super(OrderRow, self).__init__('Jeeves_Esales_AddOrderRow') self['c_CompanyNo'] = str(company_no) @@ -149,7 +148,7 @@ class OrderRow(StoredProcedure): self['c_ItemNo'] = str(item_no) self['c_Qty'] = float(qty) if qty else None self['c_QtyAltEnh'] = float(qty_alt_unit) if qty_alt_unit else None - self['c_AltEnhetKod'] = str(alt_unit) + self['c_AltEnhetKod'] = str(alt_unit) if alt_unit else None self['c_PersSign'] = str(pers_sign) # Used to set date for delivery (c_OrdBegLevDat) and (c_OrdBerLevDat) @@ -194,7 +193,7 @@ class PlaceOrder(StoredProcedure): """Mapping for the Jeeves_Esales_PlaceOrder stored procedure parameters webapp031 and WEBAPP003 determines default order status""" - def __init__(self, company_no, order_no, payment_method='card', data={}): + def __init__(self, company_no, order_no, web_user_name=None, payment_method='card', data={}): super(PlaceOrder, self).__init__('Jeeves_Esales_PlaceOrder') self['c_CompanyNo'] = str(company_no) @@ -219,6 +218,9 @@ class PlaceOrder(StoredProcedure): # 1 = card, else invoice. Card requires manual update. self['c_PaymentType'] = '1' if payment_method is 'card' else '0' + # Unique ID added to 'kpw' when invoicing is allowed. + self['c_webUserName'] = web_user_name + self['c_LevSattKod'] = 2 # 2 = Schenker, 4 = Collect self['c_orderStatus'] = None # Override orderStatusCode when using invoicing diff --git a/pyjeeves/repositories/order.py b/pyjeeves/repositories/order.py index de7168c..3ac0464 100644 --- a/pyjeeves/repositories/order.py +++ b/pyjeeves/repositories/order.py @@ -57,7 +57,7 @@ class Order(): # Save the information in the order object # Boolean argument deceides if order has contact person, and should be set 'registered' - order.save(invoice_possible) + order.save(invoice_possible, web_user_name) return order From cf7ed0904984502591f6dcd0f39480a851ce2f29 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Fri, 6 Sep 2019 08:25:59 +0200 Subject: [PATCH 07/24] Fix get conversion factor NoneType error, for articles. --- pyjeeves/models/raw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index 8ca878d..33675d1 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -144,7 +144,7 @@ class Article(RawBaseModel): unit = self._get_standard_alt_unit() if unit and unit.AltEnhetOmrFaktor: return unit.AltEnhetOmrFaktor - else: + elif unit: return unit.ArticleAlternativeUnit.AltEnhetOmrFaktor return 1 From a23e88ff2f17d6d3c580946bdcc7f830d4e5964e Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Fri, 6 Sep 2019 11:21:42 +0200 Subject: [PATCH 08/24] Added 'WholeSaleAmount' to Article, and refactored article internal functions --- pyjeeves/models/raw.py | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index 33675d1..177297f 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -116,6 +116,7 @@ class Article(RawBaseModel): 'UnitListPrice', # 'Extra1', 'WholeSaleUnit', + 'WholeSaleAmount', 'ListPrice', 'Balance') @@ -130,33 +131,44 @@ class Article(RawBaseModel): ArticleClass = relationship(ArticleClass, lazy='joined') ArticleBalance = relationship(ArticleBalance) - ArticleUnit = relationship(ArticleUnit) + ArticleUnit = relationship(ArticleUnit, uselist=True) + + def _get_alt_unit(self): + # Find matching alternative unit for amount per piece, or return default for the article. + spec_conv = self.ArtFsgForp if self.ArtFsgForp else None - def _get_standard_alt_unit(self): for unit in self.ArticleUnit: - if unit.AltEnhetOrderStd == "1": + if unit.AltEnhetOrderStd == "1" and not spec_conv: + return unit + elif (spec_conv and (unit.AltEnhetOmrFaktor == spec_conv or + unit.ArticleAlternativeUnit.AltEnhetOmrFaktor == spec_conv)): return unit def get_unit_conv(self): + # Return conversion factor for the article's alternative unit if self.ArtFsgForp: return self.ArtFsgForp - unit = self._get_standard_alt_unit() - if unit and unit.AltEnhetOmrFaktor: - return unit.AltEnhetOmrFaktor - elif unit: - return unit.ArticleAlternativeUnit.AltEnhetOmrFaktor + unit = self._get_alt_unit() + if unit: + return (unit.AltEnhetOmrFaktor if unit.AltEnhetOmrFaktor + else unit.ArticleAlternativeUnit.AltEnhetOmrFaktor) return 1 @hybrid_property def WholeSaleUnit(self): - if self.Extra1: + # Description of alternative unit, or Extra1 if no alternative unit is in use. + unit = self._get_alt_unit() + if unit: + return unit.ArticleAlternativeUnit.AltEnhetBeskr + else: return self.Extra1 - unit = self._get_standard_alt_unit() - if unit and not self.ArtFsgForp: - return unit.ArticleAlternativeUnit.AltEnhetBeskr + @hybrid_property + def WholeSaleAmount(self): + # Amount of units in the alternative unit of the article, or 1 if none exist. + return self.get_unit_conv() @hybrid_property def ListPrice(self): @@ -176,7 +188,7 @@ class Article(RawBaseModel): def _base_filters(self, obj): return RawBaseModel._base_filters( obj, - and_(obj.LagTyp == 0) + and_(obj.ItemStatusCode == 0) ) From fc7c1e13bce7cb64b4c9c4df5e9fc83d56b36645 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Mon, 9 Sep 2019 17:13:10 +0200 Subject: [PATCH 09/24] Implement support for contact persons and web users. Also show addr info for company. --- pyjeeves/models/abc.py | 3 +- pyjeeves/models/raw.py | 99 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 97 insertions(+), 5 deletions(-) diff --git a/pyjeeves/models/abc.py b/pyjeeves/models/abc.py index 592cc5c..334c3c7 100644 --- a/pyjeeves/models/abc.py +++ b/pyjeeves/models/abc.py @@ -26,7 +26,8 @@ meta = MetaData() try: meta.reflect(bind=db.raw.connection(), only=['ar', 'ars', 'xae', 'xare', 'fr', 'kus', 'x1k', - 'oh', 'orp', 'lp', 'vg', 'xp', 'xm', 'prh', 'prl']) + 'oh', 'orp', 'lp', 'vg', 'xp', 'xm', 'prh', 'prl', + 'kp', 'kpw', 'cr', 'X4', 'xw']) except OperationalError as e: logger.error("Failed to read Jeeves DB structure") raise e diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index 177297f..7a8ca3c 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -192,14 +192,92 @@ class Article(RawBaseModel): ) +class ContactInformationType(RawBaseModel): + __tablename__ = 'X4' + __to_dict_only__ = ('ComKod', 'ComBeskr') + + +class ContactInformation(RawBaseModel): + __tablename__ = 'cr' + __column_map__ = {'ComNr': 'Information'} + __to_dict_only__ = ('InformationType', 'ComNr') + + FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True) + FtgKontaktNr = Column(Integer, ForeignKey('kp.FtgKontaktNr'), primary_key=True) + ComKod = Column(String, ForeignKey('X4.ComKod'), primary_key=True) + + ContactInformationType = relationship(ContactInformationType) + + @hybrid_property + def InformationType(self): + return self.ContactInformationType.ComBeskr if self.ContactInformationType else "" + + +class ContactPerson(RawBaseModel): + __tablename__ = 'kp' + __column_map__ = {'FtgKontaktNr': 'ContactNumber', 'FtgPerson': 'ContactName'} + __to_dict_only__ = ('FtgKontaktNr', 'FtgPerson', 'ContactInformation') + + FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True) + FtgKontaktNr = Column(Integer, primary_key=True) + + ContactInformation = relationship( + "ContactInformation", lazy='joined', + foreign_keys='ContactInformation.FtgNr, ContactInformation.FtgKontaktNr', + primaryjoin="and_(ContactInformation.FtgNr==ContactPerson.FtgNr," + "ContactInformation.FtgKontaktNr==ContactPerson.FtgKontaktNr)") + + +class WebUser(RawBaseModel): + __tablename__ = 'kpw' + __to_dict_only__ = ('WebUserName', 'ValidToUse', 'ContactPersonName', 'ContactPersonNumber') + + FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True) + FtgKontaktNr = Column(Integer, ForeignKey('kp.FtgKontaktNr'), primary_key=True) + + ContactPerson = relationship( + ContactPerson, uselist=False, lazy='joined', + foreign_keys='ContactPerson.FtgNr, ContactPerson.FtgKontaktNr', + primaryjoin="and_(ContactPerson.FtgNr==WebUser.FtgNr," + "ContactPerson.FtgKontaktNr==WebUser.FtgKontaktNr)") + + @hybrid_property + def ContactPersonName(self): + return self.ContactPerson.FtgPerson if self.ContactPerson else "" + + @hybrid_property + def ContactPersonNumber(self): + return self.ContactPerson.FtgKontaktNr if self.ContactPerson else "" + + +class LanguageCodes(RawBaseModel): + __tablename__ = 'xw' + + SprakKod = Column(Integer, primary_key=True) + + class Company(RawBaseModel): __tablename__ = 'fr' - __column_map__ = {'FtgNr': 'CompanyNumber', 'FtgNamn': 'CompanyName'} - __to_dict_only__ = ('FtgNr', 'FtgNamn', 'Customer') + __column_map__ = {'FtgNr': 'CompanyNumber', 'FtgNamn': 'CompanyName', + 'OrgNr': 'CompanyIdentityNumber', 'EUMomsNr': 'CompanyVATNumber', + 'FtgPostAdr1': 'AddrCO', 'FtgPostadr5': 'AddrStreet', + 'FtgLevPostNr': 'AddrPostalCode', 'FtgPostLevAdr3': 'AddrCity', + 'LandsKod': 'AddrCountry', + 'FtgPostAdr2': 'PostAddrStreet', 'FtgPostnr': 'PostAddrPostalCode', + 'FtgPostAdr3': 'PostAddrCity'} + __to_dict_only__ = ('FtgNr', 'FtgNamn', 'Customer', 'ContactPersons', 'ContactInformation', + 'FtgPostadr5', 'FtgPostAdr1', 'FtgPostLevAdr3', 'FtgLevPostNr', 'LandsKod', + 'FtgPostAdr2', 'FtgPostnr', 'FtgPostAdr3', 'OrgNr', 'EUMomsNr') FtgNr = Column(String, primary_key=True) Customer = relationship('Customer', uselist=False, back_populates='Company', lazy='joined') + ContactPersons = relationship("ContactPerson", lazy='joined') + ContactInformation = relationship( + "ContactInformation", lazy='joined', + foreign_keys='ContactInformation.FtgNr', + primaryjoin="and_(ContactInformation.FtgNr==Company.FtgNr," + "ContactInformation.FtgKontaktNr==null())") class DelivLoc(RawBaseModel): @@ -215,12 +293,16 @@ class CustomerCategory(RawBaseModel): class Customer(RawBaseModel): __tablename__ = 'kus' __column_map__ = {'FtgNr': 'CompanyNumber', 'kundkategorikod': 'CustomerCategoryCode', - 'PrisListaKundSpec': 'PriceListPrimary', 'PrisLista': 'PriceListSecondary'} + 'PrisListaKundSpec': 'PriceListPrimary', 'PrisLista': 'PriceListSecondary', + 'GodsMarke1': 'DefaultShippingInfo', 'GodsMarke2': 'InternalInfo', + 'LevSattKod': 'DefaultShippingTypeCode', 'ValKod': 'CustomerCurrency'} __to_dict_only__ = ('kundkategorikod', 'PriceList', 'PriceListCommon', 'CustomerCategory', - 'PrisLista', 'PrisListaKundSpec') + 'PrisLista', 'PrisListaKundSpec', 'WebUsers', 'GodsMarke1', + 'GodsMarke2', 'LevSattKod', 'Language', 'ValKod') FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True) KundKategoriKod = Column(Integer, ForeignKey('x1k.KundKategoriKod')) + SprakKod = Column(Integer, ForeignKey('xw.SprakKod')) PrisLista = Column(Integer, ForeignKey('prh.PrisLista')) PrisListaKundSpec = Column(Integer, ForeignKey('prh.PrisLista')) @@ -233,11 +315,20 @@ class Customer(RawBaseModel): primaryjoin="Customer.PrisLista==PriceList.PrisLista") KundKategori = relationship("CustomerCategory") + LanguageCodes = relationship("LanguageCodes") + + WebUsers = relationship( + WebUser, uselist=True, lazy='joined', + foreign_keys='WebUser.FtgNr', primaryjoin="Customer.FtgNr==WebUser.FtgNr") @hybrid_property def CustomerCategory(self): return self.KundKategori.KundKatBeskr if self.KundKategori else "" + @hybrid_property + def Language(self): + return self.LanguageCodes.Sprak if self.LanguageCodes else "" + class PriceList(RawBaseModel): __tablename__ = 'prh' From 6339e9d1ce36804c0be9fb3c3936f73f4349113a Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Mon, 23 Sep 2019 14:12:34 +0200 Subject: [PATCH 10/24] Fixes to pricing and customer models. Add req deliv to order. And more.. * Fix NullPriceAllowed and logic in price calculation * Fix CustomerCategory join in Customer model * Add RequestedDeliveryDate to order creation * Start using Jeeves Signatures on order creation --- pyjeeves/models/raw.py | 35 ++++++++++++++++++++++---------- pyjeeves/models/sp_classes.py | 12 +++++++---- pyjeeves/repositories/company.py | 23 +++++++++++++++++---- pyjeeves/repositories/order.py | 17 +++++++++++----- 4 files changed, 63 insertions(+), 24 deletions(-) diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index 7a8ca3c..3e5af38 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -301,7 +301,6 @@ class Customer(RawBaseModel): 'GodsMarke2', 'LevSattKod', 'Language', 'ValKod') FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True) - KundKategoriKod = Column(Integer, ForeignKey('x1k.KundKategoriKod')) SprakKod = Column(Integer, ForeignKey('xw.SprakKod')) PrisLista = Column(Integer, ForeignKey('prh.PrisLista')) PrisListaKundSpec = Column(Integer, ForeignKey('prh.PrisLista')) @@ -314,7 +313,9 @@ class Customer(RawBaseModel): foreign_keys='PriceList.PrisLista', primaryjoin="Customer.PrisLista==PriceList.PrisLista") - KundKategori = relationship("CustomerCategory") + KundKategori = relationship( + "CustomerCategory", uselist=False, foreign_keys='CustomerCategory.KundKategoriKod', + primaryjoin="Customer.kundkategorikod==CustomerCategory.KundKategoriKod") LanguageCodes = relationship("LanguageCodes") WebUsers = relationship( @@ -346,8 +347,8 @@ class PriceList(RawBaseModel): class PriceListItem(RawBaseModel): __tablename__ = 'prl' __column_map__ = {'ArtNr': 'ArticleNumber', 'vb_pris': 'UnitPrice', - 'MarkUpBelopp': 'UnitPriceFactor', 'NollFaktor': 'NullPriceAllowed'} - __to_dict_only__ = ('ArtNr', 'vb_pris', 'MarkUpBelopp', 'NollFaktor', 'Price') + 'MarkUpBelopp': 'UnitPriceFactor', 'KodNollPris': 'NullPriceAllowed'} + __to_dict_only__ = ('ArtNr', 'vb_pris', 'MarkUpBelopp', 'KodNollPris', 'Price') __to_dict_filter__ = ['PriceList'] # Do not serialize price list relationship @@ -370,8 +371,12 @@ class PriceListItem(RawBaseModel): @hybrid_property def Price(self): if not self.vb_pris and not self.MarkUpBelopp: + if self.KodNollPris == "1": + return 0 + + MarkUpBelop = self.PriceList.MarkUpBelopp if self.PriceList.MarkUpBelopp else 0 return ( - (self.Article.ArtListPris + self.PriceList.MarkUpBelopp) * + (self.Article.ArtListPris + MarkUpBelop) * self.Article.get_unit_conv()) if self.vb_pris: return self.vb_pris * self.Article.get_unit_conv() @@ -390,9 +395,10 @@ class Order(RawBaseModel): 'KundBestNr': 'CustomerContact', 'KundRef2': 'CustomerReference', 'GodsMarke1': 'ShippingInfo', 'GodsMarke2': 'InternalInfo', 'TA_MailNotified': 'ShippingEmail', 'TA_PhonNotifiedNo': 'ShippingPhone', - 'TA_SMSNotifiedNo': 'ShippingSMS', 'LevSattKod': 'ShippingTypeCode'} + 'TA_SMSNotifiedNo': 'ShippingSMS', 'LevSattKod': 'ShippingTypeCode', + 'OrdBerLevDat': 'RequestedDeliveryDate'} __to_dict_only__ = ('OrderNr', 'FtgNr', 'OrdDatum', 'OrdStat', 'CompanyName', 'LevSattKod', - 'OrdLevAdr1', 'OrdLevAdr2', 'OrdLevAdr3', + 'OrdLevAdr1', 'OrdLevAdr2', 'OrdLevAdr3', 'OrdBerLevDat', 'OrdLevAdrLandsKod', 'KundBestNr', 'KundRef2', 'GodsMarke1', 'GodsMarke2', 'OrderItems', 'AddrPostalCode', 'AddrCity', 'TA_MailNotified', 'TA_PhonNotifiedNo', 'TA_SMSNotifiedNo') @@ -401,6 +407,7 @@ class Order(RawBaseModel): 'adapters': { **{ 'OrdDatum': lambda ord_date, *_: ord_date.strftime("%Y-%m-%d"), + 'OrdBerLevDat': lambda ord_date, *_: ord_date.strftime("%Y-%m-%d"), }, **RawBaseModel.__dict_args__['adapters'] } @@ -444,7 +451,8 @@ class Order(RawBaseModel): def create(self, webusername=None): # TODO: Extend with additional functionlity if desired. - self['OrderNr'], invoicing_possible = OrderHead(self['FtgNr'], webusername).callproc() + self['OrderNr'], invoicing_possible = OrderHead( + self['FtgNr'], webusername, pers_sign=self['PersSign']).callproc() return self, invoicing_possible def save(self, invoiced=False, webusername=None): @@ -462,15 +470,19 @@ class OrderItem(RawBaseModel): __tablename__ = 'orp' __column_map__ = {'OrdRadNr': 'OrderRowNumber', 'vb_pris': 'UnitPrice', 'ArtNr': 'ArticleNumber', 'OrdAntal': 'UnitAmount', - 'OrdAntalAltEnh': 'AltUnitAmount', 'AltEnhetKod': 'AltUnit'} + 'OrdAntalAltEnh': 'AltUnitAmount', 'AltEnhetKod': 'AltUnit', + 'OrdBegLevDat': 'RequestedDeliveryDate'} __to_dict_only__ = ('OrdRadNr', 'vb_pris', 'ArtNr', 'ArticleName', 'OrdAntal', - 'OrdAntalAltEnh', 'AltEnhetKod') + 'OrdAntalAltEnh', 'AltEnhetKod', 'OrdBegLevDat') # Do not serialize order relationship __dict_args__ = { 'adapters': { **{ Order: None, + 'OrdBegLevDat': lambda req_date, *_: ( + req_date.strftime("%Y-%m-%d") + if not isinstance(req_date, str) else req_date), }, **RawBaseModel.__dict_args__['adapters'] } @@ -499,6 +511,7 @@ class OrderItem(RawBaseModel): row_no = OrderRow( company_no=self['FtgNr'], order_no=self['OrderNr'], item_no=self['ArtNr'], qty=self['OrdAntal'], qty_alt_unit=self['OrdAntalAltEnh'], - alt_unit=self['AltEnhetKod'], pers_sign='marlin').callproc() + alt_unit=self['AltEnhetKod'], requested_date=self['OrdBegLevDat'], + pers_sign=self['PersSign']).callproc() self['OrdRadNr'] = row_no return self diff --git a/pyjeeves/models/sp_classes.py b/pyjeeves/models/sp_classes.py index 42ac6bb..886536d 100644 --- a/pyjeeves/models/sp_classes.py +++ b/pyjeeves/models/sp_classes.py @@ -3,6 +3,7 @@ import pymssql from collections import OrderedDict from pyjeeves.models import db from pyjeeves import logging +from datetime import date # from datetime import datetime # from decimal import Decimal @@ -102,14 +103,14 @@ class OrderHead(StoredProcedure): webapp031 and WEBAPP003 determines default order status""" # TODO: Extend with additional functionlity if desired. - def __init__(self, company_no, web_user_name): + def __init__(self, company_no, web_user_name, pers_sign='biz'): super(OrderHead, self).__init__('Jeeves_Esales_CreateOrder') self['c_CompanyNo'] = company_no # Some defaults: self['c_ForetagKod'] = 1 # Hardcoded to LK - self['c_PersSign'] = 'marlin' # From API profile, or default + self['c_PersSign'] = str(pers_sign) # From API profile, or default # self['c_OrderType'] = None # Default set by WEBAPP008 # self['c_TemplateRowID'] = None # No template used # self['c_Saljare'] = None # 600 # From API profile, or default @@ -140,7 +141,8 @@ class OrderRow(StoredProcedure): AltEnhetKod logic needs to have been added to the procedure""" def __init__(self, company_no, order_no, item_no, - qty=None, qty_alt_unit=None, alt_unit=None, pers_sign='biz'): + qty=None, qty_alt_unit=None, alt_unit=None, + requested_date=None, pers_sign='biz'): super(OrderRow, self).__init__('Jeeves_Esales_AddOrderRow') self['c_CompanyNo'] = str(company_no) @@ -152,7 +154,9 @@ class OrderRow(StoredProcedure): self['c_PersSign'] = str(pers_sign) # Used to set date for delivery (c_OrdBegLevDat) and (c_OrdBerLevDat) - self['c_RequestedDate'] = None + self['c_RequestedDate'] = ( + requested_date.strftime('%Y%m%d') + if isinstance(requested_date, date) else requested_date) # Some defaults: self['c_ForetagKod'] = 1 # Hardcoded to LK diff --git a/pyjeeves/repositories/company.py b/pyjeeves/repositories/company.py index c8d3bd7..6a8191e 100644 --- a/pyjeeves/repositories/company.py +++ b/pyjeeves/repositories/company.py @@ -3,6 +3,7 @@ from pyjeeves.models.raw import Company as CompanyModel, Customer as CustomerModel from pyjeeves.models import db from sqlalchemy.sql.expression import and_ +from sqlalchemy.orm.strategy_options import Load from pyjeeves import logging logger = logging.getLogger("PyJeeves." + __name__) @@ -25,10 +26,24 @@ class Company(): return [c.CompanyModel for c in cust] @staticmethod - def get_list(ftg_nr=[]): - return db.raw.query(CompanyModel).filter( - CompanyModel.FtgNr.in_(ftg_nr) - ).all() + def get_customer_numbers(category_list=[10], class_list=[], filter_inactive=True): + category_in = CustomerModel.kundkategorikod.in_(category_list) if category_list else and_() + class_in = CustomerModel.kundklass.in_(class_list) if class_list else and_() + inactive = and_(CustomerModel.Makulerad == 0) if filter_inactive else and_() + cust = db.raw.query(CustomerModel).options( + Load(CustomerModel).noload('*')).filter( + and_(category_in, class_in, inactive)).all() + return [c.FtgNr for c in cust] + + @staticmethod + def get_list(ftg_nr=[], filter_=and_(CustomerModel.Makulerad == 0), offset=0, limit=100): + ftg_filter = and_() + if ftg_nr: + ftg_filter = CompanyModel.FtgNr.in_(ftg_nr) + + return db.raw.query(CompanyModel).join(CustomerModel).filter( + and_(ftg_filter, filter_)).order_by( + CompanyModel.FtgNr.desc()).offset(offset).limit(limit).all() if __name__ == '__main__': diff --git a/pyjeeves/repositories/order.py b/pyjeeves/repositories/order.py index 3ac0464..f86ee6a 100644 --- a/pyjeeves/repositories/order.py +++ b/pyjeeves/repositories/order.py @@ -44,8 +44,9 @@ class Order(): ).all() @staticmethod - def create(customer_no, head={}, items=[], web_user_name=None): + def create(customer_no, head={}, items=[], web_user_name=None, pers_sign='biz'): head['CompanyNumber'] = str(customer_no) + head['PersSign'] = str(pers_sign) # Create order from head dict to get an order number order, invoice_possible = OrderModel(head).create(web_user_name) @@ -53,7 +54,7 @@ class Order(): raise # Go through order items, if any, and save them to DB. - order['OrderItems'] = Order.create_rows(order['FtgNr'], order['OrderNr'], items) + order['OrderItems'] = Order.create_rows(order, items) # Save the information in the order object # Boolean argument deceides if order has contact person, and should be set 'registered' @@ -62,14 +63,20 @@ class Order(): return order @staticmethod - def create_rows(company_no, order_no, items=[]): + def create_rows(order, items=[], pers_sign='biz'): rv = [] for item in items: if not isinstance(item, OrderItemModel): item = OrderItemModel(item) - item['OrderNr'] = order_no - item['FtgNr'] = company_no + + # Set RequestedDeliveryDate from order head if not specified for items. + if order['OrdBerLevDat'] and not item['OrdBegLevDat']: + item['OrdBegLevDat'] = order['OrdBerLevDat'] + + item['OrderNr'] = order['OrderNr'] + item['FtgNr'] = order['FtgNr'] + item['PersSign'] = pers_sign rv.append(item.save()) return rv From 0330e7a4bfba0c14ae5dce9ee000cd74e5466958 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Mon, 23 Sep 2019 14:14:23 +0200 Subject: [PATCH 11/24] Commit Jeeves modifications for future tracking --- .dockerignore | 3 + .../Jeeves_Esales_AddOrderRow.spr | 852 ++++++++++++++++++ .../Jeeves_Esales_PlaceOrder.spr | 445 +++++++++ 3 files changed, 1300 insertions(+) create mode 100644 jeeves_sp_updates/Jeeves_Esales_AddOrderRow.spr create mode 100644 jeeves_sp_updates/Jeeves_Esales_PlaceOrder.spr diff --git a/.dockerignore b/.dockerignore index e6c5909..dbfcfe0 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,6 @@ +# Jeeves specific scripts +jeeves_sp_updates/ + # Git .git .gitignore diff --git a/jeeves_sp_updates/Jeeves_Esales_AddOrderRow.spr b/jeeves_sp_updates/Jeeves_Esales_AddOrderRow.spr new file mode 100644 index 0000000..8856ff2 --- /dev/null +++ b/jeeves_sp_updates/Jeeves_Esales_AddOrderRow.spr @@ -0,0 +1,852 @@ +SET ANSI_NULLS OFF +GO +SET QUOTED_IDENTIFIER OFF +GO +SET NOCOUNT ON +GO +PRINT 'Begin Jeeves_Esales_AddOrderRow' +GO +PRINT 'Begin Jeeves_Esales_AddOrderRow' +PRINT '***************************************************' +PRINT '* *' +PRINT '* Jeeves_Esales_AddOrderRow *' +PRINT '* *' +PRINT '***************************************************' +GO +IF OBJECT_ID( 'Jeeves_Esales_AddOrderRow', 'P' ) IS NOT NULL +BEGIN + DROP PROCEDURE Jeeves_Esales_AddOrderRow +END +GO +IF (SELECT COUNT(*) FROM xspr WHERE + SprTrgName = 'Jeeves_Esales_AddOrderRow' AND + SprTrgType = 'P' ) > 0 +BEGIN + UPDATE xspr SET beskrivning=beskrivning WHERE + SprTrgName = 'Jeeves_Esales_AddOrderRow' AND + SprTrgType = 'P' +END ELSE BEGIN + INSERT INTO xspr(SprTrgName,SprTrgType,RowCreatedDt) + VALUES('Jeeves_Esales_AddOrderRow' , 'P', GETDATE() ) +END +GO +---------------------------------------------------- + +CREATE procedure Jeeves_Esales_AddOrderRow + @c_ForetagKod smallint, + @c_OrderNumber int, + @c_webUserName Jeeves_StrVarChar64 = null, + @c_CompanyNo Jeeves_StrVarChar32 = null, + @c_PersSign Jeeves_StrVarChar6, + @c_LangID smallint = null, + @c_ItemNo Jeeves_StrVarChar32 = null, + @c_Qty Jeeves_Qty = 0, + @c_QtyAltEnh Jeeves_Qty = 0, + @c_RequestedDate Jeeves_StrVarChar10 = null, + @c_BatchId Jeeves_StrVarChar16 = null, + @c_ArtSerieNr Jeeves_StrVarChar32 = null, + @c_OrderType smallint = null, + @c_Run_Type char(1) = null, + @c_TemplateRowID int = null, + @c_Edit Jeeves_StrVarCharMax = null, + @c_EditExt Jeeves_StrVarCharMax = null, + @c_LagStalle Jeeves_StrVarChar10 = null, + @c_AltEnhetKod Jeeves_StrVarChar10 = null, + @c_AllocateAvailable smallint = 0, + @c_OverrideCreditLimit char(1) = 0, + @o_OrderRow int = null output, + @o_NextQty Jeeves_Qty = null output, + @o_NextDate DateTime = null output, + @o_LastQty Jeeves_Qty = null output, + @o_LastDate DateTime = null output, + @o_AllocatedQty Jeeves_Qty = null output, + @o_AllocatedDate DateTime = null output + +as + +set nocount on +--set ansi_warnings o f f +--set concat_null_yields_null o f f +--set ansi_nulls o f f +--set ansi_padding o f f + +declare @withPriceCalc char(1) +select @withPriceCalc = 'Y' + +declare @oh_OrdStat smallint, + @orp_OrdRadSt smallint, + @orp_OrdRadNr int, + @orp_vbordradsum money, + @orp_vb_prisinklmoms Jeeves_Amount, + @orp_Vb_Pris Jeeves_Amount, + @wr Jeeves_StrVarChar256, + @x int, + @dbe int, + @dbc int, + @dbp int, + @Enter_TranCount as int, + @NewLine as nvarchar(2), + @PgmId Jeeves_StrVarChar256, + @salj_saljare Jeeves_StrVarChar32, + @kus_kundrabatt float, + @kus_rabklass smallint, + @kus_Kreditsparr char(1), + @kus_kundsaldo money, + @kus_ordsum money, + @kus_kundkredlim money, + @kus_momskod smallint, + @kus_offnr Jeeves_StrVarChar10, + @kus_KundRabattKod0 char(1), + @kus_KundRabattKod1 char(1), + @kus_KundRabattKod2 char(1), + @kus_PrisListaKundSpec int, + @kus_KundKategoriKod smallint, + @kus_tradecalcmarkup float, + @kus_tradefsgmarkup float, + @kus_AddArtEjAktiv char(1), + @ar_ArtProdKlass Jeeves_StrVarChar4, + @ar_OrdvRabKod smallint, + @ar_artkundrabkod char(1), + @ar_artrabklass smallint, + @ar_momskod smallint, + @ar_ordTyp smallint, + @sy1_PrisListaInklMoms char(1), + @sy1_momskod smallint, + @oh_vbordsum money, + @oh_ordsum money, + @oh_lagstalle Jeeves_StrVarChar10, + @Today datetime, + @Momssats float, + @CompanyNo Jeeves_StrVarChar20, + @ContactNo int, + @prislista int, + @Saljare Jeeves_StrVarChar32, + @ar_artfsgforp float, + @ar_palaggdelforp float, + @ar_palaggdelforpbelopp char(1), + @ar_lagstalle Jeeves_StrVarChar10, + @sy1_lagstalle Jeeves_StrVarChar10, + @ValKurs ztCurrencyRate, + @valkod Jeeves_StrVarChar4, + @Samfaktutskr char(1), + @Allowpurchase char(1), + @PCode int, + @sy1_artbeskr_2_orp char(1), + @ArtBeskr Jeeves_StrVarChar64, + @ArtBeskr2 Jeeves_StrVarChar256, + @LangID smallint, + @DateAvailable DateTime, + @sy1_rbn char(1), + @sy1_PrisListaStaffling int, + @sy1_KodAlternativEnhet int, + @AltEnhetKod Jeeves_StrVarChar10, + @AltEnhetOmrFaktor ZtPurQty2Stock, + @InkAvt int, + @LevNr JEEVES_CompanyNo, + @ArtLevPrior smallint, + @ArtHuvudAvt JEEVES_Boolean, + @SALES170 JEEVES_Boolean, + @SALES190 smallint, + @SALES048 smallint, + @SALES007 smallint, + @KostBar Jeeves_StrVarChar8, + @KostStalleKod Jeeves_StrVarChar8, + @K4 Jeeves_StrVarChar8, + @K5 Jeeves_StrVarChar8, + @K6 Jeeves_StrVarChar8, + @K7 Jeeves_StrVarChar8, + @AutoRegel Jeeves_StrVarChar4, + @AnskaffningTillv smallint + +select @LangID = @c_LangID + +exec Jeeves_Esales_GetUserInfo + @c_IntrnCoNo = @c_ForetagKod, + @c_webUserName = @c_webUserName, + @c_CompanyNo = @c_CompanyNo, + @o_LangID = @LangID output, + @o_CompanyNo = @CompanyNo output, + @o_ContactNo = @ContactNo output, + @o_Prislista = @Prislista output, + @o_Saljare = @Saljare output, + @o_Valkod = @Valkod output, + @o_ValKurs = @Valkurs output + + +--Adding from a template +if (isnull(@c_TemplateRowID,-1) > -1) begin + if exists(select 1 from web_orp where ConnToSQLIDENTITY = @c_TemplateRowID) begin + declare cr_items cursor static forward_only local for + select artnr, ordantal from web_orp where ConnToSQLIDENTITY = @c_TemplateRowID + open cr_items + while 1=1 begin + fetch next from cr_items into + @c_ItemNo, + @c_Qty + + if @@Fetch_Status<>0 BREAK + if @@Error<>0 BREAK + + if ( isnull(@c_Qty,0) > 0) and (@c_ItemNo is not null) begin + exec @x = Jeeves_Esales_AddOrderRow + @c_ForetagKod = @c_ForetagKod, + @c_OrderNumber = @c_OrderNumber, + @c_webUserName = @c_webUserName, + @c_PersSign = @c_PersSign, + @c_LangID = @c_LangID, + @c_ItemNo = @c_ItemNo, + @c_Qty = @c_Qty, + @c_AllocateAvailable = @c_AllocateAvailable, + @c_OverrideCreditLimit = @c_OverrideCreditLimit, + @c_RequestedDate = @c_RequestedDate, + @c_BatchId = @c_BatchId, + @c_ArtSerieNr = @c_ArtSerieNr, + @c_OrderType = @c_OrderType + if @x<0 Break + End + End + close cr_items + deallocate cr_items + End + if @c_Run_Type = 'R' exec Jeeves_Esales_GetOrp @c_ForetagKod,@c_webUserName,@LangID,@c_OrderNumber + Return isnull(@x,0) +End + +if @c_qty <= 0 Return -210 +select @Today = getdate() +if @c_RequestedDate is null select @c_RequestedDate = convert(nvarchar(10),getdate(),112) + +---Get customer discount, pricelist, credit info from table kus +select @kus_kundrabatt = kundrabatt, + @kus_rabklass = rabklass, + @kus_Kreditsparr = kreditsparr, + @kus_kundsaldo = kus.kundsaldo, + @kus_ordsum = kus.ordsum, + @kus_kundkredlim = kus.kundkredlim, + @kus_momskod = kus.momskod, + @kus_offnr = offnr, + @Samfaktutskr = samfaktutskr, + @kus_KundRabattKod0 = kundrabattkod0, + @kus_KundRabattKod1 = kundrabattkod1, + @kus_KundRabattKod2 = kundrabattkod2, + @kus_PrisListaKundSpec = prislistakundspec, + @kus_KundKategoriKod = kundkategorikod, + @kus_tradecalcmarkup = tradekalkmarkup, + @kus_tradefsgmarkup = tradefsgmarkup, + @kus_AddArtEjAktiv = AddArtEjAktiv + from kus + where + ftgnr = @CompanyNo and + foretagkod = @c_ForetagKod + +--If customer credit is blocked then abort +if @kus_kreditsparr = '1' begin + exec Jeeves_GT @wr output,@c_ForetagKod,@LangID,1344,'Kunden �r kreditsp�rrad' + EXECUTE Jeeves_RaisError 21001, @wr + return -1344 +end + +--Get Item discount and descriptions from table ar +select @ar_ArtProdKlass = ar.artprodklass, + @ar_artrabklass = ar.artrabklass, + @ar_artkundrabkod = ar.artkundrabkod, + @ar_OrdvRabKod = ar.ordvrabkod, + @ar_momskod = ar.momskod, + @ar_palaggdelforp = isnull(ar.palaggdelforp,0), + @ar_palaggdelforpbelopp = ar.palaggdelforpbelopp, + @ar_artfsgforp = artfsgforp, + @ar_lagstalle = lagstalle, + @ar_ordTyp = ordTyp, + @Artbeskr = ArtBeskr, + @Artbeskr2 = ArtBeskr2, + @AnskaffningTillv = ar.AnskaffningTillv + from ar + where + ar.artnr = @c_ItemNo and + ar.foretagkod = @c_ForetagKod + + +--Assign from sy1 +select @sy1_PrisListaInklMoms = isnull(prislistainklmoms,0), + @sy1_momskod = momskod, + @sy1_lagstalle = sy1.lagstalle, + @sy1_artbeskr_2_orp = sy1.artbeskr_2_orp, + @sy1_rbn = sy1.sy1_rbn, + @sy1_PrisListaStaffling = PrisListaStaffling, + @sy1_KodAlternativEnhet = KodAlternativEnhet + from sy1 + where + sy1.foretagkod = @c_ForetagKod + + +select @AltEnhetKod = @c_AltEnhetKod + +--HACK: If ArtFsgForp is set, find matching AltEnhetKod +if isnull(@ar_artfsgforp,0) > 0 and @AltEnhetKod is NULL begin + if @sy1_KodAlternativEnhet = 2 begin + select @AltEnhetKod = xae.AltEnhetKod, @AltEnhetOmrFaktor = xae.AltEnhetOmrFaktor + from xare join xae + on (xare.AltEnhetKod = xae.AltEnhetKod) + where + xae.AltEnhetOmrFaktor = ROUND(@ar_artfsgforp, 6) and + xare.artnr = @c_ItemNo and + xare.foretagkod = @c_ForetagKod + if @AltEnhetKod is not NULL begin + --Abort from futher logic down the line + select @sy1_KodAlternativEnhet = 0 + end + end +end + +--Get Item alternative unit from table xae +if @sy1_KodAlternativEnhet = 1 begin + if @AltEnhetKod is not NULL begin + select @AltEnhetOmrFaktor = AltEnhetOmrFaktor + from xae + where + xae.AltEnhetKod = @AltEnhetKod and + xae.foretagkod = @c_ForetagKod + + end else begin + select @AltEnhetKod = AltEnhetKod, @AltEnhetOmrFaktor = AltEnhetOmrFaktor + from xae + where + xae.AltEnhetOrderStd = 1 and + xae.foretagkod = @c_ForetagKod + end +end + +--Get Item alternative unit from table xare +if @sy1_KodAlternativEnhet = 2 begin + if @AltEnhetKod is not NULL begin + select @AltEnhetOmrFaktor = AltEnhetOmrFaktor + from xare + where + xare.AltEnhetKod = @AltEnhetKod and + xare.artnr = @c_ItemNo and + xare.foretagkod = @c_ForetagKod + + end else begin + select @AltEnhetKod = AltEnhetKod, @AltEnhetOmrFaktor = AltEnhetOmrFaktor + from xare + where + xare.AltEnhetOrderStd = 1 and + xare.artnr = @c_ItemNo and + xare.foretagkod = @c_ForetagKod + end + + if @AltEnhetOmrFaktor is NULL begin + select @AltEnhetOmrFaktor = AltEnhetOmrFaktor + from xae + where + xae.AltEnhetKod = @AltEnhetKod and + xae.foretagkod = @c_ForetagKod + end +end + +if @AltEnhetKod is not NULL and @AltEnhetOmrFaktor > 0 begin + --Set the value that was not provided + if isnull(@c_QtyAltEnh,0) = 0 and isnull(@c_Qty,0) != 0 begin + select @c_QtyAltEnh = @c_Qty / @AltEnhetOmrFaktor + end + if isnull(@c_Qty,0) = 0 and isnull(@c_QtyAltEnh,0) != 0 begin + select @c_Qty = @c_QtyAltEnh * @AltEnhetOmrFaktor + end + --If both Qty and QtyAltEnh is provided then verify correct value provided + if @c_Qty > 0 and @c_QtyAltEnh > 0 begin + if ROUND(@c_Qty, 4) != ROUND(@c_QtyAltEnh * @AltEnhetOmrFaktor, 4) begin + EXECUTE Jeeves_RaisError 21001, 'Qty and QtyAltEnh must follow the AltEnhetOmrFaktor when both are provided' + return 50100 + end + end +end else begin + --Fallback if there is no alternative units + if isnull(@c_Qty,0) = 0 and isnull(@c_QtyAltEnh,0) != 0 begin + select @c_Qty = @c_QtyAltEnh + select @c_QtyAltEnh = 0 + end +end + + +select @Enter_TranCount = @@TranCount, + @NewLine=char(13)+char(10), + @dbp=@@ProcId + +--Calc pack markup +--TODO: Fix this, as somehow ar_artfsgforp was an int in this SP, which is wrong. And now this is broken. +if isnull(convert(integer,@ar_artfsgforp),0) > 0 begin + if ((select convert(integer,@c_Qty) % convert(integer,@ar_artfsgforp)) = 0) + select @ar_palaggdelforp = 0 +end + +if @c_OrderNumber is not NULL and @oh_OrdStat is NULL + select + @oh_OrdStat = [oh].[OrdStat], + @oh_vbordsum = oh.vbordsum, + @oh_ordsum = oh.ordsum, + @oh_lagstalle = oh.lagstalle + from [oh] where + [oh].[OrderNr] = @c_OrderNumber and + [oh].[ForetagKod] = @c_ForetagKod + +---Use order type from ar if available +select @c_orderType = isnull(@c_orderType, @ar_ordTyp) + +--Always use parameter if provided to the store procedure +--Use order location from ar table if present +select @c_Lagstalle = isnull(@c_Lagstalle,@ar_Lagstalle) + +--Use order location as default +if @c_Lagstalle is null select @c_lagstalle = @oh_Lagstalle + +declare + @QtyAvailable as decimal + +exec Jeeves_Ar_Disp_Test + @c_IntrnCoNo = @c_ForetagKod, + @ArtNr = @c_ItemNo, + @OrdAntal = @c_Qty, + @OrdDatum = @c_RequestedDate, + @LagStalle = @c_LagStalle, + @c_Return_Type='Y', + @o_DispQty = @QtyAvailable output, + @o_FirstQty = @o_NextQty output, + @o_FirstDate = @o_NextDate output, + @o_LastQty = @o_LastQty output, + @o_LastDate = @o_LastDate output + +if @o_NextQty is null begin + select @o_NextQty = 0 +end + +if @o_LastQty is null begin + select @o_LastQty = 0 +end + +-- if the AnskaffningTillv is larger than 0 (the product is produced by orders) then discard Jeeves_Ar_Disp_Test +if @AnskaffningTillv>0 begin + select @c_AllocateAvailable = 0 +end + +if @c_AllocateAvailable = 1 begin + + -- Place the order with the amount available on the requested date and + -- return information about the rest. + + if @c_RequestedDate = @o_NextDate begin + --If the first date and the requested date are the same, + --the on hand quantity will appear as first date quantity as well. + select @o_NextDate = null + select @o_NextQty = 0 + end + + --Prefer next to last. + if @o_NextQty = 0 or @o_NextQty is null begin + select @o_NextQty = @o_LastQty + select @o_NextDate = @o_LastDate + select @o_LastQty = 0 + select @o_LastDate = null + end + + --If there is nothing available on the requested date, use the next + if @QtyAvailable = 0 begin + select @c_Qty = @o_NextQty + select @DateAvailable = @o_NextDate + select @o_NextQty = @o_LastQty + select @o_NextDate = @o_LastDate + select @o_LastQty = 0 + select @o_LastDate = null + end else begin + --Only the amount available on the requested date should be allocated on the order row. + select @DateAvailable = @c_RequestedDate + select @c_Qty = @QtyAvailable + end + + if @o_NextQty = 0 begin + select @o_NextDate = null + end + + if @o_LastQty = 0 begin + select @o_LastDate = null + end + +end else begin + + --If everything is available immediately, set detaavailable to now + if(@QtyAvailable >= @c_Qty) begin + select @DateAvailable = @c_RequestedDate + end else begin + --Everything isn't available, if last quantity is 0, the rest is available on first date. + if @o_LastQty = 0 begin + select @DateAvailable = @o_NextDate + end else begin + --leave last date as date available, sice the order can't be delivered before that date. + select @DateAvailable = @o_LastDate + end + end + + select @o_NextQty = 0 + select @o_NextDate = null + select @o_LastQty = 0 + select @o_LastDate = null + +end + +--Pass the quantity that is placed on the order back to the caller. +select @o_AllocatedQty = @c_Qty +select @o_AllocatedDate = @DateAvailable + +select @InkAvt = al.InkAvt, @LevNr=al.FtgNr , @ArtLevPrior = al.ArtLevPrior, @ArtHuvudAvt =al.ArtHuvudAvt from al where al.ArtNr=@c_ItemNo and al.ArtHuvudAvt='1' and al.ForetagKod=@c_ForetagKod; + --@In_SALES170 JEEVES_Boolean=NULL, + --@In_SALES190 smallint=NULL, +select @SALES170 = dbo.Jeeves_FN_GetParam(@c_ForetagKod, 'SALES170', 'B',null) +select @SALES190 = dbo.Jeeves_FN_GetParam(@c_ForetagKod, 'SALES190', 'N',null) +select @SALES048 = dbo.Jeeves_FN_GetParam(@c_ForetagKod, 'SALES048', 'N',null) +select @SALES007 = dbo.Jeeves_FN_GetParam(@c_ForetagKod, 'SALES007', 'N',null) + + +--Get cost codes from sales person or location (the same way as UF_Oh_Get_InternKonton) + +if @SALES048 = 1 begin + --Get settings from inventory location + + select + @KostStalleKod = KostStalleKod, + @KostBar = KostBar, + @K4 = K4, + @K5 = K5, + @K6 = K6, + @K7 = K7, + @AutoRegel = AutoRegelForskott + from xb with (NoLock) where + ForetagKod = @c_ForetagKod + and LagStalle = @c_LagStalle; + +end else if @SALES048 = 2 begin + --Get settings from sales person + if @Saljare is not null begin + select + @KostStalleKod = KostStalleKod, + @KostBar = KostBar, + @K4 = K4, + @K5 = K5, + @K6 = K6, + @K7 = K7, + @AutoRegel = AutoRegelForskott + from salj with (NoLock) where + ForetagKod = @c_ForetagKod + and Saljare=@Saljare; + end +end else if @SALES048 = 3 begin + -- Try sales person first and then and add values + -- from location is not provided + + if @Saljare is not null begin + select + @KostStalleKod = KostStalleKod, + @KostBar = KostBar, + @K4 = K4, + @K5 = K5, + @K6 = K6, + @K7 = K7, + @AutoRegel = AutoRegelForskott + from salj with (NoLock) where + ForetagKod = @c_ForetagKod + and Saljare=@Saljare; + end + + select + @KostStalleKod = ISNULL(@KostStalleKod, KostStalleKod), + @KostBar = ISNULL(@KostBar, KostBar), + @K4 = ISNULL(@K4, K4), + @K5 = ISNULL(@K5, k5), + @K6 = ISNULL(@K6, K6), + @K7 = ISNULL(@K7, K7), + @AutoRegel = ISNULL(@AutoRegel, AutoRegelForskott) + from xb with (NoLock) where + ForetagKod = @c_ForetagKod + and LagStalle = @c_LagStalle; + +end + +--calculate fiscal year +declare @TodayDate datetime; +declare @redar integer; +declare @period integer; +declare @Just_BokfDat datetime; + set @TodayDate = convert(varchar(10), @Today, 112); + execute CalcPeriodP2P @todayDate, + null, + @redar output, + @period output, + @Just_BokfDat output, + @c_ForetagKod + +declare @startRow int +declare @endRow int +declare @maxRow int -- The highest row number in the discount row range. +declare @discountQty decimal(17,6) + +if @o_OrderRow is not null begin + --All rows that are grouped by being in the same decade should + --be updated with the discount, since they probably make up a split order row, + --and they should all be taken into account when calculating the discount. + --This is only relevant if a row number is provided. + + select @startRow = 10 * (@o_OrderRow / 10) -- yx->y0, e.g. 24->20 + select @endRow = @startRow + 9 + --The updated row is excluded from the sum but the new quantity is added directly to discountQty + select @discountQty = (isnull(sum(ordantal), 0) + @c_Qty), @maxRow = isnull(max(OrdRadNr), @startRow) from orp + where ForetagKod = @c_ForetagKod and OrderNr = @c_OrderNumber and OrdRadNr >= @StartRow and OrdRadNr <= @EndRow + and OrdRadNr <> @o_OrderRow and ArtNr =@c_ItemNo + + if @o_OrderRow > @maxRow begin + select @maxRow = @o_OrderRow + end +end else begin + select @discountQty = @c_qty + select @startRow = -1 +end + +if @withPriceCalc = 'Y' begin + declare @orp_ArtCirkaPris as Jeeves_Amount, + @orp_VolymRabatt as float, + @orp_KundRabatt as float, + @orp_Rabatt1 as float, + @orp_Rabatt2 as float, + @orp_Rabatt3 as float, + @orp_valkod as nvarchar(3), + @orp_valkurs as decimal(18,8), + @orp_ordDatum as datetime + + execute @x = Jeeves_orp_produkt_pris + @c_Foretagkod = @c_ForetagKod, + @ArtNr = @c_ItemNo, + @OrdAntal = @discountQty, + @ValKurs = @ValKurs, + @ValKod = @valkod, + @PrisLista = @Prislista, + @OrdDatum = @Today, + @ArtProdKlass = @ar_ArtProdKlass, + @offradnr = -32000, + @ArtRabKlass = @ar_ArtRabKlass, + @RabKlass = @kus_RabKlass, + @OrdvRabKod = @ar_OrdvRabKod, + @ArtKundRabKod = @ar_ArtKundRabKod, + @KundRabattKod0 = @kus_KundRabattKod0, + @KundRabattKod1 = @kus_KundRabattKod1, + @KundRabattKod2 = @kus_KundRabattKod2, + @In_PrisListaStaffling = @sy1_PrisListaStaffling, + @In_PrisListaKundSpec = @kus_PrisListaKundSpec, + @In_KundKategoriKod = @kus_KundKategoriKod, + @KundRabatt = @kus_KundRabatt, + @In_InkAvt = @InkAvt, + @In_LevNr = @LevNr, + @In_ArtLevPrior = @ArtLevPrior, + @In_ArtHuvudAvt = @ArtHuvudAvt, + @In_tradekalkmarkup = @kus_tradecalcmarkup, + @In_tradefsgmarkup = @kus_tradefsgmarkup, + @In_OrdBerLevDat = @DateAvailable, + @In_Sales170 = @SALES170, + @In_Sales190 = @SALES190, + @In_RedovisnAr = @redar, + @in_FtgNr = @CompanyNo, + @Logg = null, + @offnr = @kus_offnr, + @In_LagStalle = @c_Lagstalle, + @O_Svar_Pris_Valuta = @orp_Vb_Pris output, + @O_Svar_VolymRabatt = @orp_VolymRabatt output, + @O_Svar_KundRabatt = @orp_KundRabatt output, + @O_Svar_Rabatt1 = @orp_Rabatt1 output, + @O_Svar_Rabatt2 = @orp_Rabatt2 output, + @O_Svar_Rabatt3 = @orp_Rabatt3 output, + @O_Svar_CirkaPris_Valuta = @orp_ArtCirkaPris output + + if @ar_palaggdelforpbelopp = 1 begin + select @orp_vb_pris = @orp_vb_pris + @ar_palaggdelforp + end else begin + -- palaggdelforp is specified in percentage, so 80 should result in a factor of 1.8. + select @orp_vb_pris = @orp_vb_pris * (1 + 0.01 * @ar_palaggdelforp) + end +end + +---Calc VAT------------------------------------------------------ +if @kus_momskod = 0 begin + select @Momssats = 0 +end +else begin + if @ar_momskod is null select @ar_momskod = isnull(@kus_momskod,@sy1_momskod) + select @Momssats = x1.momssats + from x1 + where + momskod = @ar_momskod +end + +if @sy1_PrisListaInklMoms in ('1','3') begin + select @orp_vb_prisinklmoms = @orp_Vb_Pris + select @orp_vb_pris = @orp_vb_pris/(1.0+(@MomsSats/100.0)) +end +else begin + select @orp_vb_prisinklmoms = @orp_vb_pris * (1.0+(@Momssats/100.0)) +end +----------------------------------------------------------- + +---Check if creditlimit is reached +if @kus_kundkredlim > 0 and @c_OverrideCreditLimit = 0 begin + if (isnull(@oh_ordsum,0) + @kus_kundsaldo + @kus_ordsum + (@Orp_vb_pris*@c_qty)) > @kus_kundkredlim begin + exec Jeeves_GT @wr output,@c_ForetagKod,@LangID,3679,'Kundens kreditgr�ns �r �verskriden' + EXECUTE Jeeves_RaisError 21001, @wr + return -3679 + end +end + +begin tran + +select @oh_vbordsum = isnull(@oh_vbordsum, 0) + (@c_qty * @orp_Vb_Pris * ((100 - @orp_Rabatt1)/100) * ((100 - @orp_Rabatt2)/100) * ((100 - @orp_Rabatt3)/100) * ((100-@orp_kundrabatt)/100)) +select @oh_ordsum = 0 + +select @orp_ordradst = dbo.Jeeves_FN_GetParam (@c_ForetagKod,'WEBAPP018','N','10') +if @oh_OrdStat < @orp_ordradst select @orp_ordradst = @oh_OrdStat + + +if @sy1_artbeskr_2_orp = 1 begin + --Add description to orp row if artbeskr_2_orp flag is set. + + -- First try the old way. + select @Artbeskr = isnull(ArtBeskr, @Artbeskr), @Artbeskr2 = isnull(ArtBeskr2, @Artbeskr2) + from arb where + foretagkod = @c_ForetagKod + and sprakkod = @LangID + and artnr = @c_ItemNo + + --Override with modern translation with old transalation value as default + execute @ArtBeskr = Jeeves_FN_GetCustomerDropDownValue + @c_ForetagKod, + @LangID, + 'ar', + @c_ItemNo, + @ArtBeskr + +end +else begin + select @Artbeskr = null, @Artbeskr2 = null +end + +if @c_Qty <= 0 +begin + if @@TranCount > 0 ROLLBACK TRANSACTION + EXECUTE Jeeves_RaisError 50100, 'Jeeves_Esales_AddOrderRow' + while @@TranCount<@Enter_TranCount BEGIN TRANSACTION + return 50100 +end + +execute @x = Jeeves_Init_Insert_orp + @c_ForetagKod = @c_ForetagKod, + @c_OrderNr = @c_OrderNumber, + @c_FtgNr = @CompanyNo, + @c_ArtNr = @c_ItemNo, + @c_ArtSerieNr = @c_ArtSerieNr, + @c_BatchId = @c_BatchID, + @c_Edit = @c_Edit, + @c_EditExt = @c_EditExt, + @c_OrdBegLevDat = @c_RequestedDate, + @c_OrdBerLevDat = @DateAvailable, + @c_Lagstalle = @c_lagstalle, + @c_OrdAntal = @c_Qty, + @c_OrdAntalAltEnh = @c_QtyAltEnh, + @c_OrdTyp = @c_OrderType, + @c_ordradst = @orp_ordradst, + @c_PersSign = @c_PersSign, + @c_volymrabatt = @orp_VolymRabatt, + @c_KundRabatt = @orp_KundRabatt, + @c_Rabatt1 = @orp_Rabatt1, + @c_Rabatt2 = @orp_Rabatt2, + @c_Rabatt3 = @orp_Rabatt3, + @c_Saljare = @Saljare, + @c_vb_pris = @orp_Vb_Pris, + @c_vb_prisinklmoms = @orp_vb_prisinklmoms, + @c_rowcreatedby = @c_perssign, + @c_rowcreateddt = @Today, + @c_Valkod = @valkod, + @c_Valkurs = @valkurs, + @c_OrdRadNr = @o_OrderRow output, + @c_Artbeskr = @ArtBeskr, + @c_OrdArtBeskr = @ArtBeskr2, + @c_KostBar = @KostBar, + @c_KostStalleKod = @KostStalleKod, + @c_K4 = @K4, + @c_K5 = @K5, + @c_K6 = @K6, + @c_K7 = @K7, + @c_AutoRegel = @AutoRegel, + @c_AltEnhetKod = @AltEnhetKod; + +if (@@Error <> 0) or (@x < 0) begin + EXECUTE Jeeves_RaisError 21001, 'Error when creating order row' + Rollback tran + Return -100 +end + +--If the row created with a specific row number, the prices of other rows might be affected. +if @startRow >= 0 begin + declare @rowIndex as int + select @rowIndex = @startRow + while @rowIndex <= @maxRow begin + Update orp SET + orp.vb_pris = @orp_Vb_Pris, + orp.vb_prisinklmoms = @orp_vb_prisinklmoms, + orp.volymrabatt = @orp_VolymRabatt, + orp.KundRabatt = @orp_KundRabatt, + orp.Rabatt1 = @orp_Rabatt1, + orp.Rabatt2 = @orp_Rabatt2, + orp.Rabatt3 = @orp_Rabatt3, + orp.rowupdatedby= @c_PersSign, + orp.rowupdateddt = getdate() + Where ordernr = @c_OrderNumber and + foretagkod = @c_ForetagKod and + ordradnr = @rowIndex and + artnr = @c_ItemNo and + ordradnr <> @o_OrderRow + select @rowIndex = @rowIndex + 1 + end +end + +update oh set + oh.ordsum = @oh_ordsum, + oh.vbordsum = @oh_vbordsum +where + oh.ordernr = @c_OrderNumber and + oh.foretagkod = @c_ForetagKod + +if @@Error <> 0 begin + rollback tran + return -100 +end + +if @SALES007 = 1 AND @kus_AddArtEjAktiv <> '1' +BEGIN + exec JEEVES_Orp_Create_Tillagg @c_OrderNumber, @c_PersSign, @c_ForetagKod +END + +if @@Error <> 0 begin + rollback tran + return -100 +end + +commit tran + +--calculate ordervalue discount; +execute JEEVES_Oh_Kora @c_OrderNumber,NULL,2,null,@c_ForetagKod; +--make sure ordersum is updated; +execute JEEVES_Oh_OrderVarde @c_OrderNumber, @ValKurs, @sy1_rbn, @c_PersSign, @c_ForetagKod = @c_ForetagKod, @call_type = 4 + +if @c_Run_Type = 'R' exec Jeeves_Esales_GetOrp @c_ForetagKod,@c_webUserName,@LangID,@c_OrderNumber + +return 0 +GO +PRINT 'End Jeeves_Esales_AddOrderRow' +GO +PRINT 'End Jeeves_Esales_AddOrderRow' +GO + + diff --git a/jeeves_sp_updates/Jeeves_Esales_PlaceOrder.spr b/jeeves_sp_updates/Jeeves_Esales_PlaceOrder.spr new file mode 100644 index 0000000..5c43760 --- /dev/null +++ b/jeeves_sp_updates/Jeeves_Esales_PlaceOrder.spr @@ -0,0 +1,445 @@ +SET ANSI_NULLS OFF +GO +SET QUOTED_IDENTIFIER OFF +GO +SET NOCOUNT ON +GO +PRINT 'Begin Jeeves_Esales_PlaceOrder' +GO +PRINT 'Begin Jeeves_Esales_PlaceOrder' +PRINT '***************************************************' +PRINT '* *' +PRINT '* Jeeves_Esales_PlaceOrder *' +PRINT '* *' +PRINT '***************************************************' +GO +IF OBJECT_ID( 'Jeeves_Esales_PlaceOrder', 'P' ) IS NOT NULL +BEGIN + DROP PROCEDURE Jeeves_Esales_PlaceOrder +END +GO +IF (SELECT COUNT(*) FROM xspr WHERE + SprTrgName = 'Jeeves_Esales_PlaceOrder' AND + SprTrgType = 'P' ) > 0 +BEGIN + UPDATE xspr SET beskrivning=beskrivning WHERE + SprTrgName = 'Jeeves_Esales_PlaceOrder' AND + SprTrgType = 'P' +END ELSE BEGIN + INSERT INTO xspr(SprTrgName,SprTrgType,RowCreatedDt) + VALUES('Jeeves_Esales_PlaceOrder' , 'P', GETDATE() ) +END +GO +---------------------------------------------------- + +CREATE Procedure Jeeves_Esales_PlaceOrder + @c_ForetagKod smallint, + @c_OrderNumber int output, + @c_webUserName Jeeves_StrVarChar64 = null, + @c_CompanyNo Jeeves_StrVarChar32 = null, + @c_LangID smallint = null, + @c_LevSattKod smallint = null, + @c_kundref2 Jeeves_StrVarChar32 = null, + @c_kundbestnr Jeeves_StrVarChar32 = null, + @c_editext Jeeves_StrVarCharMax = null, + @c_CoName Jeeves_StrVarChar64 = null, + @c_Addr1 Jeeves_StrVarChar64 = null, + @c_Addr2 Jeeves_StrVarChar64 = null, + @c_PostalCode Jeeves_StrVarChar64 = null, + @c_City Jeeves_StrVarChar64 = null, + @c_ProvinceCode Jeeves_StrVarChar5 = null, + @c_CountryCode Jeeves_StrVarChar3 = null, + @c_godsmarke1 Jeeves_StrVarChar64 = null, + @c_godsmarke2 Jeeves_StrVarChar64 = null, + @c_godsmarke3 Jeeves_StrVarChar64 = null, + @c_godsmarke4 Jeeves_StrVarChar64 = null, + @c_TA_MailNotified Jeeves_StrVarChar64 = null, + @c_TA_PhonNotifiedNo Jeeves_StrVarChar64 = null, + @c_TA_SMSNotifiedNo Jeeves_StrVarChar64 = null, + @c_levforetolv char(1) = '0', + @c_withFreightCalc char(1) = 'Y', + @c_ordlevplats1 Jeeves_StrVarChar20 = null, + @c_vRef Jeeves_StrVarChar64 = null, + @c_orderStatus smallint = null, + @c_PartDeliveryAllowed smallint = null, + @c_text Jeeves_StrVarCharMax = null, + @c_PaymentType char(1) = '0' --0=invoice, 1=card + +As + +set nocount on + +declare @dbc int, + @ftgnr Jeeves_StrVarChar32, + @ftgkontaktnr int, + @org_ftgnr Jeeves_StrVarChar32, + @kp_ftgperson Jeeves_StrVarChar32, + @Momskod smallint, + @Levsattkod smallint, + @LevvillkKod smallint, + @Lagstalle Jeeves_StrVarChar10, + @Betkod Jeeves_StrVarChar2, + @Kreditorder Jeeves_Boolean, + @valkurs ztCurrencyRate, + @Ordsum Jeeves_Amount, + @PersSign Jeeves_StrVarChar32, + @Sy1_rbn char(1), + @sy1_FtgKontaktToErRef char(1), + @wi smallint, + @x7_ordstat smallint, + @wr Jeeves_StrVarChar256, + @kundref2 Jeeves_StrVarChar32, + @TA_MailNotified Jeeves_StrVarChar64, + @TA_PhonNotifiedNo Jeeves_StrVarChar64, + @TA_SMSNotifiedNo Jeeves_StrVarChar64, + /*Output frÃ¥n Jeeves_Calc_Frakt*/ + @out_Fraktkostnad JEEVES_Amount, + @out_ExpeditionKostnad JEEVES_Amount, + @Out_Fraktdebkod JEEVES_Boolean, + @Out_Ordervarde JEEVES_Amount, + @Out_Fraktvikt float, + @jvss_OrderReservation char(1), + @kpwid integer, + @OrdBerLevDat DateTime, + @SALES007 smallint, + @kus_AddArtEjAktiv char(1), + @OrdLevAdr4 Jeeves_StrVarChar64 + +exec Jeeves_Esales_GetUserInfo @c_IntrnCoNo = @c_ForetagKod, + @c_webUserName = @c_webUserName, + @c_CompanyNo = @c_CompanyNo, + @o_LangID = @c_LangID output, + @o_CompanyNo = @ftgnr output, + @o_ContactNo = @ftgkontaktnr output, + @o_OrgCompanyNo = @org_ftgnr output, + @o_kpwid = @kpwid output + +if (@c_ordlevplats1 = @ftgnr) select @c_ordlevplats1 = null + +if (@c_ordlevplats1 = '') select @c_ordlevplats1 = null + +-- concatenate postal code and city for order unique adresses +select @OrdLevAdr4 = @c_PostalCode + ' ' + @c_City +select @c_City = null + +select @kp_ftgperson = kp.ftgperson from kp + where + kp.foretagkod = @c_ForetagKod and + kp.ftgnr = @ftgnr and + kp.ftgkontaktnr = @ftgkontaktnr + +select @Momskod = momskod, + @Levsattkod = isnull(@c_LevSattKod, levsattkod), + @Kreditorder = kreditorder, + @Lagstalle = lagstalle, + @valkurs = valkurs, + @Ordsum = ordsum, + @Levvillkkod = levvillkkod, + @Betkod = betkod, + @PersSign = perssign, + @Kundref2 = kundref2, + @c_vRef = isnull(@c_vRef, vref), + @TA_MailNotified = TA_MailNotified, + @TA_PhonNotifiedNo = TA_PhonNotifiedNo, + @TA_SMSNotifiedNo = TA_SMSNotifiedNo + from oh where + oh.ordernr = @c_OrderNumber and + oh.foretagkod = @c_ForetagKod + +if @@Rowcount < 1 begin + exec Jeeves_GT @wr output,@c_ForetagKod,@c_LangID,1237,'Kundordern saknas' + EXECUTE Jeeves_RaisError 21001, @wr + return +end + +select @x7_ordstat = dbo.Jeeves_FN_GetParam(@c_ForetagKod,'WEBAPP003','N',null) + +--jeevesparamnumeric from jvss +-- where +-- jeevesparamname = N'WebOrderStatus' and +-- foretagkod = @c_ForetagKod + +--Use passed in value if available +select @x7_ordstat = isnull(@c_orderStatus, @x7_ordstat) + +select @jvss_OrderReservation = jvss.jeevesparamboolean from jvss + where + jvss.jeevesparamname = 'webapp010' and + jvss.foretagkod = @c_ForetagKod + +--select @orp_ordradstat = dbo.Jeeves_FN_GetParam (@c_IntrnCoNo,'WEBAPP018','N','10') + +select @Sy1_rbn = sy1_rbn, + @sy1_FtgKontaktToErRef=FtgKontaktToErRef + from sy1 + where sy1.foretagkod = @c_ForetagKod + +--if @c_kundref is null and FtgKontaktToErRef is true then insert Contact name as reference +if @c_kundref2 is null begin + if @sy1_FtgKontaktToErRef = '1' select @c_kundref2 = @kp_ftgperson +end + +if @c_vRef is null begin + if (@org_ftgnr <> @ftgnr) begin + select @c_vRef = ftgnamn from fr + where fr.ftgnr = @org_ftgnr and + fr.foretagkod = @c_ForetagKod + End +End + +execute @wi = Jeeves_oh_ordervarde + @In_OrderNr = @c_OrderNumber, + @In_ValKurs = @Valkurs, + @In_sy1_rbn = @Sy1_rbn, + @In_PersSign = @Perssign, + @Call_Type = 4, + @c_Foretagkod = @c_ForetagKod + +--The estimated delivery date of the order will be set to the earliest delivery date of a row. +select @OrdBerLevDat = min(OrdBerLevDat) from orp where foretagkod = @c_ForetagKod AND OrderNr = @c_OrderNumber + +begin tran + +exec @wi = Jeeves_oh_kora @c_OrderNumber,null,2,@c_ForetagKod + +if @Wi < 0 begin + Rollback tran + return @Wi +end + +select @SALES007 = dbo.Jeeves_FN_GetParam(@c_ForetagKod, 'SALES007', 'N',null) +select @kus_AddArtEjAktiv = AddArtEjAktiv from kus where foretagkod = @c_ForetagKod and ftgnr = @ftgnr + +if @SALES007 = 1 AND @kus_AddArtEjAktiv <> '1' +BEGIN + exec @wi = JEEVES_Orp_Create_Tillagg @c_OrderNumber,@Perssign,@c_ForetagKod,0 + + if @Wi < 0 begin + Rollback tran + return @Wi + end +END + +if @c_withFreightCalc = 'Y' Begin + + declare @Artvikt float, + @Volume float, + @Fraktvikt float, + @Expavgkod Jeeves_Boolean, + @Fraktkostnader Jeeves_Amount, + @DispatchFeeExists smallint, + @valkod Jeeves_StrVarChar4, + @Fraktskrymmekod Jeeves_Boolean + + select @Artvikt = artvikt, + @Volume = volume, + @Fraktkostnader=Emballagekostnad+fraktkostnman+ForsakringsKostnad+ovrfaktkostnad1+ovrfaktkostnad2, + @valkod = valkod, + @Expavgkod = expavgkd, + @Fraktskrymmekod = fraktskrymmekod, + @Fraktvikt = fraktvikt + from oh where + oh.ordernr = @c_OrderNumber and + oh.foretagkod = @c_ForetagKod + + --Check that dispatch fee is defined in table fkst + --This check has been removed as described in 521932. + --select @DispatchFeeExists=faktkostntyp from fkst where + -- fkst.faktkostntyp = 4 and + -- fkst.foretagkod = @c_ForetagKod + + if @@Rowcount < 1 begin + rollback tran + exec Jeeves_GT @wr output,@c_ForetagKod,@c_LangID,1333,'Expeditionsavgift kan ej debiteras, definition saknas i tabellen Fakturakostnader (fkst) !' + EXECUTE Jeeves_RaisError 21001, @wr + return + end + + execute JEEVES_Calc_Frakt + @In_ForetagKod=@c_ForetagKod, + @In_FtgNr = @ftgnr, + @In_OrdLevPlats1 = @ftgnr, + @In_OrderNr = @c_OrderNumber, + @In_KreditOrder = @Kreditorder, + --@In_OrdBerLevDat datetime=NULL, + @In_LagStalle = @Lagstalle, + --@In_OrdLevNr smallint=NULL, + --@In_OrdStat smallint=NULL, + --@In_OrdFsNr smallint=NULL, + @In_FraktVikt = @Artvikt, + @In_AntalEURPall = 0, + @In_AntalOvrPall = 0, + @In_Volume = @Volume, + @In_LevForeTolv = @c_Levforetolv, + @In_FraktSkrymmeKod = @Fraktskrymmekod, + @In_LevSattKod = @Levsattkod, + @In_LevVillkKod = @Levvillkkod, + @In_ValKurs = @Valkurs, + @In_Valkod = @Valkod, + @In_ExpAvgKod = @ExpAvgkod, + @In_BetKod = @Betkod, + @In_MomsKod = @Momskod, + @In_OrderVarde = @Ordsum, + @Call_Type = 1, + @PersSign = @PersSign, + @In_OvrFaktKostnader = 0, + @Svar_FraktKostnad = @out_Fraktkostnad output, + @Svar_ExpeditionKostnad = @out_ExpeditionKostnad output, + @Svar_FraktdebKod = @Out_Fraktdebkod output, + @Svar_OrderVarde = @Out_Ordervarde output, + @Svar_Fraktvikt = @Out_Fraktvikt output + + if @@Error <> 0 begin + rollback tran + return + end +End + +if @c_PaymentType <> '1' begin + Update oh SET + oh.ordernralfa = 'Internet', + oh.ordstat = isnull(@x7_ordstat,13), + oh.kundref2 = @c_kundref2, + oh.kundbestnr = @c_kundbestnr, + oh.levforetolv = @c_levforetolv, + oh.levsattkod = @Levsattkod, + oh.ordberlevdat = @OrdBerLevDat, + oh.ordlevadr1 = @c_CoName, + oh.ordlevadr2 = @c_Addr1, + oh.ordlevadr3 = @c_Addr2, + oh.ordlevadr4 = @OrdLevAdr4, + oh.ordlevadrbstort = @c_City, + oh.Ordlevadrlandskod = @c_CountryCode, + oh.ordlevadrprovincecode = @c_ProvinceCode, + oh.editext = @c_editext, + oh.edit = @c_text, + oh.bruttovikt = isnull(@artvikt,0), + oh.fraktkostnber = isnull(@out_Fraktkostnad,0), + oh.godsmarke1 = @c_godsmarke1, + oh.godsmarke2 = @c_godsmarke2, + oh.godsmarke3 = @c_godsmarke3, + oh.godsmarke4 = @c_godsmarke4, + oh.ordlevplats1 = @c_ordlevplats1, + oh.dellevtillaten = isnull(@c_PartDeliveryAllowed, 0), + oh.vref = @c_vRef, + oh.ta_mailnotified = isnull(@c_TA_MailNotified, @TA_MailNotified), + oh.ta_phonnotifiedno = isnull(@c_TA_PhonNotifiedNo, @TA_PhonNotifiedNo), + oh.ta_smsnotifiedno = isnull(@c_TA_SMSNotifiedNo, @TA_SMSNotifiedNo) + Where ordernr = @c_OrderNumber and + foretagkod = @c_ForetagKod + + if @@Error <> 0 begin + rollback tran + return + end + + update kp set + kp.antalkop = isnull(kp.antalkop,0) + 1 + where + kp.foretagkod = @c_ForetagKod and + kp.ftgnr = @ftgnr and + kp.ftgkontaktnr = @ftgkontaktnr + + if @@Error <> 0 begin + rollback tran + return + end + +end else begin + --KORTBETALNING + --do not update orderstatus + --do not imcrement kp + Update oh SET + oh.ordernralfa = 'Internet', + oh.kundref2 = @c_kundref2, + oh.kundbestnr = @c_kundbestnr, + oh.levforetolv = @c_levforetolv, + oh.levsattkod = @Levsattkod, + oh.ordberlevdat = @OrdBerLevDat, + oh.ordlevadr1 = @c_CoName, + oh.ordlevadr2 = @c_Addr1, + oh.ordlevadr3 = @c_Addr2, + oh.ordlevadr4 = @OrdLevAdr4, + oh.ordlevadrbstort = @c_City, + oh.Ordlevadrlandskod = @c_CountryCode, + oh.ordlevadrprovincecode = @c_ProvinceCode, + oh.editext = @c_editext, + oh.edit = @c_text, + oh.bruttovikt = isnull(@artvikt,0), + oh.fraktkostnber = isnull(@out_Fraktkostnad,0), + oh.godsmarke1 = @c_godsmarke1, + oh.godsmarke2 = @c_godsmarke2, + oh.godsmarke3 = @c_godsmarke3, + oh.godsmarke4 = @c_godsmarke4, + oh.ordlevplats1 = @c_ordlevplats1, + oh.dellevtillaten = isnull(@c_PartDeliveryAllowed, 0), + oh.vref = @c_vRef, + oh.ta_mailnotified = isnull(@c_TA_MailNotified, @TA_MailNotified), + oh.ta_phonnotifiedno = isnull(@c_TA_PhonNotifiedNo, @TA_PhonNotifiedNo), + oh.ta_smsnotifiedno = isnull(@c_TA_SMSNotifiedNo, @TA_SMSNotifiedNo) + Where ordernr = @c_OrderNumber and + foretagkod = @c_ForetagKod + + if @@Error <> 0 begin + rollback tran + return + end +end + +--remove any old +if exists(select 1 from webl where webl.ConnSQLIDkpw = @kpwid and + webl.ordernr = @c_OrderNumber ) begin + + update webl set + ordernr = null + where + webl.ConnSQLIDkpw = @kpwid and + webl.ordernr = @c_OrderNumber +end + + +if @@Error <> 0 begin + rollback tran + return +end + +/* +insert into webo (Foretagkod, + OrderNr, + RowCreatedBy, + Perssign, + RegDat, + RowCreatedDt) + values (@c_IntrnCoNo, + @o_OrderNo, + @Perssign, + @Perssign, + getdate(), + getdate()) + +if @@Error <> 0 begin + rollback tran + return +end */ + +commit tran + +if @jvss_Orderreservation = '1' Begin + execute JEEVES_Oh_Bok + @OrderNr = @c_OrderNumber, + @PersSign = @PersSign, + @ForetagKod =@c_ForetagKod + +End + +--select @o_OrderNo = @Ordernr + +return + + +GO +PRINT 'End Jeeves_Esales_PlaceOrder' +GO +PRINT 'End Jeeves_Esales_PlaceOrder' +GO + From 7288e881355b8ab837c6fa488281eb0b1c396052 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Mon, 30 Sep 2019 10:27:53 +0200 Subject: [PATCH 12/24] Fix input of RequestedDeliveryDate in order head. Error handling in Company.get --- pyjeeves/models/raw.py | 4 +++- pyjeeves/repositories/company.py | 10 +++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index 3e5af38..3eb7a96 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -407,7 +407,9 @@ class Order(RawBaseModel): 'adapters': { **{ 'OrdDatum': lambda ord_date, *_: ord_date.strftime("%Y-%m-%d"), - 'OrdBerLevDat': lambda ord_date, *_: ord_date.strftime("%Y-%m-%d"), + 'OrdBerLevDat': lambda deliv_date, *_: ( + deliv_date.strftime("%Y-%m-%d") + if not isinstance(deliv_date, str) else deliv_date), }, **RawBaseModel.__dict_args__['adapters'] } diff --git a/pyjeeves/repositories/company.py b/pyjeeves/repositories/company.py index 6a8191e..c0fc206 100644 --- a/pyjeeves/repositories/company.py +++ b/pyjeeves/repositories/company.py @@ -4,6 +4,7 @@ from pyjeeves.models.raw import Company as CompanyModel, Customer as CustomerMod from pyjeeves.models import db from sqlalchemy.sql.expression import and_ from sqlalchemy.orm.strategy_options import Load +from sqlalchemy.orm.exc import NoResultFound from pyjeeves import logging logger = logging.getLogger("PyJeeves." + __name__) @@ -16,9 +17,12 @@ class Company(): @staticmethod def get(ftg_nr): """ Query an article by number """ - return db.raw.query(CompanyModel).filter_by( - FtgNr=ftg_nr - ).one() + try: + return db.raw.query(CompanyModel).filter_by( + FtgNr=ftg_nr + ).one() + except NoResultFound: + raise KeyError @staticmethod def get_all_active_customers(): From 1ae563654c48e9de98e4f02f3f0dc67e0dcce691 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Mon, 30 Sep 2019 14:03:16 +0200 Subject: [PATCH 13/24] Expose the default article class of commodity groups --- pyjeeves/models/raw.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index 3eb7a96..3c47bf5 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -39,14 +39,15 @@ class ArticleClass(RawBaseModel): class CommodityGroup(RawBaseModel): __tablename__ = 'vg' __column_map__ = {'VaruGruppKod': 'CommodityGroupNumber', - 'VaruGruppBeskr': 'CommodityGroupName'} + 'VaruGruppBeskr': 'CommodityGroupName', + 'ArticleClass': 'DefaultArticleClass'} __to_dict_only__ = ('VaruGruppKod', 'VaruGruppBeskr', 'ArticleClass') print_filter = ('Articles', 'articles_collection') # to_json_filter = ('Articles', 'articles_collection') ArtKod = Column(Integer, ForeignKey('xm.ArtKod'), primary_key=True) - ArticleClass = relationship(ArticleClass) + ArticleClass = relationship(ArticleClass, lazy='joined') class ArticleAlternativeUnit(RawBaseModel): From 7310954468bc6ce18e9b7db9e209aff6cb3b2ca8 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Wed, 23 Oct 2019 15:27:44 +0200 Subject: [PATCH 14/24] Return VAT Rate for articles --- pyjeeves/models/abc.py | 2 +- pyjeeves/models/raw.py | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/pyjeeves/models/abc.py b/pyjeeves/models/abc.py index 334c3c7..061d681 100644 --- a/pyjeeves/models/abc.py +++ b/pyjeeves/models/abc.py @@ -27,7 +27,7 @@ try: meta.reflect(bind=db.raw.connection(), only=['ar', 'ars', 'xae', 'xare', 'fr', 'kus', 'x1k', 'oh', 'orp', 'lp', 'vg', 'xp', 'xm', 'prh', 'prl', - 'kp', 'kpw', 'cr', 'X4', 'xw']) + 'kp', 'kpw', 'cr', 'X4', 'xw', 'X1']) except OperationalError as e: logger.error("Failed to read Jeeves DB structure") raise e diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index 3c47bf5..873b0b2 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -89,6 +89,12 @@ class ArticleBalance(RawBaseModel): ArtNr = Column(Integer, ForeignKey('ar.ArtNr'), primary_key=True) +class VATRate(RawBaseModel): + __tablename__ = 'X1' + __column_map__ = {'MomsKod': 'VATID', 'MomsSats': 'VATRate'} + __to_dict_only__ = ('MomsKod', 'MomsSats') + + class Article(RawBaseModel): __tablename__ = 'ar' @@ -119,7 +125,8 @@ class Article(RawBaseModel): 'WholeSaleUnit', 'WholeSaleAmount', 'ListPrice', - 'Balance') + 'Balance', + 'VATRate') ArtNr = Column(Integer, primary_key=True) @@ -127,12 +134,15 @@ class Article(RawBaseModel): ArtProdKlass = Column(Integer, ForeignKey('xp.ArtProdKlass'), primary_key=True) ArtKod = Column(Integer, ForeignKey('xm.ArtKod'), primary_key=True) + MomsKod = Column(Integer, ForeignKey('X1.MomsKod')) + CommodityGroup = relationship(CommodityGroup, lazy='joined') ProductClass = relationship(ProductClass, lazy='joined') ArticleClass = relationship(ArticleClass, lazy='joined') ArticleBalance = relationship(ArticleBalance) ArticleUnit = relationship(ArticleUnit, uselist=True) + ArticleVATRate = relationship(VATRate, lazy='joined') def _get_alt_unit(self): # Find matching alternative unit for amount per piece, or return default for the article. @@ -171,6 +181,10 @@ class Article(RawBaseModel): # Amount of units in the alternative unit of the article, or 1 if none exist. return self.get_unit_conv() + @hybrid_property + def VATRate(self): + return self.ArticleVATRate.MomsSats + @hybrid_property def ListPrice(self): try: From 2fa1e4aa7a5f70c7e3b2d20ddaa1afbe863cdafc Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Wed, 23 Oct 2019 15:28:37 +0200 Subject: [PATCH 15/24] Fix showing multiple web users for a single contact person --- pyjeeves/models/raw.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index 873b0b2..b8c5f7d 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -249,6 +249,7 @@ class WebUser(RawBaseModel): FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True) FtgKontaktNr = Column(Integer, ForeignKey('kp.FtgKontaktNr'), primary_key=True) + WebUserName = Column(String, primary_key=True) ContactPerson = relationship( ContactPerson, uselist=False, lazy='joined', From f9686c5306983555153dcce5792ac7ef9a4ac992 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Tue, 19 Nov 2019 16:23:07 +0100 Subject: [PATCH 16/24] Fix NoneType error in Order __dict_args__ --- pyjeeves/models/raw.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index b8c5f7d..98497ef 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -500,7 +500,8 @@ class OrderItem(RawBaseModel): Order: None, 'OrdBegLevDat': lambda req_date, *_: ( req_date.strftime("%Y-%m-%d") - if not isinstance(req_date, str) else req_date), + if req_date and not isinstance(req_date, str) + else req_date), }, **RawBaseModel.__dict_args__['adapters'] } From 5d1b5f90ac8b3c1fc4b42dbee1f1d98c77cdacd6 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Tue, 19 Nov 2019 16:24:10 +0100 Subject: [PATCH 17/24] Verify string lengths when creating model objects --- pyjeeves/models/abc.py | 2 ++ pyjeeves/models/ext.py | 55 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 pyjeeves/models/ext.py diff --git a/pyjeeves/models/abc.py b/pyjeeves/models/abc.py index 061d681..9cc76d9 100644 --- a/pyjeeves/models/abc.py +++ b/pyjeeves/models/abc.py @@ -17,6 +17,7 @@ from sqlservice import ModelBase, as_declarative from pyjeeves import logging from . import db +from .ext import InstallValidatorListeners logger = logging.getLogger("PyJeeves." + __name__) @@ -37,6 +38,7 @@ except OperationalError as e: class RawBaseModel(ModelBase): """ Generalize __init__, __repr__ and to_json Based on the models columns , ForetagKod=1""" + __sa_instrumentation_manager__ = InstallValidatorListeners __to_dict_filter__ = [] __to_dict_only__ = () diff --git a/pyjeeves/models/ext.py b/pyjeeves/models/ext.py new file mode 100644 index 0000000..f2f0ae0 --- /dev/null +++ b/pyjeeves/models/ext.py @@ -0,0 +1,55 @@ +from sqlalchemy.ext.instrumentation import InstrumentationManager +# from sqlalchemy.orm.interfaces import AttributeExtension +from sqlalchemy.orm import ColumnProperty +from sqlalchemy.types import String +from sqlalchemy import event + + +class Error(Exception): + """Base class for exceptions in this module.""" + pass + + +class ValidationError(Error): + pass + + +class JeevesDBError(Error): + """Exception raised for errors in the input. + + Attributes: + expression -- input expression in which the error occurred + message -- explanation of the error + """ + + def __init__(self, field, message): + super().__init__(message) + self.field = field + self.message = message + + +class InstallValidatorListeners(InstrumentationManager): + def post_configure_attribute(self, class_, key, inst): + """Add validators for any attributes that can be validated.""" + prop = inst.prop + # Only interested in simple columns, not relations + if isinstance(prop, ColumnProperty) and len(prop.columns) == 1: + col = prop.columns[0] + # if we have string column with a length, create a length validator listner + if isinstance(col.type, String) and col.type.length: + event.listen( + getattr(class_, key), 'set', LengthValidator( + col.name, col.type.length), retval=True) + + +class LengthValidator(): + def __init__(self, col_name, max_length): + self.col_name = col_name + self.max_length = max_length + + def __call__(self, state, value, oldvalue, initiator): + if len(value) > self.max_length: + raise ValidationError( + "%s.%s: Length %d exceeds allowed %d" % ( + state.__class__.__name__, self.col_name, len(value), self.max_length)) + return value From 144fdbefb17c2b9f91fec1a916005e39103f075e Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Tue, 19 Nov 2019 16:24:41 +0100 Subject: [PATCH 18/24] Handle exceptions in stored procedures --- pyjeeves/models/sp_classes.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/pyjeeves/models/sp_classes.py b/pyjeeves/models/sp_classes.py index 886536d..ffc5c2f 100644 --- a/pyjeeves/models/sp_classes.py +++ b/pyjeeves/models/sp_classes.py @@ -131,7 +131,11 @@ class OrderHead(StoredProcedure): # self['OrderNumber'] = pymssql.output(int) def callproc(self): - super(OrderHead, self).callproc() + try: + super(OrderHead, self).callproc() + except pymssql.DatabaseError: + logger.error("A DatabaseException has been caught. Order could not be created..") + # If call succeeded, then order is allowed to be invoiced. return self['o_OrderNumber'], bool(self['c_webUserName']) @@ -189,7 +193,10 @@ class OrderRow(StoredProcedure): # self['o_AllocatedDate'] = pymssql.output(str) def callproc(self): - super(OrderRow, self).callproc() + try: + super(OrderRow, self).callproc() + except pymssql.DatabaseError: + logger.error("A DatabaseException has been caught. Order row not created.") return self['o_OrderRow'] @@ -232,6 +239,13 @@ class PlaceOrder(StoredProcedure): self['c_orderStatus'] = None self['c_ProvinceCode'] = None # For US customers etc. + def callproc(self): + try: + return super(PlaceOrder, self).callproc() + except pymssql.DatabaseError: + logger.error("A DatabaseException has been caught. Order %d not updated." % + (self['c_OrderNumber'])) + class NotifyInfo(StoredProcedure): """Mapping for the JAPP_spr_LogTrade_Get_NotifyInfo stored procedure parameters @@ -245,9 +259,14 @@ class NotifyInfo(StoredProcedure): self['c_ForetagKod'] = 1 # Hardcoded to LK def callproc(self): - result = super(NotifyInfo, self).callproc(resultset=True) ret = {'email': None, 'sms': None, 'phone': None} + try: + result = super(NotifyInfo, self).callproc(resultset=True) + except pymssql.DatabaseError: + logger.error("A DatabaseException has been caught. NotifyInfo not fetched.") + return ret + if isinstance(result, list): for r in result: if r[1][7:].lower() in ret: From 1a7ada9d569826628bce9b58c39d68bacb8bc6c6 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Wed, 20 Nov 2019 00:04:37 +0100 Subject: [PATCH 19/24] Fix: Verify string lengths when creating model objects --- pyjeeves/models/abc.py | 19 ++++++++++++++----- pyjeeves/models/ext.py | 29 ++++++++++++++--------------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/pyjeeves/models/abc.py b/pyjeeves/models/abc.py index 9cc76d9..da8983c 100644 --- a/pyjeeves/models/abc.py +++ b/pyjeeves/models/abc.py @@ -11,13 +11,14 @@ from sqlalchemy.exc import OperationalError from sqlalchemy.schema import MetaData, Column from sqlalchemy.types import Integer from sqlalchemy.orm.collections import InstrumentedList +from sqlalchemy import event from sqlservice import ModelBase, as_declarative from pyjeeves import logging from . import db -from .ext import InstallValidatorListeners +from .ext import install_validator_listner logger = logging.getLogger("PyJeeves." + __name__) @@ -38,7 +39,6 @@ except OperationalError as e: class RawBaseModel(ModelBase): """ Generalize __init__, __repr__ and to_json Based on the models columns , ForetagKod=1""" - __sa_instrumentation_manager__ = InstallValidatorListeners __to_dict_filter__ = [] __to_dict_only__ = () @@ -75,9 +75,10 @@ class RawBaseModel(ModelBase): filters ) - def _map_columns(self, key): - if key in self.__column_map__: - return self.__column_map__[key] + @classmethod + def _map_columns(cls, key): + if key in cls.__column_map__: + return cls.__column_map__[key] return key def _map_keys(self, data={}): @@ -185,3 +186,11 @@ class RawBaseModel(ModelBase): def delete(self): db.raw_session.delete(self) db.raw_session.commit() + + +# Apply validators for all string attributes in subclasses of RawBaseModel +@event.listens_for(RawBaseModel, 'attribute_instrument') +def receive_attribute_instrument(cls, key, inst): + "listen for the 'attribute_instrument' event" + + install_validator_listner(cls, key, inst) diff --git a/pyjeeves/models/ext.py b/pyjeeves/models/ext.py index f2f0ae0..9df4934 100644 --- a/pyjeeves/models/ext.py +++ b/pyjeeves/models/ext.py @@ -1,5 +1,4 @@ -from sqlalchemy.ext.instrumentation import InstrumentationManager -# from sqlalchemy.orm.interfaces import AttributeExtension + from sqlalchemy.orm import ColumnProperty from sqlalchemy.types import String from sqlalchemy import event @@ -28,18 +27,17 @@ class JeevesDBError(Error): self.message = message -class InstallValidatorListeners(InstrumentationManager): - def post_configure_attribute(self, class_, key, inst): - """Add validators for any attributes that can be validated.""" - prop = inst.prop - # Only interested in simple columns, not relations - if isinstance(prop, ColumnProperty) and len(prop.columns) == 1: - col = prop.columns[0] - # if we have string column with a length, create a length validator listner - if isinstance(col.type, String) and col.type.length: - event.listen( - getattr(class_, key), 'set', LengthValidator( - col.name, col.type.length), retval=True) +def install_validator_listner(class_, key, inst): + """Add validators for any attributes that can be validated.""" + prop = inst.prop + # Only interested in simple columns, not relations + if isinstance(prop, ColumnProperty) and len(prop.columns) == 1: + col = prop.columns[0] + # if we have string column with a length, create a length validator listner + if isinstance(col.type, String) and col.type.length: + event.listen( + getattr(class_, key), 'set', LengthValidator( + col.name, col.type.length), retval=True) class LengthValidator(): @@ -51,5 +49,6 @@ class LengthValidator(): if len(value) > self.max_length: raise ValidationError( "%s.%s: Length %d exceeds allowed %d" % ( - state.__class__.__name__, self.col_name, len(value), self.max_length)) + state.__class__.__name__, state.__class__._map_columns(self.col_name), + len(value), self.max_length)) return value From f649b5f9533f58d0606a36275aa527e4f842a3e9 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Mon, 9 Dec 2019 10:36:06 +0100 Subject: [PATCH 20/24] Make sure alt unit is an order unit when using amount per piece --- pyjeeves/models/raw.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index 98497ef..a42c78f 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -151,8 +151,9 @@ class Article(RawBaseModel): for unit in self.ArticleUnit: if unit.AltEnhetOrderStd == "1" and not spec_conv: return unit - elif (spec_conv and (unit.AltEnhetOmrFaktor == spec_conv or - unit.ArticleAlternativeUnit.AltEnhetOmrFaktor == spec_conv)): + elif (spec_conv and unit.AltEnhetOrder == "1" and ( + unit.AltEnhetOmrFaktor == spec_conv or + unit.ArticleAlternativeUnit.AltEnhetOmrFaktor == spec_conv)): return unit def get_unit_conv(self): From 5fe140714e89e7f9ec9e7300855f566dd4157231 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Thu, 30 Dec 2021 12:40:50 +0100 Subject: [PATCH 21/24] Deps updates, handle more tables + LK code --- .gitignore | 2 + README.md | 22 + README.rst | 22 - .../Jeeves_Esales_PlaceOrder.spr | 8 +- pyjeeves/connector.py | 16 +- pyjeeves/models/abc.py | 10 +- pyjeeves/models/ext.py | 2 + pyjeeves/models/raw.py | 53 ++- pyjeeves/models/sp_classes.py | 8 +- pyjeeves/repositories/__init__.py | 3 +- pyjeeves/repositories/article.py | 420 +++++++++++++++++- pyjeeves/repositories/company.py | 76 +++- requirements.txt | 15 +- setup.py | 5 +- 14 files changed, 583 insertions(+), 79 deletions(-) create mode 100644 README.md delete mode 100644 README.rst diff --git a/.gitignore b/.gitignore index 1f5d317..dec62d9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +*.csv + *.py[cod] # C extensions diff --git a/README.md b/README.md new file mode 100644 index 0000000..161b950 --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# PyJeeves Module + +This project is a Jeeves data extraction and integration project. + +## Initial creation of database schema. + +```bash +docker run --link db --network marcus_default -v /srv/pyjeeves/config.yml:/app/config.yml gitlab.lndvll.se:5500/lindvallskaffe/pyjeeves python ./pyjeeves/db_raw.py +``` + +## Connecting to DB with client + +```bash +docker run -it --network marcus_default --link db:mysql --rm mysql sh -c 'exec mysql -h"db" -P"3306" -uroot -p"ROOT_PW"' +``` + +## Forcing updates + +You may force updates of objects by setting RowUpdatedDt to null. +For example: +´update jvs_customers set RowUpdatedDt = null;´ + diff --git a/README.rst b/README.rst deleted file mode 100644 index 872edcf..0000000 --- a/README.rst +++ /dev/null @@ -1,22 +0,0 @@ -PyJeeves Module -=============== - -This project is a Jeeves data extraction and integration project. - - -## Initial creation of database schema. - -´docker run --link db --network marcus_default -v /srv/pyjeeves/config.yml:/app/config.yml gitlab.lndvll.se:5500/lindvallskaffe/pyjeeves python ./pyjeeves/db_raw.py´ - - -## Connecting to DB with client - -´docker run -it --network marcus_default --link db:mysql --rm mysql sh -c 'exec mysql -h"db" -P"3306" -uroot -p"ROOT_PW"'´ - - -## Forcing updates - -You may force updates of objects by setting RowUpdatedDt to null. -For example: -´update jvs_customers set RowUpdatedDt = null;´ - diff --git a/jeeves_sp_updates/Jeeves_Esales_PlaceOrder.spr b/jeeves_sp_updates/Jeeves_Esales_PlaceOrder.spr index 5c43760..ba4c3f7 100644 --- a/jeeves_sp_updates/Jeeves_Esales_PlaceOrder.spr +++ b/jeeves_sp_updates/Jeeves_Esales_PlaceOrder.spr @@ -101,6 +101,7 @@ declare @dbc int, @jvss_OrderReservation char(1), @kpwid integer, @OrdBerLevDat DateTime, + @OrdBerednDat DateTime, @SALES007 smallint, @kus_AddArtEjAktiv char(1), @OrdLevAdr4 Jeeves_StrVarChar64 @@ -196,7 +197,8 @@ execute @wi = Jeeves_oh_ordervarde @c_Foretagkod = @c_ForetagKod --The estimated delivery date of the order will be set to the earliest delivery date of a row. -select @OrdBerLevDat = min(OrdBerLevDat) from orp where foretagkod = @c_ForetagKod AND OrderNr = @c_OrderNumber +-- Also fetch OrdBerednDat to set base later +select @OrdBerLevDat = min(OrdBerLevDat), @OrdBerednDat = min(OrdBerednDat) from orp where foretagkod = @c_ForetagKod AND OrderNr = @c_OrderNumber begin tran @@ -304,6 +306,8 @@ if @c_PaymentType <> '1' begin oh.levforetolv = @c_levforetolv, oh.levsattkod = @Levsattkod, oh.ordberlevdat = @OrdBerLevDat, + oh.ohordberlevdatbase = @OrdBerLevDat, -- Fix base LevDat and BerednDat. Used when adding rows in GUI. + oh.ohordberedndatbase = @OrdBerednDat, oh.ordlevadr1 = @c_CoName, oh.ordlevadr2 = @c_Addr1, oh.ordlevadr3 = @c_Addr2, @@ -356,6 +360,8 @@ end else begin oh.levforetolv = @c_levforetolv, oh.levsattkod = @Levsattkod, oh.ordberlevdat = @OrdBerLevDat, + oh.ohordberlevdatbase = @OrdBerLevDat, -- Fix base LevDat and BerednDat. Used when adding rows in GUI. + oh.ohordberedndatbase = @OrdBerednDat, oh.ordlevadr1 = @c_CoName, oh.ordlevadr2 = @c_Addr1, oh.ordlevadr3 = @c_Addr2, diff --git a/pyjeeves/connector.py b/pyjeeves/connector.py index bb62f48..64c32c4 100644 --- a/pyjeeves/connector.py +++ b/pyjeeves/connector.py @@ -57,7 +57,9 @@ class DBConnector(object): def __init__(self, enabled_clients=['raw'], metadata=None): logger.info("Creating engines and sessionmakers") - self.raw, self.raw_engine = (self.raw_session() if 'raw' in enabled_clients else {}) + self.enabled_clients = enabled_clients + self.raw_db, self.raw_session, self.raw_engine = ( + self.raw_client() if 'raw' in enabled_clients else {}) self.meta = (self.meta_session() if 'meta' in enabled_clients else {}) def callproc(self, procedure="", params=[]): @@ -90,14 +92,22 @@ class DBConnector(object): conn.close() return results - def raw_session(self): + def raw_client(self): + if 'raw' not in self.enabled_clients: + logger.error('Raw client is not enabled') + + logger.info("Using DB %s" % config.config['databases']['raw']['db']) uri = 'mssql+pymssql://{user}:{pw}@{host}:{port}/{db}?charset=utf8'.format( **config.config['databases']['raw']) sql_client_config = {'SQL_DATABASE_URI': uri} db = SQLClient(sql_client_config, query_class=BaseFilterQuery) - return db.session, db.engine + return db, db.session, db.engine + + def set_model_class(self, model_class): + self.raw_db.model_class = model_class + self.raw_db.update_models_registry() def meta_session(self): diff --git a/pyjeeves/models/abc.py b/pyjeeves/models/abc.py index da8983c..bb41186 100644 --- a/pyjeeves/models/abc.py +++ b/pyjeeves/models/abc.py @@ -26,10 +26,11 @@ logger.info("Reading Jeeves DB structure") meta = MetaData() try: - meta.reflect(bind=db.raw.connection(), - only=['ar', 'ars', 'xae', 'xare', 'fr', 'kus', 'x1k', + meta.reflect(bind=db.raw_session.connection(), + only=['ar', 'ars', 'arsh', 'arean', 'xae', 'xare', 'fr', 'kus', 'x1k', 'oh', 'orp', 'lp', 'vg', 'xp', 'xm', 'prh', 'prl', - 'kp', 'kpw', 'cr', 'X4', 'xw', 'X1']) + 'kp', 'kpw', 'cr', 'X4', 'xw', 'X1', + 'JAPP_EWMS_Item_Replenishment_Levels']) except OperationalError as e: logger.error("Failed to read Jeeves DB structure") raise e @@ -194,3 +195,6 @@ def receive_attribute_instrument(cls, key, inst): "listen for the 'attribute_instrument' event" install_validator_listner(cls, key, inst) + + +db.set_model_class(RawBaseModel) diff --git a/pyjeeves/models/ext.py b/pyjeeves/models/ext.py index 9df4934..38ace14 100644 --- a/pyjeeves/models/ext.py +++ b/pyjeeves/models/ext.py @@ -52,3 +52,5 @@ class LengthValidator(): state.__class__.__name__, state.__class__._map_columns(self.col_name), len(value), self.max_length)) return value + +# Add more validators, such as type for ints. diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index a42c78f..fe95d66 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -67,8 +67,8 @@ class ArticleUnit(RawBaseModel): ArtNr = Column(String, ForeignKey('ar.ArtNr'), primary_key=True) - AltEnhetKod = Column(Integer, ForeignKey('xae.AltEnhetKod'), primary_key=True) - ArticleAlternativeUnit = relationship(ArticleAlternativeUnit) + AltEnhetKod = Column(String, ForeignKey('xae.AltEnhetKod'), primary_key=True) + ArticleAlternativeUnit = relationship(ArticleAlternativeUnit, lazy='joined') class ArticleBalance(RawBaseModel): @@ -89,6 +89,30 @@ class ArticleBalance(RawBaseModel): ArtNr = Column(Integer, ForeignKey('ar.ArtNr'), primary_key=True) +class ArticleEAN(RawBaseModel): + __tablename__ = 'arean' + __column_map__ = {'ArtNrEAN': 'EAN', 'ArtNr': 'ArticleNumber'} + __to_dict_only__ = ('ArtNr', 'ArtNrEAN', 'ArticleUnit') + + ArtNr = Column(String, ForeignKey('ar.ArtNr'), primary_key=True) + ArtNrEAN = Column(String, primary_key=True) + AltEnhetKod = Column(String, ForeignKey('xare.AltEnhetKod')) + + ArticleUnit = relationship(ArticleUnit, lazy='joined') + + +class ArticleShelf(RawBaseModel): + __tablename__ = 'arsh' + __column_map__ = {'LagPlats': 'Shelf', + 'LagStalle': 'WarehouseID', + 'JAPP_EWMS_zoneid': 'WMSZoneID', + 'ArtNr': 'ArticleNumber'} + __to_dict_only__ = ('LagPlats', 'LagStalle', 'JAPP_EWMS_zoneid', 'ArtNr') + + LagPlats = Column(String, ForeignKey('ar.ArtNr'), primary_key=True) + LagStalle = Column(String, ForeignKey('ar.ArtNr'), primary_key=True) + + class VATRate(RawBaseModel): __tablename__ = 'X1' __column_map__ = {'MomsKod': 'VATID', 'MomsSats': 'VATRate'} @@ -200,12 +224,12 @@ class Article(RawBaseModel): except TypeError: logger.debug("NoneType error, %s" % self.ArtNr) - @classmethod - def _base_filters(self, obj): - return RawBaseModel._base_filters( - obj, - and_(obj.ItemStatusCode == 0) - ) + # @classmethod + # def _base_filters(self, obj): + # return RawBaseModel._base_filters( + # obj, + # and_(obj.ItemStatusCode == 0) + # ) class ContactInformationType(RawBaseModel): @@ -535,3 +559,16 @@ class OrderItem(RawBaseModel): pers_sign=self['PersSign']).callproc() self['OrdRadNr'] = row_no return self + + +class ItemReplenishmentLevels(RawBaseModel): + # __table_args__ = {'mssql_autoincrement': False, 'extend_existing': True} + # __table_args__ = {'implicit_returning': False, 'extend_existing': True} + __tablename__ = 'JAPP_EWMS_Item_Replenishment_Levels' + __column_map__ = {'ArtNr': 'ArticleNumber', 'LagPlats': 'Shelf', 'LagStalle': 'WarehouseID'} + __to_dict_only__ = ('LagPlats', 'ArtNr') + + # Workaround for: + # "Table 'JAPP_EWMS_Item_Replenishment_Levels' does not have the identity property. + # Cannot perform SET operation." + ForetagKod = Column(Integer, primary_key=True, autoincrement=False) diff --git a/pyjeeves/models/sp_classes.py b/pyjeeves/models/sp_classes.py index ffc5c2f..3628382 100644 --- a/pyjeeves/models/sp_classes.py +++ b/pyjeeves/models/sp_classes.py @@ -24,9 +24,11 @@ class StoredProcedure(OrderedDict): FROM sys.objects AS SO INNER JOIN sys.parameters AS P ON SO.OBJECT_ID = P.OBJECT_ID - WHERE SO.name LIKE '%Jeeves_Esales_%' OR - SO.name LIKE '%JAPP_spr_LogTrade_%' AND - SO.OBJECT_ID IN ( SELECT OBJECT_ID + WHERE ( + SO.name LIKE '%Jeeves_Esales_%' OR + SO.name LIKE '%JAPP_spr_LogTrade_%' + ) AND + SO.OBJECT_ID IN ( SELECT OBJECT_ID FROM sys.objects WHERE TYPE IN ('P','FN')) ORDER BY [Schema], SO.name, P.parameter_id""" diff --git a/pyjeeves/repositories/__init__.py b/pyjeeves/repositories/__init__.py index b58262c..f349a0f 100644 --- a/pyjeeves/repositories/__init__.py +++ b/pyjeeves/repositories/__init__.py @@ -2,4 +2,5 @@ from .location import Location from .article import Article, ArticleCategory from .company import Company from .pricelist import PriceList -from .order import Order \ No newline at end of file +from .order import Order +from .warehouse import Warehouse \ No newline at end of file diff --git a/pyjeeves/repositories/article.py b/pyjeeves/repositories/article.py index d0ad923..a8b0cd3 100644 --- a/pyjeeves/repositories/article.py +++ b/pyjeeves/repositories/article.py @@ -1,9 +1,12 @@ # -*- coding: utf-8 -*- -from pyjeeves.models.raw import Article as ArticleModel, ProductClass, ArticleClass, CommodityGroup +from pyjeeves.models.raw import ( + Article as ArticleModel, + ProductClass, ArticleClass, CommodityGroup, ArticleEAN, ArticleUnit) from pyjeeves.models import db from sqlalchemy.sql.expression import and_ from sqlalchemy.orm.exc import NoResultFound +from gtin import GTIN from pyjeeves import logging logger = logging.getLogger("PyJeeves." + __name__) @@ -17,22 +20,31 @@ class Article(): def get(art_no): """ Query an article by number """ try: - return db.raw.query(ArticleModel).filter_by( + return db.raw_session.query(ArticleModel).filter_by( ArtNr=str(art_no) ).one() except NoResultFound: raise KeyError @staticmethod - def get_all(filter_=and_(ArticleModel.ItemStatusCode == 0, ArticleModel.ArtKod != 2)): + def get_all(filter_=and_( + ArticleModel.ItemStatusCode == 0, + ArticleModel.ArtKod != 2, + ArticleModel.VaruGruppKod != 90, + ArticleModel.ArtProdKlass != 0) + ): # .filter_by(ItemStatusCode=0, ArtKod=2) - return db.raw.query(ArticleModel).filter(filter_).all() + return db.raw_session.query(ArticleModel).filter(filter_).all() + + @staticmethod + def get_article_units(filter_=and_()): + return db.raw_session.query(ArticleUnit).filter(filter_).all() @staticmethod def is_salable(art_no_list=[]): """ Returns true if all articles are salable, else false with error information """ - articles = db.raw.query(ArticleModel).filter( + articles = db.raw_session.query(ArticleModel).filter( and_(ArticleModel.ArtNr.in_(art_no_list))).all() blocked_articles = [article.ArtNr for article in articles @@ -50,6 +62,43 @@ class Article(): return True, {} + @staticmethod + def get_article_gtins(): + return db.raw_session.query(ArticleEAN).all() + + @staticmethod + def add_article_gtins(gtins=[], dry_run=False): + # Expects a list of dicts like this: + # [{ + # 'article_no': article.ArtNr, + # 'article_gtin': gtin, + # 'unit': unit.AltEnhetKod, + # }] + for gtin in gtins: + n1 = ArticleEAN( + ArtNr=gtin['article_no'], AltEnhetKod=gtin.get('unit', None), + ArtNrEAN=str(gtin['article_gtin']), ForetagKod=1) + if dry_run: + logger.info('Creating GTIN for %s, %s, %s' % (n1.ArtNr, n1.AltEnhetKod, n1.ArtNrEAN)) + continue + + db.raw_db.add(n1) + logger.debug('Created/updated Article EAN for %s - %s with GTIN %s' % ( + gtin['article_no'], gtin.get('unit', 'no unit'), gtin['article_gtin'])) + + db.raw_db.commit() + logger.info('Succesfully commited %s GTINs to database' % (len(gtins))) + + @staticmethod + def clear_article_gtins(): + gtins = db.raw_session.query(ArticleEAN).all() + + for gtin in gtins: + db.raw_db.delete(gtin) + + db.raw_db.commit() + logger.info('Deleted %s GTINs' % (len(gtins))) + class ArticleCategory(): """Handles article categories, such as classes and groups in Jeeves""" @@ -57,27 +106,362 @@ class ArticleCategory(): @staticmethod def get_all(): # .filter_by(ItemStatusCode=0, ArtKod=2) - prod_classes = db.raw.query(ProductClass).all() - art_classes = db.raw.query(ArticleClass).all() - com_groups = db.raw.query(CommodityGroup).all() + prod_classes = db.raw_session.query(ProductClass).all() + art_classes = db.raw_session.query(ArticleClass).all() + com_groups = db.raw_session.query(CommodityGroup).all() return {'ProductClasses': prod_classes, 'ArticleClasses': art_classes, 'CommodityGroups': com_groups} +# TODO: Should be moved to separate project with Lindvalls specific code +def get_gtin_for_article(article_ean, article_unit=None, use_prefix=True): + # If we don't want to prefix with 0, then exclude them here. + UNIT_MAPPING = { + 'PÃ¥se': '', + 'st': '', + 'paket': 0, + '200g': 0, + 'kg': 9, + 'Kart': 1, + 'Bricka': 1, + '½-pall': 2, + 'tray_no_wrap': 8 + } + prefixes = [] + if article_unit: + # Find matching values in unit mapping + prefixes = [ + val for key, val in UNIT_MAPPING.items() + if article_unit[0:len(key)].lower() in key.lower()] + if len(prefixes) > 1: + logger.warning('More than one unit match found in unit mapping') + + # Use the first match + raw_gtin = (str(prefixes[0]) + article_ean) if prefixes and use_prefix else article_ean + + # Handle GS1-128 GTIN code + if len(raw_gtin) >= 15 and raw_gtin[0:2] == '01': + raw_gtin = raw_gtin[2::] + + article_gtin = GTIN(raw=raw_gtin) + + return article_gtin + + +# TODO: Should be moved to separate project with Lindvalls specific code +def create_gtins_for_trading_goods(filename='gtin_trading_goods.csv'): + articles = Article.get_all(and_( + ArticleModel.ArtProdKlass == 4)) + + gtins = [] + gtin_data = {} + + import csv + with open(filename, newline='') as csvfile: + gtinreader = csv.reader(csvfile, delimiter=',') + headers = gtinreader.__next__() + logger.info('Found these columns: %s' % (', '.join(headers))) + + for row in gtinreader: + gtin_data[row[0]] = row + + logger.info("Found %s articles and updating with %s rows of data" % ( + len(articles), len(gtin_data))) + + for article in articles: + data = gtin_data.get(article.ArtNr) + if data: + default_set = False + if len(article.ArticleUnit) == 0 and data[3]: + logger.warning('Article %s has no ArticleUnits, but requires it' % (article.ArtNr)) + + for unit in article.ArticleUnit: + if unit.AltEnhetKod[0:3] == 'kart' and not data[3]: + logger.warning('Article %s missing kart unit' % (article.ArtNr)) + + if data[3] and unit.AltEnhetKod != 'st': + gtin = get_gtin_for_article(data[3], unit.AltEnhetKod, False) + # Only add GTINs for order units (not PO units) + if unit.AltEnhetOrder == '1': + gtins.append({ + 'article_no': article.ArtNr, + 'article_gtin': gtin, + 'unit': unit.AltEnhetKod + }) + if unit.AltEnhetKod == 'st': + gtin = get_gtin_for_article(data[2], unit.AltEnhetKod, False) + # Only add GTINs for order units (not PO units) + if unit.AltEnhetOrder == '1': + gtins.append({ + 'article_no': article.ArtNr, + 'article_gtin': gtin, + 'unit': unit.AltEnhetKod + }) + default_set = True + + # Add default gtin if 'st' not used + if not default_set: + gtin = get_gtin_for_article(data[2], None, False) + gtins.append({ + 'article_no': article.ArtNr, + 'article_gtin': gtin + }) + else: + # Warn about active and stock items that didn't get updated. + if article.LagTyp == 0 and article.ItemStatusCode == 0: + logger.warning('Article %s has no GTIN data in CSV' % (article.ArtNr)) + + Article.add_article_gtins(gtins) + + +# TODO: Should be moved to separate project with Lindvalls specific code +def create_gtins(dry_run=True): + # GS1 Company Prefixes that we manage locally, prefixing etc. + LOCAL_GCPS = [ + '731083', # Lindvalls Kaffe + '7392736', # Sackeus AB + '735007318', # Sarria Import AB + '732157', # Martin & Servera AB + '350096', # Scænsei Thee Kompani AB (Used by REKYL In Omnia Paratus AB) + '735003307', # Coffee Please + '735003711', # Emmas Skafferi AB (Used by Coffee Please) + '735003712', # Prefix no longer subscribed (Used by Coffee Please) + '735003302', # Josephine Selander - YogaGo (Used by Coffee Please) + ] + + articles = Article.get_all(and_( + ArticleModel.ItemStatusCode == 0, + ArticleModel.VaruGruppKod != 90, + ArticleModel.ArtProdKlass != 0)) + + articles_with_existing_gtins = [ + gtin.ArtNr for i, gtin in enumerate(Article.get_article_gtins())] + + gtins = [] + + for article in articles: + if article.ArtNr in articles_with_existing_gtins: + continue + + if not article.ArtStreckKod: + logger.warning('No base GTIN for article %s' % (article.ArtNr)) + continue + + GCP = GTIN(raw=article.ArtStreckKod).gcp + + if 12 < len(article.ArtStreckKod) < 12 and GCP in LOCAL_GCPS: + logger.error('Base GTIN is wrong length for article %s' % (article.ArtNr)) + continue + + # If GTIN is provided by vendor, skip prefixes and gohead if only one or no units exist. + if GCP not in LOCAL_GCPS and len(article.ArticleUnit) <= 1: + use_prefix = False + logger.info('Externally provided GTIN for %s, skipping prefixes' % (article.ArtNr)) + elif GCP not in LOCAL_GCPS and len(article.ArticleUnit) > 1: + logger.warning('Externally provided GTIN for %s, too many units' % (article.ArtNr)) + continue + else: + use_prefix = True + + # Create gtin without ArticleUnit, for the base unit. + # gtins.append({ + # 'article_no': article.ArtNr, + # 'article_gtin': get_gtin_for_article(article.ArtStreckKod, None, False) + # }) + + for unit in article.ArticleUnit: + + # Skip paket for 21%, should only match HV with plastic wrapping. + if article.ArtNr[0:2] == '21' and unit.AltEnhetKod[0:6].lower() == 'paket': + logger.info('Skip paket unit for %s' % (article.ArtNr)) + continue + + # Special for 20%/30%, should only match HV without plastic wrapping. + if article.ArtNr[0:2] in ('20', '30') and unit.AltEnhetKod[0:6].lower() == 'bricka': + unit_code = 'tray_no_wrap' + else: + unit_code = unit.AltEnhetKod + + gtin = get_gtin_for_article(article.ArtStreckKod, unit_code, use_prefix) + + # Only add GTINs for order units (not PO units) + if unit.AltEnhetOrder == '1': + gtins.append({ + 'article_no': article.ArtNr, + 'article_gtin': gtin, + 'unit': unit.AltEnhetKod + }) + + # Workaround for scanning HV base units without plastic wrapping + if str(gtin)[0] == '0': + # Create gtin without ArticleUnit, for the base unit. + gtins.append({ + 'article_no': article.ArtNr, + 'article_gtin': get_gtin_for_article(article.ArtStreckKod, None, False) + }) + + # Add GTIN to articles that don't use article units + # Should this still be added to arean/ArticleEAN??? + # if len(article.ArticleUnit) == 0: + # gtin = get_gtin_for_article(article.ArtStreckKod, None, use_prefix) + # gtins.append({ + # 'article_no': article.ArtNr, + # 'article_gtin': gtin, + # 'unit': None, + # }) + # add_gtin_for_article( + # article.ArtNr, article.ArtStreckKod, None, use_prefix) + + Article.add_article_gtins(gtins, dry_run) + + +# TODO: Should be moved to separate project with Lindvalls specific code +def find_articles_without_base_gtin(): + articles = Article.get_all(and_( + ArticleModel.ItemStatusCode == 0, + ArticleModel.VaruGruppKod != 90, + ArticleModel.ArtProdKlass != 0)) + + _list = [] + + for article in articles: + if not article.ArtStreckKod: + _list.append( + {'artnr': article.ArtNr, + 'artbeskr': article.ArtBeskr, + 'error': 'no_base'}) + continue + else: + if 12 < len(article.ArtStreckKod) < 12: + _list.append( + {'artnr': article.ArtNr, + 'artbeskr': article.ArtBeskr, + 'error': 'wrong_length'}) + continue + + for item in _list: + print('{artnr}, "{artbeskr}", {error}'.format(**item)) + + +# TODO: Should be moved to separate project with Lindvalls specific code +def set_storage_type(): + articles = Article.get_all(and_( + ArticleModel.LagTyp == 0, + ArticleModel.ItemStatusCode == 0, + ArticleModel.AnskaffningsSatt == 10)) + + for article in articles: + article.LagTyp = 4 + + db.raw_db.commit() + + logger.info("Updated storage type for %s articles" % (len(articles))) + + +# TODO: Should be moved to separate project with Lindvalls specific code +def set_zone_placement(): + # Logic for article groups and zones + # ArticleClass descides which zone to put it. + # set Article.ArticleBalance[0].japp_ewms_rec_zoneid to correct zoneid + + article_class_map = { + 'Kaffe': 'U', + 'OoH-Kaffe': 'K', + 'Private Label': 'S', + 'Tillbehör och maskiner': 'U', + 'Komplement': 'U' + } + + articles = Article.get_all(and_( + ArticleModel.ItemStatusCode == 0, + ArticleModel.AnskaffningsSatt == 10)) + + zone_placements_update = 0 + for article in articles: + zone_id = article_class_map.get(article.ArticleClass.ArtTypBeskr) + if zone_id and article.ArticleBalance: + article.ArticleBalance[0].JAPP_EWMS_REC_ZoneID = zone_id + zone_placements_update += 1 + else: + logger.info("Excluded %s, wrong article class or no balance " % (article.ArtNr)) + + db.raw_db.commit() + + logger.info("Updated placement zone for %s articles" % (zone_placements_update)) + + # a = Article.get('2109') + # print([ab.to_dict() for ab in a['ArticleBalance']]) + + +def update_decimals_on_alt_units(): + units = Article.get_article_units(ArticleUnit.AltEnhetKod == 'pÃ¥se') + + updated_units = 0 + + for unit in units: + if unit.AltEnhetOmrFaktor is not None: + dec_count = 0 + for digit in unit.AltEnhetOmrFaktor.as_tuple().digits: + if digit != 0: + dec_count += 1 + unit.AltEnhetAntDec = dec_count + + updated_units += 1 + + db.raw_db.commit() + logger.info("Updated decimal count for %s article units" % (updated_units)) + + if __name__ == '__main__': # print([column.key for column in Company.__table__.columns]) - logger.info("Starting TEST") + # from pprint import pprint + # logger.info("Starting TEST") + # session = RawSession() - logger.info("Testing gettings an article") - # c1 = session.query(Company).filter_by(FtgNr="179580").first() - # print(ArticleModel) - c1 = ArticleModel.query.filter_by(ArtNr="2103").first() - print(c1) - logger.info(c1.json) + # logger.info("Testing gettings an article") + # # c1 = session.query(Company).filter_by(FtgNr="179580").first() + # # print(ArticleModel) + # c1 = db.raw_session.query(ArticleModel).filter_by(ArtNr="2003").first() + # c1 = Article.get("2003") + # pprint([unit.to_dict() for unit in c1.ArticleUnit]) + # pprint(c1.to_dict()) + # pprint([(au.to_dict(), au.AltEnhetOrder) for au in c1.ArticleUnit]) + # logger.info(c1.to_dict()) - print( - len(ArticleModel.get_all()) - ) + # print( + # len(Article.get_all()) + # ) + + # c1 = db.raw_session.query(ArticleEAN).all() + # pprint([c.to_dict() for c in c1]) + + # c1 = db.raw_session.query(ArticleEAN).filter_by(ArtNr="1054").first() + # pprint(c1.to_dict()) + # c1.ArtNrEAN = '7310830010548' + # pprint(c1.to_dict()) + # c1.save() + # logger.info(c1.to_dict()) + # create_gtins_for_trading_goods('gtin_trading_goods_test.csv') + + # LIVE FUNCTIONS BELOW + + # find_articles_without_base_gtin() + + # logger.info("Truncating GTINs") + # Article.clear_article_gtins() + logger.info("Creating new GTINs from base GTIN") + create_gtins(dry_run=False) + # logger.info("Creating new GTINs from trading goods CSV") + # create_gtins_for_trading_goods() + + # logger.info("Update articles for batch management") + # set_storage_type() + + # logger.info("Set zone information on article balance") + # set_zone_placement() + + # logger.info("Updating alt units") + # update_decimals_on_alt_units() diff --git a/pyjeeves/repositories/company.py b/pyjeeves/repositories/company.py index c0fc206..a707296 100644 --- a/pyjeeves/repositories/company.py +++ b/pyjeeves/repositories/company.py @@ -18,7 +18,7 @@ class Company(): def get(ftg_nr): """ Query an article by number """ try: - return db.raw.query(CompanyModel).filter_by( + return db.raw_session.query(CompanyModel).filter_by( FtgNr=ftg_nr ).one() except NoResultFound: @@ -26,17 +26,21 @@ class Company(): @staticmethod def get_all_active_customers(): - cust = db.raw.query(CustomerModel).filter(and_(CustomerModel.Makulerad == 0)).all() + cust = db.raw_session.query(CustomerModel).filter(and_(CustomerModel.Makulerad == 0)).all() return [c.CompanyModel for c in cust] @staticmethod - def get_customer_numbers(category_list=[10], class_list=[], filter_inactive=True): + def get_customers(category_list=[10], class_list=[], filter_inactive=True, filters=and_()): category_in = CustomerModel.kundkategorikod.in_(category_list) if category_list else and_() class_in = CustomerModel.kundklass.in_(class_list) if class_list else and_() inactive = and_(CustomerModel.Makulerad == 0) if filter_inactive else and_() - cust = db.raw.query(CustomerModel).options( - Load(CustomerModel).noload('*')).filter( - and_(category_in, class_in, inactive)).all() + return db.raw_session.query(CustomerModel).options( + Load(CompanyModel).noload('*')).filter( + and_(category_in, class_in, inactive, filters)).all() + + @staticmethod + def get_customer_numbers(category_list=[10], class_list=[], filter_inactive=True): + cust = Company.get_customers(category_list, class_list, filter_inactive) return [c.FtgNr for c in cust] @staticmethod @@ -45,24 +49,71 @@ class Company(): if ftg_nr: ftg_filter = CompanyModel.FtgNr.in_(ftg_nr) - return db.raw.query(CompanyModel).join(CustomerModel).filter( + return db.raw_session.query(CompanyModel).join(CustomerModel).filter( and_(ftg_filter, filter_)).order_by( CompanyModel.FtgNr.desc()).offset(offset).limit(limit).all() +# TODO: Should be moved to separate project with Lindvalls specific code +def update_customer_delivery_from_csv(filename='zip_codes_svhl.csv'): + SVHL_ZONES = {} + + logger.info("Get customers") + customers = Company.get_customers(filters=( + and_(CustomerModel.LevSattKod == 3, CustomerModel.kundklass == None))) # noqa + logger.info("Amount of customers is %d" % len(customers)) + + import csv + with open(filename, newline='') as csvfile: + shelfreader = csv.reader(csvfile, delimiter=',') + headers = shelfreader.__next__() + logger.info('Found these columns: %s' % (', '.join(headers))) + for row in shelfreader: + SVHL_ZONES[row[0]] = '%s - %s' % (row[2], row[1]) + + logger.info('Length of zones dict is %d' % (len(SVHL_ZONES))) + + customers_to_update = 0 + + for customer in customers: + + if customer.Company.FtgLevPostNr: + FtgLevPostNr = customer.Company.FtgLevPostNr.strip().replace(" ", "") + if FtgLevPostNr and FtgLevPostNr in SVHL_ZONES: + logger.info('FtgLevPostNr: %s - %s is within SVHL zone %s' % ( + customer.FtgNr, customer.Company.FtgNamn, SVHL_ZONES[FtgLevPostNr])) + customers_to_update += 1 + customer.LevSattKod = 11 + continue + # Return? Break? + if customer.Company.FtgPostnr: + FtgPostnr = customer.Company.FtgPostnr.strip().replace(" ", "") + if FtgPostnr and FtgPostnr in SVHL_ZONES: + logger.info('FtgPostnr: %s - %s is within SVHL zone %s' % ( + customer.FtgNr, customer.Company.FtgNamn, SVHL_ZONES[FtgPostnr])) + customer.LevSattKod = 11 + customers_to_update += 1 + + logger.info('Amount updated %d' % customers_to_update) + + # db.raw_db.merge(n1) + db.raw_db.commit() + logger.info('Succesfully commited updated customers to database') + + if __name__ == '__main__': # print([column.key for column in CompanyModel.__table__.columns]) - logger.info("Starting TEST") + # logger.info("Starting TEST") # session = RawSession() - logger.info("Testing gettings a company") + # logger.info("Testing gettings a company") # c1 = session.query(CompanyModel).filter_by(FtgNr="179580").first() # print(CompanyModel) # print(CompanyModel.get_list(['406569', '179580', '2440070', '179584'])) - from pprint import pprint - pprint(CompanyModel.get('179584').to_dict()) + # from pprint import pprint + # pprint(CompanyModel.get('179584').to_dict()) # c1 = CompanyModel.query.filter_by(FtgNr="406569").first() # print(c1) @@ -73,3 +124,6 @@ if __name__ == '__main__': # ) # print(CompanyModel.get_all_active_customers()[0].CompanyModel) + + logger.info("Starting") + update_customer_delivery_from_csv() diff --git a/requirements.txt b/requirements.txt index 26f5eed..7993e5f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,9 @@ nose==1.3.7 -Sphinx==1.8.5 -pymssql==2.1.4 -SQLAlchemy==1.3.1 -sqlservice==1.1.3 -PyMySQL==0.9.3 -alembic==1.0.8 -PyYAML==5.1 \ No newline at end of file +Sphinx==3.2.1 +pymssql-py38==2.1.4 +SQLAlchemy==1.3.22 +sqlservice==1.2.1 +PyMySQL==0.10.0 +alembic==1.4.2 +PyYAML==5.3.1 +gtin==0.1.13 \ No newline at end of file diff --git a/setup.py b/setup.py index bf97f9d..6c9064a 100755 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ with open('LICENSE') as f: setup( name='pyjeeves', version='0.0.1', - description='PyJeeves syncronization module', + description='PyJeeves communication module', long_description=readme, author='Marcus Lindvall', author_email='marcus.lindvall@lindvallskaffe.se', @@ -22,11 +22,12 @@ setup( install_requires=[ 'nose', 'sphinx', - 'pymssql', + 'pymssql-py38', 'sqlalchemy', 'sqlservice', 'PyMySQL', 'alembic', 'pyyaml', + 'gtin' ] ) From efc505c12ef2b2d68348e4a5ec5b029dfd719c64 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Thu, 30 Dec 2021 12:41:55 +0100 Subject: [PATCH 22/24] Warehouse module --- pyjeeves/repositories/warehouse.py | 142 +++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 pyjeeves/repositories/warehouse.py diff --git a/pyjeeves/repositories/warehouse.py b/pyjeeves/repositories/warehouse.py new file mode 100644 index 0000000..44e2466 --- /dev/null +++ b/pyjeeves/repositories/warehouse.py @@ -0,0 +1,142 @@ +from pyjeeves.models.raw import ArticleShelf, ItemReplenishmentLevels +from pyjeeves.models import db +from sqlalchemy.sql.expression import and_ +from sqlalchemy.orm.exc import NoResultFound + +from pyjeeves.repositories import Article + +from pyjeeves import logging +logger = logging.getLogger("PyJeeves." + __name__) + + +# Relocate Jeeves modules to separate folder and let a "master" module handle imports, and setup. +class Warehouse(): + """Handles articles in Jeeves, currently filters out all articles with class = 2""" + + @staticmethod + def get_shelf(shelf_id): + """ Query a shelf by id """ + try: + return db.raw_session.query(ArticleShelf).filter_by( + LagPlats=str(shelf_id) + ).one() + except NoResultFound: + raise KeyError + + @staticmethod + def get_all_shelfs(filter_=and_()): + # .filter_by(ItemStatusCode=0, ArtKod=2) + return db.raw_session.query(ArticleShelf).filter(filter_).all() + + @staticmethod + def delete_empty_shelfs(): + shelfs = db.raw_session.query(ArticleShelf).filter(and_( + ArticleShelf.LagStalle == 0, + ArticleShelf.JAPP_EWMS_zoneid.in_(['U', 'K', 'S']), + ArticleShelf.LagSaldo == 0)).all() + + for shelf in shelfs: + db.raw_db.delete(shelf) + + db.raw_db.commit() + logger.info('Deleted %s shelfs' % (len(shelfs))) + + @staticmethod + def delete_replenish(): + replenish = db.raw_session.query(ItemReplenishmentLevels).all() + + for repl in replenish: + db.raw_db.delete(repl) + + db.raw_db.commit() + logger.info('Deleted old replenishment levels') + + @staticmethod + def add_replenish(shelfs=[]): + Warehouse.delete_replenish() + + min_level = 54 # Should be how low we'd like the level to get. One layer on pallet? + max_level = 270 # How high is the roof? + + # with db.raw_session.no_autoflush: + for shelf in shelfs: + art = Article.get(shelf['article_no']) + + default_alt_unit = [unit for unit in art.ArticleUnit if unit.AltEnhetOrderStd == '1'] + if default_alt_unit and len(default_alt_unit) == 1: + if default_alt_unit[0].AltEnhetOmrFaktor is not None: + unit_multiple = default_alt_unit[0].AltEnhetOmrFaktor + else: + unit_multiple = default_alt_unit[0].ArticleAlternativeUnit.AltEnhetOmrFaktor + else: + unit_multiple = 1 + + new_level = ItemReplenishmentLevels( + LagStalle='0', LagPlats=shelf['shelf'], ArtNr=shelf['article_no'], + JAPP_EWMS_minnoofitemsonbin=min_level, + MaxNoOfItemsOnBin=max_level, + JAPP_EWMS_multipel=unit_multiple, + ForetagKod=1) + + db.raw_db.add(new_level) + db.raw_db.commit() + + +# TODO: Should be moved to separate project with Lindvalls specific code +def update_shelfs_from_csv(filename='shelf_numbers_20211217.csv'): + SHELF_TYPES = { + 'Hyllplats': 'HP', + 'Pallplats': 'PP', + 'Pallrad': 'PR' + } + SKIP_ZONES = ('U', 'K', 'KB', 'S', 'G') + + import csv + with open(filename, newline='') as csvfile: + shelfreader = csv.reader(csvfile, delimiter=',') + headers = shelfreader.__next__() + logger.info('Found these columns: %s' % (', '.join(headers))) + for row in shelfreader: + if row[3] in SKIP_ZONES: + continue + maxkg = int(row[4]) if row[4] else 0 + multiitems = '1' if row[2] == 'Pallrad' else '0' + n1 = ArticleShelf( + LagPlats=row[1], JAPP_EWMS_zoneid=row[3], LagStalle='0', + LagPlatsTyp=SHELF_TYPES.get(row[2]), MaxNoOfItemsOnBin=maxkg, + MultiItemsOnBin=multiitems, JAPP_EWMS_AllowMultipleBatchesOnBin=multiitems, + ForetagKod=1) + + db.raw_db.merge(n1) + db.raw_db.commit() + logger.info('Succesfully commited shelfs to database') + + +# TODO: Should be moved to separate project with Lindvalls specific code +def update_replenishment_levels(filename='repl_shelfs.csv'): + import csv + + repl_shelfs = [] + with open(filename, newline='') as csvfile: + shelfreader = csv.reader(csvfile, delimiter=',') + headers = shelfreader.__next__() + logger.info('Found these columns: %s' % (', '.join(headers))) + for row in shelfreader: + repl_shelfs.append({ + 'shelf': row[0], + 'article_no': str(row[1]) + }) + logger.info('Updating %d replenishment levels' % (len(repl_shelfs))) + Warehouse.add_replenish(repl_shelfs) + logger.info('Succesfully commited levels to database') + + +if __name__ == '__main__': + # from pprint import pprint + # all_shelfs = Warehouse.get_all_shelfs() + # pprint([shelf.to_dict() for shelf in all_shelfs]) + + # Warehouse.delete_empty_shelfs() + update_shelfs_from_csv() + + # update_replenishment_levels() From 229ea6fb5be2537d08ef4e7b8e45fc486071efc4 Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Thu, 2 Feb 2023 14:21:21 +0100 Subject: [PATCH 23/24] Assed some modified Jeeves procedures, for historical reasons. --- .../Jeeves_Esales_CreateOrder.spr | 340 ++ jeeves_sp_updates/Jeeves_Init_Insert_oh.spr | 3409 +++++++++++++ jeeves_sp_updates/Jeeves_Init_Insert_orp.spr | 4401 +++++++++++++++++ 3 files changed, 8150 insertions(+) create mode 100644 jeeves_sp_updates/Jeeves_Esales_CreateOrder.spr create mode 100644 jeeves_sp_updates/Jeeves_Init_Insert_oh.spr create mode 100644 jeeves_sp_updates/Jeeves_Init_Insert_orp.spr diff --git a/jeeves_sp_updates/Jeeves_Esales_CreateOrder.spr b/jeeves_sp_updates/Jeeves_Esales_CreateOrder.spr new file mode 100644 index 0000000..b516016 --- /dev/null +++ b/jeeves_sp_updates/Jeeves_Esales_CreateOrder.spr @@ -0,0 +1,340 @@ +SET ANSI_NULLS OFF +GO +SET QUOTED_IDENTIFIER OFF +GO +SET NOCOUNT ON +GO +PRINT 'Begin Jeeves_Esales_CreateOrder' +GO +PRINT 'Begin Jeeves_Esales_CreateOrder' +PRINT '***************************************************' +PRINT '* *' +PRINT '* Jeeves_Esales_CreateOrder *' +PRINT '* *' +PRINT '***************************************************' +GO +IF OBJECT_ID( 'Jeeves_Esales_CreateOrder', 'P' ) IS NOT NULL +BEGIN + DROP PROCEDURE Jeeves_Esales_CreateOrder +END +GO +IF (SELECT COUNT(*) FROM xspr WHERE + SprTrgName = 'Jeeves_Esales_CreateOrder' AND + SprTrgType = 'P' ) > 0 +BEGIN + UPDATE xspr SET beskrivning=beskrivning WHERE + SprTrgName = 'Jeeves_Esales_CreateOrder' AND + SprTrgType = 'P' +END ELSE BEGIN + INSERT INTO xspr(SprTrgName,SprTrgType,RowCreatedDt) + VALUES('Jeeves_Esales_CreateOrder' , 'P', GETDATE() ) +END +GO +---------------------------------------------------- + +CREATE procedure Jeeves_Esales_CreateOrder + @c_ForetagKod smallint, + @c_webUserName Jeeves_StrVarChar64 = null, + @c_CompanyNo Jeeves_StrVarChar32 = null, + @c_PersSign Jeeves_StrVarChar6, + @c_LangID smallint = 0, + @c_BatchId Jeeves_StrVarChar16 = null, + @c_OrderType smallint = null, + @c_Run_Type char(1) = null, + @c_TemplateRowID int = null, + @c_Edit Jeeves_StrVarCharMax = null, + @c_EditExt Jeeves_StrVarCharMax = null, + @c_Saljare Jeeves_StrVarChar32 = null, + @c_Lagstalle Jeeves_StrVarChar10 = null, + @c_OverrideCreditLimit char(1) = 0, + @o_OrderNumber int = null output + +as + +set nocount on +--set ansi_warnings o f f +--set concat_null_yields_null o f f +--set ansi_nulls o f f +--set ansi_padding o f f + +declare @withPriceCalc char(1) +select @withPriceCalc = 'Y' + +declare @oh_OrdStat smallint, + @orp_OrdRadSt smallint, + @orp_OrdRadNr int, + @orp_vbordradsum money, + @orp_vb_prisinklmoms Jeeves_Amount, + @orp_Vb_Pris Jeeves_Amount, + @wr Jeeves_StrVarChar256, + @x int, + @dbe int, + @dbc int, + @dbp int, + @Enter_TranCount as int, + @NewLine as nvarchar(2), + @PgmId Jeeves_StrVarChar256, + @salj_saljare Jeeves_StrVarChar32, + @kus_kundrabatt float, + @kus_rabklass smallint, + @kus_Kreditsparr char(1), + @kus_kundsaldo money, + @kus_ordsum money, + @kus_kundkredlim money, + @kus_momskod smallint, + @kus_offnr Jeeves_StrVarChar10, + @ar_artkundrabkod char(1), + @ar_artrabklass smallint, + @ar_momskod smallint, + @sy1_PrisListaInklMoms char(1), + @sy1_momskod smallint, + @oh_vbordsum money, + @oh_ordsum money, + @Today datetime, + @Momssats float, + @CompanyNo Jeeves_StrVarChar20, + @ContactNo int, + @prislista int, + @lagstalle Jeeves_StrVarChar10, + @Saljare Jeeves_StrVarChar32, + @ar_artfsgforp smallint, + @ar_palaggdelforp float, + @ValKurs ztCurrencyRate, + @valkod Jeeves_StrVarChar4, + @Samfaktutskr char(1), + @Allowpurchase char(1), + @PCode int, + @SALES048 smallint, + @KostBar Jeeves_StrVarChar8, + @KostStalleKod Jeeves_StrVarChar8, + @K4 Jeeves_StrVarChar8, + @K5 Jeeves_StrVarChar8, + @K6 Jeeves_StrVarChar8, + @K7 Jeeves_StrVarChar8, + @AutoRegel Jeeves_StrVarChar4; + +exec Jeeves_Esales_GetUserInfo + @c_IntrnCoNo = @c_ForetagKod, + @c_webUserName = @c_webUserName, + @c_CompanyNo = @c_CompanyNo, + @o_LangID = @c_LangID output, + @o_CompanyNo = @CompanyNo output, + @o_ContactNo = @ContactNo output, + @o_Lagstalle = @Lagstalle output, + @o_Prislista = @Prislista output, + @o_Saljare = @Saljare output, + @o_Valkod = @Valkod output, + @o_ValKurs = @Valkurs output + +if @c_Saljare is null select @c_Saljare = @Saljare + +select @Today = getdate() + +---Get customer discount, pricelist, credit info from table kus +select @kus_kundrabatt = kundrabatt, + @kus_rabklass = rabklass, + @kus_Kreditsparr = kreditsparr, + @kus_kundsaldo = kus.kundsaldo, + @kus_ordsum = kus.ordsum, + @kus_kundkredlim = kus.kundkredlim, + @kus_momskod = kus.momskod, + @kus_offnr = offnr, + @Samfaktutskr = samfaktutskr + from kus + where + ftgnr = @CompanyNo and + foretagkod = @c_ForetagKod + +--If customer credit is blocked then abort +if @kus_kreditsparr = '1' begin + exec Jeeves_GT @wr output,@c_ForetagKod,@c_LangID,1344,'Kunden är kreditspärrad' + EXECUTE Jeeves_RaisError 21001, @wr + return -1344 +end + +--Assign from sy1 +select @sy1_PrisListaInklMoms = isnull(prislistainklmoms,0), + @sy1_momskod = momskod + from sy1 + where + sy1.foretagkod = @c_ForetagKod + +select @Enter_TranCount = @@TranCount, + @NewLine=char(13)+char(10), + @dbp=@@ProcId + +---Calc VAT------------------------------------------------------ +if @kus_momskod = 0 begin + select @Momssats = 0 +end +else begin + if @ar_momskod is null select @ar_momskod = isnull(@kus_momskod,@sy1_momskod) + select @Momssats = x1.momssats + from x1 + where + momskod = @ar_momskod +end + +if @sy1_PrisListaInklMoms in ('1','3') begin + select @orp_vb_prisinklmoms = @orp_Vb_Pris + select @orp_vb_pris = @orp_vb_pris/(1.0+(@MomsSats/100.0)) +end +else begin + select @orp_vb_prisinklmoms = @orp_vb_pris * (1.0+(@Momssats/100.0)) +end +--select vbpris2=@orp_vb_pris,prisin=@orp_vb_prisinklmoms, moms=@Momssats, kmoms=@kus_momskod,armoms= @ar_momskod +----------------------------------------------------------- + +---Check if creditlimit is reached +if @kus_kundkredlim > 0 and @c_OverrideCreditLimit = 0 begin + if (isnull(@oh_ordsum,0) + @kus_kundsaldo + @kus_ordsum) > @kus_kundkredlim begin + exec Jeeves_GT @wr output,@c_ForetagKod,@c_LangID,3679,'Kundens kreditgräns är överskriden' + EXECUTE Jeeves_RaisError 21001, @wr + return -3679 + end +end + +--Always use parameter if provided. +if @c_Lagstalle is null select @c_Lagstalle = @Lagstalle + +select @SALES048 = dbo.Jeeves_FN_GetParam(@c_ForetagKod, 'SALES048', 'N',null) + +--Get cost codes from sales person or location (the same way as UF_Oh_Get_InternKonton) + +if @SALES048 = 1 begin + --Get settings from inventory location + + select + @KostStalleKod = KostStalleKod, + @KostBar = KostBar, + @K4 = K4, + @K5 = K5, + @K6 = K6, + @K7 = K7, + @AutoRegel = AutoRegelForskott + from xb with (NoLock) where + ForetagKod = @c_ForetagKod + and LagStalle = @c_LagStalle; + +end else if @SALES048 = 2 begin + --Get settings from sales person + if @Saljare is not null begin + select + @KostStalleKod = KostStalleKod, + @KostBar = KostBar, + @K4 = K4, + @K5 = K5, + @K6 = K6, + @K7 = K7, + @AutoRegel = AutoRegelForskott + from salj with (NoLock) where + ForetagKod = @c_ForetagKod + and Saljare=@Saljare; + end +end else if @SALES048 = 3 begin + -- Try sales person first and then and add values + -- from location is not provided + + if @Saljare is not null begin + select + @KostStalleKod = KostStalleKod, + @KostBar = KostBar, + @K4 = K4, + @K5 = K5, + @K6 = K6, + @K7 = K7, + @AutoRegel = AutoRegelForskott + from salj with (NoLock) where + ForetagKod = @c_ForetagKod + and Saljare=@Saljare; + end + + select + @KostStalleKod = ISNULL(@KostStalleKod, KostStalleKod), + @KostBar = ISNULL(@KostBar, KostBar), + @K4 = ISNULL(@K4, K4), + @K5 = ISNULL(@K5, k5), + @K6 = ISNULL(@K6, K6), + @K7 = ISNULL(@K7, K7), + @AutoRegel = ISNULL(@AutoRegel, AutoRegelForskott) + from xb with (NoLock) where + ForetagKod = @c_ForetagKod + and LagStalle = @c_LagStalle; + +end + +begin tran + +select @oh_vbordsum = 0 +select @oh_ordsum = 0 + +select @oh_OrdStat = Convert(int,dbo.Jeeves_FN_GetParam(@c_ForetagKod,'webapp031','N',null)) +if @oh_ordstat is null select @oh_OrdStat = Convert(int,dbo.Jeeves_FN_GetParam(@c_ForetagKod,'WEBAPP003','N',null)) + +select @c_OrderType = isnull(@c_OrderType, convert(int,dbo.Jeeves_FN_GetParam(@c_ForetagKod,'WEBAPP008','N','1'))) + +if @samfaktutskr = '1' begin + select @samfaktutskr = samfaktutskr from x6 + where x6.ordtyp = @c_OrderType and x6.foretagkod = @c_ForetagKod +end + +if (@oh_OrdStat is null) or (@oh_OrdStat > 10) select @oh_OrdStat = 10 + +execute @x = Jeeves_Init_Insert_oh + @c_ForetagKod = @c_ForetagKod, + @c_OrderNr = @o_OrderNumber output, + @c_OrderNrAlfa = 'Internet', + @c_OrdStat = @oh_ordstat, + @c_PersSign = @c_PersSign, + @c_FtgNr = @CompanyNo, + @c_Ordtyp = @c_OrderType, + @c_Lagstalle = @c_Lagstalle, + @c_Saljare = @c_Saljare, + @c_KundRabatt = @kus_kundrabatt, + @c_ftgkontaktnr = @ContactNo, + @c_vbordsum = @oh_vbordsum, + @c_rowcreatedby = @c_perssign, + @c_rowcreateddt = @Today, + @c_Valkod = @valkod, + @c_Valkurs = @Valkurs, + @c_Samfaktutskr = @samfaktutskr, + @c_KostBar = @KostBar, + @c_KostStalleKod = @KostStalleKod, + @c_K4 = @K4, + @c_K5 = @K5, + @c_K6 = @K6, + @c_K7 = @K7, + @c_AutoRegel = @AutoRegel; + +if (@@Error <> 0) or (@x < 0) begin + EXECUTE Jeeves_RaisError 21001, 'Error when creating order header' + rollback tran + return -100 +end + +select @orp_ordradst = dbo.Jeeves_FN_GetParam (@c_ForetagKod,'WEBAPP018','N','10') +if @oh_OrdStat < @orp_ordradst select @orp_ordradst = @oh_OrdStat + +update oh set + oh.ordsum = @oh_ordsum, + oh.vbordsum = @oh_vbordsum +where + oh.ordernr = @o_OrderNumber and + oh.foretagkod = @c_ForetagKod + +if @@Error <> 0 begin + rollback tran + return -100 +end + +commit tran + +if @c_Run_Type = 'R' exec Jeeves_Esales_GetOrp @c_ForetagKod,@c_webUserName,@c_LangID,@o_OrderNumber + +return +GO +PRINT 'End Jeeves_Esales_CreateOrder' +GO +PRINT 'End Jeeves_Esales_CreateOrder' +GO + diff --git a/jeeves_sp_updates/Jeeves_Init_Insert_oh.spr b/jeeves_sp_updates/Jeeves_Init_Insert_oh.spr new file mode 100644 index 0000000..9ed951a --- /dev/null +++ b/jeeves_sp_updates/Jeeves_Init_Insert_oh.spr @@ -0,0 +1,3409 @@ +set nocount on +go +print 'Begin Jeeves_Init_Insert_oh' +go +print 'Begin Jeeves_Init_Insert_oh' +go +--if exists (select 1 from SysObjects where Name='Jeeves_Init_Insert_oh') drop procedure Jeeves_Init_Insert_oh +if not exists (select 1 from sys.objects where Name='Jeeves_Init_Insert_oh') execute ( 'create procedure Jeeves_Init_Insert_oh as return 0' ) +go +if object_id( N'Jeeves_UsrDefModSqlObject' ) is not NULL and + object_id( N'UsrDefModSqlObject' ) is not NULL +begin + if exists ( select 1 from UsrDefModSqlObject where DB_Object_Name = 'Jeeves_Init_Insert_oh' and UsrDefMod_type_SQLObject = 'MERGE' ) begin + declare @Time DateTime = GetDate(); + print '--'; + print 'Extracts customer own modifications from the object ''Jeeves_Init_Insert_oh''.'; + declare @dbe integer; + begin try + execute @dbe = Jeeves_UsrDefModSqlObject 'Jeeves_Init_Insert_oh', NULL, 'Extract', NULL, NULL, NULL, NULL, NULL, NULL, 'SQL_SCRIPT', 'X'; + if @dbe <> 0 begin + print '----'; + print 'Return error from procedure ''Jeeves_UsrDefModSqlObject'' when extracting customer own modifications from the object ''Jeeves_Init_Insert_oh''.'; + print 'Error_Number = ' + cast( @dbe as varchar(22) ); + print '----'; + end; + end try + begin catch + print '----'; + print 'Catch error from ''Jeeves_UsrDefModSqlObject'' when extracting customer own modifications from the object ''Jeeves_Init_Insert_oh''.'; + print 'Error_Number = ' + cast( Error_Number() as varchar(22) ); + print Error_Message(); + print '----'; + end catch; + print 'Execution time: '+ltrim( rtrim( str( cast( DateDiff( MILLISECOND, @Time, GetDate() ) as decimal(12,3) ) / 1000, 12, 3) ) ) + ' seconds.'; + print '--'; + end; +end; +go +alter procedure Jeeves_Init_Insert_oh +-- +-- Procedure Jeeves_Init_Insert_oh created 2015-11-05 08:34:37 by procedure JVSSTODS12.zero_r01.JEEVES_Generate_Procedure_Insert, IntrnCoNo 0; Jeeves version X (14), Sign = kp +-- + @c_AcceptCodePayment Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_AdressLappTyp smallint = NULL OUTPUT + ,@c_AdresslappUtskrDat DateTime = NULL OUTPUT + ,@c_Aktiv smallint = NULL OUTPUT + ,@c_AnmodanMark Jeeves_Boolean = NULL OUTPUT + ,@c_AntalEURPall smallint = NULL OUTPUT + ,@c_AntalKolli smallint = NULL OUTPUT + ,@c_AntalOvrPall smallint = NULL OUTPUT + ,@c_AntalRader int = NULL OUTPUT + ,@c_AoNr Jeeves_MONo = NULL OUTPUT + ,@c_AoNrAlfa Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArrivalAtCustomerDate DateTime = NULL OUTPUT + ,@c_ArtBtotVikt decimal(18,8) = NULL OUTPUT + ,@c_ArtSerieNrFrom Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtSerieNrTom Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtVikt decimal(18,8) = NULL OUTPUT + ,@c_ArtVolym decimal(18,8) = NULL OUTPUT + ,@c_AttBetalaBelopp money = NULL OUTPUT + ,@c_AutoFrislappas Jeeves_Boolean = NULL OUTPUT + ,@c_AutoMatchedWith Jeeves_InvNo = NULL OUTPUT + ,@c_AutoRegel Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_AutoRegelForskott Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_BetKod Jeeves_StrVarChar2 = NULL OUTPUT + ,@c_BetKodForskott Jeeves_StrVarChar2 = NULL OUTPUT + ,@c_BookQtyNotOnPickListFlag Jeeves_Boolean = NULL OUTPUT + ,@c_BristKontrolleradDatum DateTime = NULL OUTPUT + ,@c_BristKontrolleradStatus smallint = NULL OUTPUT + ,@c_BristStatusLagerUtlev smallint = NULL OUTPUT + ,@c_BristStatusPlaneringBegLevDat smallint = NULL OUTPUT + ,@c_BristStatusPlaneringBerLevDat smallint = NULL OUTPUT + ,@c_BruttoVikt float = NULL OUTPUT + ,@c_BusinessUnit Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_Cardpaymentcancelled Jeeves_Boolean = NULL OUTPUT + ,@c_ClientSessionGUID_Str ztUniqueIdentifier = NULL OUTPUT + ,@c_CodeFixedDeparture Jeeves_Boolean = NULL OUTPUT + ,@c_CostsExclVatBCU money = NULL OUTPUT + ,@c_CostsExclVatCurr money = NULL OUTPUT + ,@c_CostsInclVatBCU money = NULL OUTPUT + ,@c_CostsInclVatCurr money = NULL OUTPUT + ,@c_CreatedByDbObject Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_CreditCardNumber Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_DelBokningTillaten smallint = NULL OUTPUT + ,@c_DelivToBusinessUnit Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_DelivToPONo int = NULL OUTPUT + ,@c_DelLevTillaten smallint = NULL OUTPUT + ,@c_DiffDgrVerklLevDatDagDat int = NULL OUTPUT + ,@c_DirektLeverans Jeeves_Boolean = NULL OUTPUT + ,@c_DirektUttag Jeeves_Boolean = NULL OUTPUT + ,@c_DistrKod Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_DivisKod Jeeves_StrVarChar3 = NULL OUTPUT + ,@c_dtwe_JEEVES_Oh_OrderVarde DateTime = NULL OUTPUT + ,@c_dtwu_JEEVES_Oh_OrderVarde DateTime = NULL OUTPUT + ,@c_ebfilsent Jeeves_Boolean = NULL OUTPUT + ,@c_ebfilsentdt DateTime = NULL OUTPUT + ,@c_Edit Jeeves_StrVarCharMax = NULL OUTPUT + ,@c_Editext Jeeves_StrVarCharMax = NULL OUTPUT + ,@c_EditPlBLOB Jeeves_StrVarCharMax = NULL OUTPUT + ,@c_EmballageFakt Jeeves_Boolean = NULL OUTPUT + ,@c_EmballageKostnad money = NULL OUTPUT + ,@c_EmballageKostnInland money = NULL OUTPUT + ,@c_EstimatorOffNr Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_EstimatorOrder Jeeves_Boolean = NULL OUTPUT + ,@c_Exec_Time_Log_String Jeeves_StrVarChar512 = NULL OUTPUT + ,@c_ExecutionTime float = NULL OUTPUT + ,@c_ExpAvgKd Jeeves_Boolean = NULL OUTPUT + ,@c_ExpeditionKostnad money = NULL OUTPUT + ,@c_ExpressKod Jeeves_Boolean = NULL OUTPUT + ,@c_ExtorderNr Jeeves_StrVarChar17 = NULL OUTPUT + ,@c_ExtOrdTyp smallint = NULL OUTPUT + ,@c_FaktAvPersSign Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_FaktDat DateTime = NULL OUTPUT + ,@c_FaktDateTime DateTime = NULL OUTPUT + ,@c_FaktDatKorr DateTime = NULL OUTPUT + ,@c_FaktDatOrg DateTime = NULL OUTPUT + ,@c_FaktFfDat DateTime = NULL OUTPUT + ,@c_FaktNr Jeeves_InvNo = NULL OUTPUT + ,@c_FaktNr_OCR Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_FaktNrAConto Jeeves_InvNo = NULL OUTPUT + ,@c_FaktNrForskott Jeeves_InvNo = NULL OUTPUT + ,@c_FaktNrKOrr Jeeves_InvNo = NULL OUTPUT + ,@c_FaktNrOrg Jeeves_InvNo = NULL OUTPUT + ,@c_FaktSlutLevOrder Jeeves_Boolean = NULL OUTPUT + ,@c_FaktTB money = NULL OUTPUT + ,@c_FaktTbInklMoms money = NULL OUTPUT + ,@c_FakturerareKod smallint = NULL OUTPUT + ,@c_FfhNr int = NULL OUTPUT + ,@c_FiscalPrinterStatusDate DateTime = NULL OUTPUT + ,@c_FlowDummyUniqueId ztUniqueIdentifier = NULL OUTPUT + ,@c_ForetagKod smallint = NULL OUTPUT + ,@c_ForsakringFakt Jeeves_Boolean = NULL OUTPUT + ,@c_ForsakringsKostnad money = NULL OUTPUT + ,@c_ForsakrKostnInland money = NULL OUTPUT + ,@c_ForsakrKostnProc decimal(18,8) = NULL OUTPUT + ,@c_ForskottBelopp money = NULL OUTPUT + ,@c_ForskottBeloppAck money = NULL OUTPUT + ,@c_ForskottMottagetDatum DateTime = NULL OUTPUT + ,@c_ForskottOrdKopplTyp smallint = NULL OUTPUT + ,@c_FraktAvgKd Jeeves_Boolean = NULL OUTPUT + ,@c_FrakthandlKod Jeeves_Boolean = NULL OUTPUT + ,@c_FraktKostnBer money = NULL OUTPUT + ,@c_FraktKostnDeb money = NULL OUTPUT + ,@c_FraktKostnInland money = NULL OUTPUT + ,@c_FraktKostnMan money = NULL OUTPUT + ,@c_FraktSedelTyp smallint = NULL OUTPUT + ,@c_FraktsedelUtskrDat DateTime = NULL OUTPUT + ,@c_FraktSkrymmeKod Jeeves_Boolean = NULL OUTPUT + ,@c_FraktVikt float = NULL OUTPUT + ,@c_FriSlappDatTid DateTime = NULL OUTPUT + ,@c_FsKd Jeeves_Boolean = NULL OUTPUT + ,@c_FSUtskrDat DateTime = NULL OUTPUT + ,@c_FtgKontaktNr smallint = NULL OUTPUT + ,@c_FtgNr Jeeves_CompanyNo = NULL OUTPUT + ,@c_ftgperson Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_FtgPostnr Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_Giltighetstid Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_GiltigTomDatum DateTime = NULL OUTPUT + ,@c_GodsMarke Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_GodsMarke1 Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_GodsMarke2 Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_GodsMarke3 Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_GodsMarke4 Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_Handel3Part Jeeves_Boolean = NULL OUTPUT + ,@c_HandlingChargeProcessed Jeeves_Boolean = NULL OUTPUT + ,@c_HideOrder Jeeves_Boolean = NULL OUTPUT + ,@c_ICTDelivFromOrderNo Jeeves_SONo = NULL OUTPUT + ,@c_ICTDelivToOrderNo Jeeves_SONo = NULL OUTPUT + ,@c_ICTDelivToPONo Jeeves_PONo = NULL OUTPUT + ,@c_ICTDispatchMethod smallint = NULL OUTPUT + ,@c_ICTDispatchTerm smallint = NULL OUTPUT + ,@c_ICTRuleNumber smallint = NULL OUTPUT + ,@c_IdForOrderShuffle Jeeves_StrVarChar20 = NULL OUTPUT + ,@c_InbSlag Jeeves_StrVarChar3 = NULL OUTPUT + ,@c_Ins_DT_MilliSecond DateTime = NULL OUTPUT + ,@c_IntrnCoNoOrigin smallint = NULL OUTPUT + ,@c_IntStatTransTyp smallint = NULL OUTPUT + ,@c_InventoryLocWMS Jeeves_Boolean = NULL OUTPUT + ,@c_InvoiceChange Jeeves_Boolean = NULL OUTPUT + ,@c_InvoicedUTCDateTime DateTime = NULL OUTPUT + ,@c_Jeeves_Init_Insert_Enter DateTime = NULL OUTPUT + ,@c_Jeeves_Init_Insert_PreIns DateTime = NULL OUTPUT + ,@c_K4 Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_K5 Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_K6 Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_K7 Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_KalkylPrisFaktura Jeeves_StrVarChar = NULL OUTPUT + ,@c_kampnr int = NULL OUTPUT + ,@c_KBarAvsandandeEnhet Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_KodEjFakturera Jeeves_Boolean = NULL OUTPUT + ,@c_KopieradFranFaktNr Jeeves_InvNo = NULL OUTPUT + ,@c_KopieradFranOrderNr Jeeves_SONo = NULL OUTPUT + ,@c_KopieradTillOrderNr Jeeves_SONo = NULL OUTPUT + ,@c_Kortspecifikinfo Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_Kortstatus Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_KortTransaktionsTyp Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_KostBar Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_KostStalleKod Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_KreditOrder Jeeves_Boolean = NULL OUTPUT + ,@c_KreditSparrStatus smallint = NULL OUTPUT + ,@c_KstAvsandandeEnhet Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_Kund_PlKod Jeeves_StrVarChar = NULL OUTPUT + ,@c_KundBestDat DateTime = NULL OUTPUT + ,@c_KundBestNamn Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_KundBestNr Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_KundBetalareNr Jeeves_CompanyNo = NULL OUTPUT + ,@c_KundFaktAdr Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_KundFraktBetalareNr Jeeves_CompanyNo = NULL OUTPUT + ,@c_KundFraktDeb Jeeves_Boolean = NULL OUTPUT + ,@c_KundKategoriKod smallint = NULL OUTPUT + ,@c_KundLevSattKod smallint = NULL OUTPUT + ,@c_KundPrisInklMoms Jeeves_Boolean = NULL OUTPUT + ,@c_KundRabatt decimal(18,8) = NULL OUTPUT + ,@c_KundRabattKod Jeeves_Boolean = NULL OUTPUT + ,@c_KundRabattKod0 Jeeves_Boolean = NULL OUTPUT + ,@c_KundRabattKod1 Jeeves_Boolean = NULL OUTPUT + ,@c_KundRabattKod2 Jeeves_Boolean = NULL OUTPUT + ,@c_KundRabattMax float = NULL OUTPUT + ,@c_KundRabattMin float = NULL OUTPUT + ,@c_KundRef2 Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_KundSpecTextBe Jeeves_Boolean = NULL OUTPUT + ,@c_KundSpecTextFa Jeeves_Boolean = NULL OUTPUT + ,@c_KundSpecTextFs Jeeves_Boolean = NULL OUTPUT + ,@c_KundSpecTextOe Jeeves_Boolean = NULL OUTPUT + ,@c_KundSpecTextPl Jeeves_Boolean = NULL OUTPUT + ,@c_KundSpecTextTo Jeeves_Boolean = NULL OUTPUT + ,@c_KundStafflKod Jeeves_Boolean = NULL OUTPUT + ,@c_KundTextKod Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_LagerFlyttning Jeeves_Boolean = NULL OUTPUT + ,@c_LagPlats Jeeves_StrVarChar20 = NULL OUTPUT + ,@c_LagStalle Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_LandsKod Jeeves_StrVarChar3 = NULL OUTPUT + ,@c_LeadTimeMatrixBookingFlag Jeeves_Boolean = NULL OUTPUT + ,@c_LegitimationNumber Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_LevArtBtotVikt decimal(18,8) = NULL OUTPUT + ,@c_LevArtVikt decimal(18,8) = NULL OUTPUT + ,@c_LevArtVolym decimal(18,8) = NULL OUTPUT + ,@c_LevAviseringKod Jeeves_Boolean = NULL OUTPUT + ,@c_LevForeTolv Jeeves_Boolean = NULL OUTPUT + ,@c_LevHandlKod Jeeves_Boolean = NULL OUTPUT + ,@c_LevSattKod smallint = NULL OUTPUT + ,@c_LevVillkKod smallint = NULL OUTPUT + ,@c_LfExcl Jeeves_Boolean = NULL OUTPUT + ,@c_ManReAvstDT DateTime = NULL OUTPUT + ,@c_ManReAvstPerDen DateTime = NULL OUTPUT + ,@c_ManReAvstPersSign Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_MarkKundsMomsStyr Jeeves_Boolean = NULL OUTPUT + ,@c_MarkNyttOEUtskr Jeeves_Boolean = NULL OUTPUT + ,@c_MarkOrderUniktLager Jeeves_Boolean = NULL OUTPUT + ,@c_MomsKod smallint = NULL OUTPUT + ,@c_MomsKodForskott smallint = NULL OUTPUT + ,@c_MottagetBelopp money = NULL OUTPUT + ,@c_MRP_InventoryTransferFlag Jeeves_Boolean = NULL OUTPUT + ,@c_No_Trigger_Exec smallint = NULL OUTPUT + ,@c_OeKod Jeeves_Boolean = NULL OUTPUT + ,@c_OeStatusEdi smallint = NULL OUTPUT + ,@c_OEUtskrDat DateTime = NULL OUTPUT + ,@c_OffertRadNrToOrdRadNr Jeeves_Boolean = NULL OUTPUT + ,@c_OffNr Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_OhFaktTB money = NULL OUTPUT + ,@c_OhFaktTBInklMoms money = NULL OUTPUT + ,@c_OhOrdBerednDatBase DateTime = NULL OUTPUT + ,@c_OhOrdBerLevDatBase DateTime = NULL OUTPUT + ,@c_OhOrdKostnad money = NULL OUTPUT + ,@c_OhOrdKostnadInklMoms money = NULL OUTPUT + ,@c_OhOrdSum money = NULL OUTPUT + ,@c_OhOrdSumInklMoms money = NULL OUTPUT + ,@c_OhVbOrdSum money = NULL OUTPUT + ,@c_OhVbOrdSumInklMoms money = NULL OUTPUT + ,@c_OIngSkapad Jeeves_Boolean = NULL OUTPUT + ,@c_OkAttPlockaSattDatum DateTime = NULL OUTPUT + ,@c_OkAttPlockaStatus smallint = NULL OUTPUT + ,@c_ole1 Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_ole2 Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_OrdBegLevDat DateTime = NULL OUTPUT + ,@c_OrdBerednDat DateTime = NULL OUTPUT + ,@c_OrdBerLevDat DateTime = NULL OUTPUT + ,@c_OrdBerLevTid ztTime = NULL OUTPUT + ,@c_OrdBeskr Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_OrdBokningsStatus smallint = NULL OUTPUT + ,@c_OrdDatum DateTime = NULL OUTPUT + ,@c_OrderAvslutad Jeeves_Boolean = NULL OUTPUT + ,@c_OrderBeloppIntFsg money = NULL OUTPUT + ,@c_OrderBeloppIntKop money = NULL OUTPUT + ,@c_OrderCostCurrency Jeeves_Boolean = NULL OUTPUT + ,@c_OrderEnding Jeeves_Boolean = NULL OUTPUT + ,@c_OrderKopplKod smallint = NULL OUTPUT + ,@c_OrderKostnadIntFsg money = NULL OUTPUT + ,@c_OrderKostnadIntKop money = NULL OUTPUT + ,@c_OrderNr Jeeves_SONo = NULL OUTPUT + ,@c_OrderNrAlfa Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_OrderNrKoppl Jeeves_SONo = NULL OUTPUT + ,@c_OrderNrKorr Jeeves_SONo = NULL OUTPUT + ,@c_OrderNrOffert Jeeves_SONo = NULL OUTPUT + ,@c_OrderNrOrg Jeeves_SONo = NULL OUTPUT + ,@c_OrderNrServ Jeeves_SONo = NULL OUTPUT + ,@c_OrderTBIntFsg money = NULL OUTPUT + ,@c_OrderTBIntKop money = NULL OUTPUT + ,@c_OrderTextKod Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_OrderTGIntFsg decimal(18,8) = NULL OUTPUT + ,@c_OrderTGIntKop decimal(18,8) = NULL OUTPUT + ,@c_OrdFoljesedelsNr int = NULL OUTPUT + ,@c_OrdKostnad money = NULL OUTPUT + ,@c_OrdKostnadInklMoms money = NULL OUTPUT + ,@c_OrdLevAdr1 Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_OrdLevAdr2 Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_OrdLevAdr3 Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_OrdLevAdr4 Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_OrdLevAdrBstOrt Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_OrdLevAdrLandsKod Jeeves_StrVarChar3 = NULL OUTPUT + ,@c_OrdLevAdrProvinceCode Jeeves_StrVarChar5 = NULL OUTPUT + ,@c_OrdLevAnvisnRad1 Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_OrdLevAnvisnRad2 Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_OrdLevDat DateTime = NULL OUTPUT + ,@c_OrdLevDatOrg DateTime = NULL OUTPUT + ,@c_OrdLevNr smallint = NULL OUTPUT + ,@c_OrdLevPlats1 Jeeves_CompanyNo = NULL OUTPUT + ,@c_OrdLovLevDat DateTime = NULL OUTPUT + ,@c_OrdRabatt decimal(18,8) = NULL OUTPUT + ,@c_OrdRestNot Jeeves_Boolean = NULL OUTPUT + ,@c_OrdRestNr smallint = NULL OUTPUT + ,@c_OrdStat smallint = NULL OUTPUT + ,@c_OrdSum money = NULL OUTPUT + ,@c_OrdSumExclCredChk money = NULL OUTPUT + ,@c_OrdSumExklMoms money = NULL OUTPUT + ,@c_OrdSumFraktBer money = NULL OUTPUT + ,@c_OrdSumInklMoms money = NULL OUTPUT + ,@c_OrdSumInklMomsExclCredChk money = NULL OUTPUT + ,@c_OrdSumRabGr money = NULL OUTPUT + ,@c_OrdSumReg money = NULL OUTPUT + ,@c_OrdSumValReg money = NULL OUTPUT + ,@c_OrdTranspDat DateTime = NULL OUTPUT + ,@c_OrdTyp smallint = NULL OUTPUT + ,@c_OrdVerklLevDat DateTime = NULL OUTPUT + ,@c_OULager_Auto_Utplock Jeeves_Boolean = NULL OUTPUT + ,@c_OULager_Leverera_Allt Jeeves_Boolean = NULL OUTPUT + ,@c_OvrFaktAvgift1 money = NULL OUTPUT + ,@c_OvrFaktAvgift10 money = NULL OUTPUT + ,@c_OvrFaktAvgift2 money = NULL OUTPUT + ,@c_OvrFaktAvgift3 money = NULL OUTPUT + ,@c_OvrFaktAvgift4 money = NULL OUTPUT + ,@c_OvrFaktAvgift5 money = NULL OUTPUT + ,@c_OvrFaktAvgift6 money = NULL OUTPUT + ,@c_OvrFaktAvgift7 money = NULL OUTPUT + ,@c_OvrFaktAvgift8 money = NULL OUTPUT + ,@c_OvrFaktAvgift9 money = NULL OUTPUT + ,@c_OvrFaktKostn1Fakt Jeeves_Boolean = NULL OUTPUT + ,@c_OvrFaktKostn2Fakt Jeeves_Boolean = NULL OUTPUT + ,@c_OvrFaktKostnad1 money = NULL OUTPUT + ,@c_OvrFaktKostnad2 money = NULL OUTPUT + ,@c_OvrFaktKostnInland1 money = NULL OUTPUT + ,@c_OvrFaktKostnInland2 money = NULL OUTPUT + ,@c_PackagingDate DateTime = NULL OUTPUT + ,@c_PackareKod smallint = NULL OUTPUT + ,@c_PackSedelUtskrDat DateTime = NULL OUTPUT + ,@c_PaymenttransID Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_PdmCount int = NULL OUTPUT + ,@c_PersSign Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_PickingLockedByUser Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_PlockIndexOrder int = NULL OUTPUT + ,@c_PlockJnrOrder int = NULL OUTPUT + ,@c_PLUtskrDat DateTime = NULL OUTPUT + ,@c_PrisJustOrder Jeeves_Boolean = NULL OUTPUT + ,@c_PrisJustOrderKost Jeeves_Boolean = NULL OUTPUT + ,@c_PrisLista int = NULL OUTPUT + ,@c_ProjCode Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_ProspektId int = NULL OUTPUT + ,@c_PVMSeasonId Jeeves_StrVarChar15 = NULL OUTPUT + ,@c_QQ_Ins_Trg_Start DateTime = NULL OUTPUT + ,@c_RabKlass smallint = NULL OUTPUT + ,@c_Referensnummer Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_RegDat DateTime = NULL OUTPUT + ,@c_ReplicateRecord smallint = NULL OUTPUT + ,@c_RestArtBtotVikt decimal(18,8) = NULL OUTPUT + ,@c_RestArtVikt decimal(18,8) = NULL OUTPUT + ,@c_RestArtVolym decimal(18,8) = NULL OUTPUT + ,@c_RestBehKod smallint = NULL OUTPUT + ,@c_RowCreatedBy Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_RowCreatedDt DateTime = NULL OUTPUT + ,@c_RowCreatedUTCDT DateTime = NULL OUTPUT + ,@c_RowUpdatedBy Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_RowUpdatedCols Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_RowUpdatedDt DateTime = NULL OUTPUT + ,@c_RowUpdatedUTCDT DateTime = NULL OUTPUT + ,@c_RptUnitNo smallint = NULL OUTPUT + ,@c_RU_Account Jeeves_StrVarChar20 = NULL OUTPUT + ,@c_SalesTaxHandling Jeeves_Boolean = NULL OUTPUT + ,@c_SalesType Jeeves_StrVarChar3 = NULL OUTPUT + ,@c_Saljare Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_SamFaktUtskr Jeeves_Boolean = NULL OUTPUT + ,@c_SamInKopMark Jeeves_Boolean = NULL OUTPUT + ,@c_SendEdi Jeeves_Boolean = NULL OUTPUT + ,@c_SendEdiDT DateTime = NULL OUTPUT + ,@c_ShuffleOrder Jeeves_Boolean = NULL OUTPUT + ,@c_SkrivUtskSk Jeeves_Boolean = NULL OUTPUT + ,@c_SlutKundNamn1 Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_SlutKundNamn2 Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_SprakKod smallint = NULL OUTPUT + ,@c_SQLCmd2EnterTrg int = NULL OUTPUT + ,@c_StockReplenishment Jeeves_Boolean = NULL OUTPUT + ,@c_TA_AmtCOD money = NULL OUTPUT + ,@c_TA_ConsNo Jeeves_StrVarChar20 = NULL OUTPUT + ,@c_TA_CustomerMessage Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_TA_Edit Jeeves_StrVarCharMax = NULL OUTPUT + ,@c_TA_FaxNotifiedNo Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_TA_GANno Jeeves_StrVarChar20 = NULL OUTPUT + ,@c_TA_IntAutoNo smallint = NULL OUTPUT + ,@c_TA_Loadmeter float = NULL OUTPUT + ,@c_TA_MailNotified Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_TA_PhonNotifiedNo Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_TA_SMSNotifiedNo Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_TA_TemplKompCd Jeeves_StrVarChar = NULL OUTPUT + ,@c_TaxAreaCode1 Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_TaxAreaCode2 Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_TaxAreaCode3 Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_TaxAreaCode4 Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_TaxAreaCode5 Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_TaxAreaRate decimal(18,8) = NULL OUTPUT + ,@c_TaxCode smallint = NULL OUTPUT + ,@c_TerminsSakradOrder Jeeves_Boolean = NULL OUTPUT + ,@c_TextEfterDokRader Jeeves_Boolean = NULL OUTPUT + ,@c_TextKod Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_TillbakaBelopp money = NULL OUTPUT + ,@c_TillLagStalle Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_TimeZoneCode smallint = NULL OUTPUT + ,@c_TransitLeverans Jeeves_Boolean = NULL OUTPUT + ,@c_TransportorsKod Jeeves_StrVarChar17 = NULL OUTPUT + ,@c_UtskrBestDokSkaGoras Jeeves_Boolean = NULL OUTPUT + ,@c_UtskrBestDokUtskrDT DateTime = NULL OUTPUT + ,@c_UtskrDokLovSkaGoras Jeeves_Boolean = NULL OUTPUT + ,@c_UtskrDokLovUtskrDT DateTime = NULL OUTPUT + ,@c_ValDat DateTime = NULL OUTPUT + ,@c_ValKod Jeeves_StrVarChar3 = NULL OUTPUT + ,@c_ValKurs decimal(18,8) = NULL OUTPUT + ,@c_VaruProv Jeeves_StrVarChar = NULL OUTPUT + ,@c_VAT_Type smallint = NULL OUTPUT + ,@c_vb_EmballageKostnad money = NULL OUTPUT + ,@c_vb_EmballageKostnInland money = NULL OUTPUT + ,@c_vb_ExpeditionKostnad money = NULL OUTPUT + ,@c_vb_ForsakringsKostnad money = NULL OUTPUT + ,@c_vb_ForsakrKostnInland money = NULL OUTPUT + ,@c_vb_ForskottBelopp money = NULL OUTPUT + ,@c_vb_ForskottBeloppAck money = NULL OUTPUT + ,@c_vb_FraktKostnBer money = NULL OUTPUT + ,@c_vb_FraktKostnDeb money = NULL OUTPUT + ,@c_vb_FraktKostnInland money = NULL OUTPUT + ,@c_vb_FraktKostnMan money = NULL OUTPUT + ,@c_vb_OvrFaktAvgift1 money = NULL OUTPUT + ,@c_vb_OvrFaktAvgift10 money = NULL OUTPUT + ,@c_vb_OvrFaktAvgift2 money = NULL OUTPUT + ,@c_vb_OvrFaktAvgift3 money = NULL OUTPUT + ,@c_vb_OvrFaktAvgift4 money = NULL OUTPUT + ,@c_vb_OvrFaktAvgift5 money = NULL OUTPUT + ,@c_vb_OvrFaktAvgift6 money = NULL OUTPUT + ,@c_vb_OvrFaktAvgift7 money = NULL OUTPUT + ,@c_vb_OvrFaktAvgift8 money = NULL OUTPUT + ,@c_vb_OvrFaktAvgift9 money = NULL OUTPUT + ,@c_vb_OvrFaktKostnad1 money = NULL OUTPUT + ,@c_vb_OvrFaktKostnad2 money = NULL OUTPUT + ,@c_vb_OvrFaktKostnInland1 money = NULL OUTPUT + ,@c_vb_OvrFaktKostnInland2 money = NULL OUTPUT + ,@c_VbOrdSum money = NULL OUTPUT + ,@c_VbOrdSumExklMoms money = NULL OUTPUT + ,@c_VbOrdSumInklMoms money = NULL OUTPUT + ,@c_VbOrdSumRabGr money = NULL OUTPUT + ,@c_ViktSumOrder Jeeves_Boolean = NULL OUTPUT + ,@c_VolHeight smallint = NULL OUTPUT + ,@c_VolLength smallint = NULL OUTPUT + ,@c_Volume float = NULL OUTPUT + ,@c_VolWidth smallint = NULL OUTPUT + ,@c_VRef Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_webpublish varchar(1) = NULL OUTPUT + ,@c_WorkFaktNr Jeeves_InvNo = NULL OUTPUT + ,@DebugMsg Jeeves_StrVarChar10 = NULL --OUTPUT + ,@c_Logg_Exec_Time_String Jeeves_StrVarChar4000 = NULL OUTPUT + ,@c_Integer_NULL integer = NULL + ,@c_Varchar_NULL Jeeves_StrVarChar2048 = NULL + ,@c_Date_NULL DateTime = NULL + ,@c_AdjustMinutes2GetLocalTime integer = NULL + ,@c_zLanguage integer = NULL + +-- +-- + +as + +declare @Enter_TranCount integer +set @Enter_TranCount = @@TranCount + +set @c_Logg_Exec_Time_String=case when @c_Logg_Exec_Time_String is not null then @c_Logg_Exec_Time_String else '' end + + char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Enter oh, opt='+cast(@@Options as varchar(11)) +declare + @Jeeves_Init_Insert_Enter DateTime, + @Jeeves_Init_Insert_PreIns DateTime, + @Jeeves_Init_Insert_PostIns DateTime +set @Jeeves_Init_Insert_Enter = GetDate() + +/*BEGIN_SQLServerOnly*/ +set rowcount 0; +set nocount on; -- @@Options=512 + + +declare @Set_Options integer = 0; +-- +-- + +if @Set_Options = 0 begin -- DBLib + if @@Options & 16 = 16 set ansi_padding OFF; + --set FORCEPLAN OFF; + if @@Options & 4096 = 4096 set concat_null_yields_null OFF; + if @@Options & 8 = 8 set ansi_warnings OFF; + ---------set ansi_nulls OFF; + ---------set QUOTED_IDENTIFIER OFF; + if @@Options & 1024 = 1024 set ANSI_NULL_DFLT_ON OFF; + if @@Options & 2048 = 2048 set ANSI_NULL_DFLT_OFF OFF; + if @@Options & 64 = 64 set arithabort OFF; + if @@Options & 8192 = 8192 set numeric_roundabort OFF; +end; -- if @Set_Options = 0 begin + +if @Set_Options = 1 begin -- Filtered index (ODBC) + if @@Options & 32 = 0 set ansi_nulls ON; -- 32 ANSI_NULLS Controls NULL handling when using equality operators. + if @@Options & 16 = 0 set ansi_padding ON; -- 16 ANSI_PADDING Controls padding of fixed-length variables. + if @@Options & 8 = 0 set ansi_warnings ON; -- 8 ANSI_WARNINGS Controls truncation and NULL in aggregate warnings. + if @@Options & 64 = 0 set arithabort ON; -- 64 ARITHABORT Terminates a query when an overflow or divide-by-zero error occurs during query execution. + if @@Options & 4096 = 0 set concat_null_yields_null ON; -- 4096 CONCAT_NULL_YIELDS_NULL Returns NULL when concatenating a NULL value with a string. + if @@Options & 8192 = 8192 set numeric_roundabort OFF; -- OFF! OFF! 8192 NUMERIC_ROUNDABORT Generates an error when a loss of precision occurs in an expression. + if @@Options & 256 = 0 set QUOTED_IDENTIFIER ON; -- 256 QUOTED_IDENTIFIER Differentiates between single and double quotation marks when evaluating an expression. + --set FORCEPLAN OFF; + if @@Options & 1024 = 1024 set ANSI_NULL_DFLT_ON OFF; -- 1024 ANSI_NULL_DFLT_ON Alters the session's behavior to use ANSI compatibility for nullability. New columns defined without explicit nullability are defined to allow nulls. + if @@Options & 2048 = 2048 set ANSI_NULL_DFLT_OFF OFF; -- 2048 ANSI_NULL_DFLT_OFF Alters the session's behavior not to use ANSI compatibility for nullability. New columns defined without explicit nullability do not allow nulls. +end; -- if @Set_Options = 1 begin +/*END_SQLServerOnly*/ + +set @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', opt='+cast(@@Options as varchar(11)) + +if @c_ForetagKod is NULL + and @c_OrderNr is NULL + and @c_OrderNrAlfa is NULL + Return (0) -- Just warming up the procedure?! + +declare @c_IntrnCoNo smallint = @c_ForetagKod; + +declare + @catch_ERROR_NUMBER integer, + @catch_ERROR_MESSAGE Jeeves_StrVarChar4000; +begin try + +declare @xxx_PrimaryKeyValue Jeeves_StrVarChar2048 +set @xxx_PrimaryKeyValue = '<%.oh>; key =' + +char(13)+char(10)+char(9)+'<%OrderNr> = ' + coalesce( convert( varchar(21), @c_OrderNr ), 'NULL' ) +if @@TranCount = 0 BEGIN TRAN + +declare + @x integer + ,@dbe integer + ,@dbc integer + ,@dbp integer = @@ProcId + ,@Procedure_Name SysName = object_Name( @@ProcId ) + ,@NewLine Jeeves_StrVarChar2 = nchar(13)+nchar(10) + ,@NewLineTab Jeeves_StrVarChar3 = nchar(13)+nchar(10)+nchar(9) + ,@sy1_Currency Jeeves_StrVarChar4 + ,@sy1_CurrencyDecimals smallint + ,@sy1_AdjustMinutes2GetLocalTime integer + ,@sy2_AdjustMinutes2GetLocalTime integer + ,@AM2GLT integer + ,@sy1_TimeZoneCode smallint + ,@sy2_TimeZoneCode smallint + ,@wr Jeeves_StrVarChar4000; +declare + @PgmId Jeeves_StrVarChar512 = @Procedure_Name + @NewLine; + +-- +-- + + +Declare + @oh_AcceptCodePayment Jeeves_StrVarChar32 + , @oh_AdressLappTyp smallint + , @oh_AdresslappUtskrDat DateTime + , @oh_Aktiv smallint + , @oh_AnmodanMark Jeeves_Boolean + , @oh_AntalEURPall smallint + , @oh_AntalKolli smallint + , @oh_AntalOvrPall smallint + , @oh_AntalRader int + , @oh_AoNr Jeeves_MONo + , @oh_AoNrAlfa Jeeves_StrVarChar32 + , @oh_ArrivalAtCustomerDate DateTime + , @oh_ArtBtotVikt decimal(18,8) + , @oh_ArtSerieNrFrom Jeeves_StrVarChar32 + , @oh_ArtSerieNrTom Jeeves_StrVarChar32 + , @oh_ArtVikt decimal(18,8) + , @oh_ArtVolym decimal(18,8) + , @oh_AttBetalaBelopp money + , @oh_AutoFrislappas Jeeves_Boolean + , @oh_AutoMatchedWith Jeeves_InvNo + , @oh_AutoRegel Jeeves_StrVarChar4 + , @oh_AutoRegelForskott Jeeves_StrVarChar4 + , @oh_BetKod Jeeves_StrVarChar2 + , @oh_BetKodForskott Jeeves_StrVarChar2 + , @oh_BookQtyNotOnPickListFlag Jeeves_Boolean + , @oh_BristKontrolleradDatum DateTime + , @oh_BristKontrolleradStatus smallint + , @oh_BristStatusLagerUtlev smallint + , @oh_BristStatusPlaneringBegLevDat smallint + , @oh_BristStatusPlaneringBerLevDat smallint + , @oh_BruttoVikt float + , @oh_BusinessUnit Jeeves_StrVarChar8 + , @oh_Cardpaymentcancelled Jeeves_Boolean + , @oh_ClientSessionGUID_Str ztUniqueIdentifier + , @oh_CodeFixedDeparture Jeeves_Boolean + , @oh_CostsExclVatBCU money + , @oh_CostsExclVatCurr money + , @oh_CostsInclVatBCU money + , @oh_CostsInclVatCurr money + , @oh_CreatedByDbObject Jeeves_StrVarChar64 + , @oh_CreditCardNumber Jeeves_StrVarChar32 + , @oh_DelBokningTillaten smallint + , @oh_DelivToBusinessUnit Jeeves_StrVarChar8 + , @oh_DelivToPONo int + , @oh_DelLevTillaten smallint + , @oh_DiffDgrVerklLevDatDagDat int + , @oh_DirektLeverans Jeeves_Boolean + , @oh_DirektUttag Jeeves_Boolean + , @oh_DistrKod Jeeves_StrVarChar4 + , @oh_DivisKod Jeeves_StrVarChar3 + , @oh_dtwe_JEEVES_Oh_OrderVarde DateTime + , @oh_dtwu_JEEVES_Oh_OrderVarde DateTime + , @oh_ebfilsent Jeeves_Boolean + , @oh_ebfilsentdt DateTime + , @oh_Edit Jeeves_StrVarCharMax + , @oh_Editext Jeeves_StrVarCharMax + , @oh_EditPlBLOB Jeeves_StrVarCharMax + , @oh_EmballageFakt Jeeves_Boolean + , @oh_EmballageKostnad money + , @oh_EmballageKostnInland money + , @oh_EstimatorOffNr Jeeves_StrVarChar10 + , @oh_EstimatorOrder Jeeves_Boolean + , @oh_Exec_Time_Log_String Jeeves_StrVarChar512 + , @oh_ExecutionTime float + , @oh_ExpAvgKd Jeeves_Boolean + , @oh_ExpeditionKostnad money + , @oh_ExpressKod Jeeves_Boolean + , @oh_ExtorderNr Jeeves_StrVarChar17 + , @oh_ExtOrdTyp smallint + , @oh_FaktAvPersSign Jeeves_StrVarChar32 + , @oh_FaktDat DateTime + , @oh_FaktDateTime DateTime + , @oh_FaktDatKorr DateTime + , @oh_FaktDatOrg DateTime + , @oh_FaktFfDat DateTime + , @oh_FaktNr Jeeves_InvNo + , @oh_FaktNr_OCR Jeeves_StrVarChar64 + , @oh_FaktNrAConto Jeeves_InvNo + , @oh_FaktNrForskott Jeeves_InvNo + , @oh_FaktNrKOrr Jeeves_InvNo + , @oh_FaktNrOrg Jeeves_InvNo + , @oh_FaktSlutLevOrder Jeeves_Boolean + , @oh_FaktTB money + , @oh_FaktTbInklMoms money + , @oh_FakturerareKod smallint + , @oh_FfhNr int + , @oh_FiscalPrinterStatusDate DateTime + , @oh_FlowDummyUniqueId ztUniqueIdentifier + , @oh_ForetagKod smallint + , @oh_ForsakringFakt Jeeves_Boolean + , @oh_ForsakringsKostnad money + , @oh_ForsakrKostnInland money + , @oh_ForsakrKostnProc decimal(18,8) + , @oh_ForskottBelopp money + , @oh_ForskottBeloppAck money + , @oh_ForskottMottagetDatum DateTime + , @oh_ForskottOrdKopplTyp smallint + , @oh_FraktAvgKd Jeeves_Boolean + , @oh_FrakthandlKod Jeeves_Boolean + , @oh_FraktKostnBer money + , @oh_FraktKostnDeb money + , @oh_FraktKostnInland money + , @oh_FraktKostnMan money + , @oh_FraktSedelTyp smallint + , @oh_FraktsedelUtskrDat DateTime + , @oh_FraktSkrymmeKod Jeeves_Boolean + , @oh_FraktVikt float + , @oh_FriSlappDatTid DateTime + , @oh_FsKd Jeeves_Boolean + , @oh_FSUtskrDat DateTime + , @oh_FtgKontaktNr smallint + , @oh_FtgNr Jeeves_StrVarChar20 + , @oh_ftgperson Jeeves_StrVarChar64 + , @oh_FtgPostnr Jeeves_StrVarChar10 + , @oh_Giltighetstid Jeeves_StrVarChar10 + , @oh_GiltigTomDatum DateTime + , @oh_GodsMarke Jeeves_StrVarChar64 + , @oh_GodsMarke1 Jeeves_StrVarChar64 + , @oh_GodsMarke2 Jeeves_StrVarChar64 + , @oh_GodsMarke3 Jeeves_StrVarChar64 + , @oh_GodsMarke4 Jeeves_StrVarChar64 + , @oh_Handel3Part Jeeves_Boolean + , @oh_HandlingChargeProcessed Jeeves_Boolean + , @oh_HideOrder Jeeves_Boolean + , @oh_ICTDelivFromOrderNo Jeeves_SONo + , @oh_ICTDelivToOrderNo Jeeves_SONo + , @oh_ICTDelivToPONo Jeeves_PONo + , @oh_ICTDispatchMethod smallint + , @oh_ICTDispatchTerm smallint + , @oh_ICTRuleNumber smallint + , @oh_IdForOrderShuffle Jeeves_StrVarChar20 + , @oh_InbSlag Jeeves_StrVarChar3 + , @oh_Ins_DT_MilliSecond DateTime + , @oh_IntrnCoNoOrigin smallint + , @oh_IntStatTransTyp smallint + , @oh_InventoryLocWMS Jeeves_Boolean + , @oh_InvoiceChange Jeeves_Boolean + , @oh_InvoicedUTCDateTime DateTime + , @oh_Jeeves_Init_Insert_Enter DateTime + , @oh_Jeeves_Init_Insert_PreIns DateTime + , @oh_K4 Jeeves_StrVarChar8 + , @oh_K5 Jeeves_StrVarChar8 + , @oh_K6 Jeeves_StrVarChar8 + , @oh_K7 Jeeves_StrVarChar8 + , @oh_KalkylPrisFaktura Jeeves_StrVarChar + , @oh_kampnr int + , @oh_KBarAvsandandeEnhet Jeeves_StrVarChar8 + , @oh_KodEjFakturera Jeeves_Boolean + , @oh_KopieradFranFaktNr Jeeves_InvNo + , @oh_KopieradFranOrderNr Jeeves_SONo + , @oh_KopieradTillOrderNr Jeeves_SONo + , @oh_Kortspecifikinfo Jeeves_StrVarChar256 + , @oh_Kortstatus Jeeves_StrVarChar32 + , @oh_KortTransaktionsTyp Jeeves_StrVarChar32 + , @oh_KostBar Jeeves_StrVarChar8 + , @oh_KostStalleKod Jeeves_StrVarChar8 + , @oh_KreditOrder Jeeves_Boolean + , @oh_KreditSparrStatus smallint + , @oh_KstAvsandandeEnhet Jeeves_StrVarChar8 + , @oh_Kund_PlKod Jeeves_StrVarChar + , @oh_KundBestDat DateTime + , @oh_KundBestNamn Jeeves_StrVarChar64 + , @oh_KundBestNr Jeeves_StrVarChar32 + , @oh_KundBetalareNr Jeeves_StrVarChar20 + , @oh_KundFaktAdr Jeeves_StrVarChar64 + , @oh_KundFraktBetalareNr Jeeves_StrVarChar20 + , @oh_KundFraktDeb Jeeves_Boolean + , @oh_KundKategoriKod smallint + , @oh_KundLevSattKod smallint + , @oh_KundPrisInklMoms Jeeves_Boolean + , @oh_KundRabatt decimal(18,8) + , @oh_KundRabattKod Jeeves_Boolean + , @oh_KundRabattKod0 Jeeves_Boolean + , @oh_KundRabattKod1 Jeeves_Boolean + , @oh_KundRabattKod2 Jeeves_Boolean + , @oh_KundRabattMax float + , @oh_KundRabattMin float + , @oh_KundRef2 Jeeves_StrVarChar32 + , @oh_KundSpecTextBe Jeeves_Boolean + , @oh_KundSpecTextFa Jeeves_Boolean + , @oh_KundSpecTextFs Jeeves_Boolean + , @oh_KundSpecTextOe Jeeves_Boolean + , @oh_KundSpecTextPl Jeeves_Boolean + , @oh_KundSpecTextTo Jeeves_Boolean + , @oh_KundStafflKod Jeeves_Boolean + , @oh_KundTextKod Jeeves_StrVarChar4 + , @oh_LagerFlyttning Jeeves_Boolean + , @oh_LagPlats Jeeves_StrVarChar20 + , @oh_LagStalle Jeeves_StrVarChar8 + , @oh_LandsKod Jeeves_StrVarChar3 + , @oh_LeadTimeMatrixBookingFlag Jeeves_Boolean + , @oh_LegitimationNumber Jeeves_StrVarChar32 + , @oh_LevArtBtotVikt decimal(18,8) + , @oh_LevArtVikt decimal(18,8) + , @oh_LevArtVolym decimal(18,8) + , @oh_LevAviseringKod Jeeves_Boolean + , @oh_LevForeTolv Jeeves_Boolean + , @oh_LevHandlKod Jeeves_Boolean + , @oh_LevSattKod smallint + , @oh_LevVillkKod smallint + , @oh_LfExcl Jeeves_Boolean + , @oh_ManReAvstDT DateTime + , @oh_ManReAvstPerDen DateTime + , @oh_ManReAvstPersSign Jeeves_StrVarChar32 + , @oh_MarkKundsMomsStyr Jeeves_Boolean + , @oh_MarkNyttOEUtskr Jeeves_Boolean + , @oh_MarkOrderUniktLager Jeeves_Boolean + , @oh_MomsKod smallint + , @oh_MomsKodForskott smallint + , @oh_MottagetBelopp money + , @oh_MRP_InventoryTransferFlag Jeeves_Boolean + , @oh_No_Trigger_Exec smallint + , @oh_OeKod Jeeves_Boolean + , @oh_OeStatusEdi smallint + , @oh_OEUtskrDat DateTime + , @oh_OffertRadNrToOrdRadNr Jeeves_Boolean + , @oh_OffNr Jeeves_StrVarChar10 + , @oh_OhFaktTB money + , @oh_OhFaktTBInklMoms money + , @oh_OhOrdBerednDatBase DateTime + , @oh_OhOrdBerLevDatBase DateTime + , @oh_OhOrdKostnad money + , @oh_OhOrdKostnadInklMoms money + , @oh_OhOrdSum money + , @oh_OhOrdSumInklMoms money + , @oh_OhVbOrdSum money + , @oh_OhVbOrdSumInklMoms money + , @oh_OIngSkapad Jeeves_Boolean + , @oh_OkAttPlockaSattDatum DateTime + , @oh_OkAttPlockaStatus smallint + , @oh_ole1 Jeeves_StrVarChar256 + , @oh_ole2 Jeeves_StrVarChar256 + , @oh_OrdBegLevDat DateTime + , @oh_OrdBerednDat DateTime + , @oh_OrdBerLevDat DateTime + , @oh_OrdBerLevTid ztTime + , @oh_OrdBeskr Jeeves_StrVarChar64 + , @oh_OrdBokningsStatus smallint + , @oh_OrdDatum DateTime + , @oh_OrderAvslutad Jeeves_Boolean + , @oh_OrderBeloppIntFsg money + , @oh_OrderBeloppIntKop money + , @oh_OrderCostCurrency Jeeves_Boolean + , @oh_OrderEnding Jeeves_Boolean + , @oh_OrderKopplKod smallint + , @oh_OrderKostnadIntFsg money + , @oh_OrderKostnadIntKop money + , @oh_OrderNr Jeeves_SONo + , @oh_OrderNrAlfa Jeeves_StrVarChar64 + , @oh_OrderNrKoppl Jeeves_SONo + , @oh_OrderNrKorr Jeeves_SONo + , @oh_OrderNrOffert Jeeves_SONo + , @oh_OrderNrOrg Jeeves_SONo + , @oh_OrderNrServ Jeeves_SONo + , @oh_OrderTBIntFsg money + , @oh_OrderTBIntKop money + , @oh_OrderTextKod Jeeves_StrVarChar4 + , @oh_OrderTGIntFsg decimal(18,8) + , @oh_OrderTGIntKop decimal(18,8) + , @oh_OrdFoljesedelsNr int + , @oh_OrdKostnad money + , @oh_OrdKostnadInklMoms money + , @oh_OrdLevAdr1 Jeeves_StrVarChar64 + , @oh_OrdLevAdr2 Jeeves_StrVarChar64 + , @oh_OrdLevAdr3 Jeeves_StrVarChar64 + , @oh_OrdLevAdr4 Jeeves_StrVarChar64 + , @oh_OrdLevAdrBstOrt Jeeves_StrVarChar64 + , @oh_OrdLevAdrLandsKod Jeeves_StrVarChar3 + , @oh_OrdLevAdrProvinceCode Jeeves_StrVarChar5 + , @oh_OrdLevAnvisnRad1 Jeeves_StrVarChar32 + , @oh_OrdLevAnvisnRad2 Jeeves_StrVarChar32 + , @oh_OrdLevDat DateTime + , @oh_OrdLevDatOrg DateTime + , @oh_OrdLevNr smallint + , @oh_OrdLevPlats1 Jeeves_StrVarChar20 + , @oh_OrdLovLevDat DateTime + , @oh_OrdRabatt decimal(18,8) + , @oh_OrdRestNot Jeeves_Boolean + , @oh_OrdRestNr smallint + , @oh_OrdStat smallint + , @oh_OrdSum money + , @oh_OrdSumExclCredChk money + , @oh_OrdSumExklMoms money + , @oh_OrdSumFraktBer money + , @oh_OrdSumInklMoms money + , @oh_OrdSumInklMomsExclCredChk money + , @oh_OrdSumRabGr money + , @oh_OrdSumReg money + , @oh_OrdSumValReg money + , @oh_OrdTranspDat DateTime + , @oh_OrdTyp smallint + , @oh_OrdVerklLevDat DateTime + , @oh_OULager_Auto_Utplock Jeeves_Boolean + , @oh_OULager_Leverera_Allt Jeeves_Boolean + , @oh_OvrFaktAvgift1 money + , @oh_OvrFaktAvgift10 money + , @oh_OvrFaktAvgift2 money + , @oh_OvrFaktAvgift3 money + , @oh_OvrFaktAvgift4 money + , @oh_OvrFaktAvgift5 money + , @oh_OvrFaktAvgift6 money + , @oh_OvrFaktAvgift7 money + , @oh_OvrFaktAvgift8 money + , @oh_OvrFaktAvgift9 money + , @oh_OvrFaktKostn1Fakt Jeeves_Boolean + , @oh_OvrFaktKostn2Fakt Jeeves_Boolean + , @oh_OvrFaktKostnad1 money + , @oh_OvrFaktKostnad2 money + , @oh_OvrFaktKostnInland1 money + , @oh_OvrFaktKostnInland2 money + , @oh_PackagingDate DateTime + , @oh_PackareKod smallint + , @oh_PackSedelUtskrDat DateTime + , @oh_PaymenttransID Jeeves_StrVarChar256 + , @oh_PdmCount int + , @oh_PersSign Jeeves_StrVarChar32 + , @oh_PickingLockedByUser Jeeves_StrVarChar64 + , @oh_PlockIndexOrder int + , @oh_PlockJnrOrder int + , @oh_PLUtskrDat DateTime + , @oh_PrisJustOrder Jeeves_Boolean + , @oh_PrisJustOrderKost Jeeves_Boolean + , @oh_PrisLista int + , @oh_ProjCode Jeeves_StrVarChar10 + , @oh_ProspektId int + , @oh_PVMSeasonId Jeeves_StrVarChar15 + , @oh_QQ_Ins_Trg_Start DateTime + , @oh_RabKlass smallint + , @oh_Referensnummer Jeeves_StrVarChar32 + , @oh_RegDat DateTime + , @oh_ReplicateRecord smallint + , @oh_RestArtBtotVikt decimal(18,8) + , @oh_RestArtVikt decimal(18,8) + , @oh_RestArtVolym decimal(18,8) + , @oh_RestBehKod smallint + , @oh_RowCreatedBy Jeeves_StrVarChar32 + , @oh_RowCreatedDt DateTime + , @oh_RowCreatedUTCDT DateTime + , @oh_RowUpdatedBy Jeeves_StrVarChar32 + , @oh_RowUpdatedCols Jeeves_StrVarChar256 + , @oh_RowUpdatedDt DateTime + , @oh_RowUpdatedUTCDT DateTime + , @oh_RptUnitNo smallint + , @oh_RU_Account Jeeves_StrVarChar20 + , @oh_SalesTaxHandling Jeeves_Boolean + , @oh_SalesType Jeeves_StrVarChar3 + , @oh_Saljare Jeeves_StrVarChar32 + , @oh_SamFaktUtskr Jeeves_Boolean + , @oh_SamInKopMark Jeeves_Boolean + , @oh_SendEdi Jeeves_Boolean + , @oh_SendEdiDT DateTime + , @oh_ShuffleOrder Jeeves_Boolean + , @oh_SkrivUtskSk Jeeves_Boolean + , @oh_SlutKundNamn1 Jeeves_StrVarChar64 + , @oh_SlutKundNamn2 Jeeves_StrVarChar64 + , @oh_SprakKod smallint + , @oh_SQLCmd2EnterTrg int + , @oh_StockReplenishment Jeeves_Boolean + , @oh_TA_AmtCOD money + , @oh_TA_ConsNo Jeeves_StrVarChar20 + , @oh_TA_CustomerMessage Jeeves_StrVarChar64 + , @oh_TA_Edit Jeeves_StrVarCharMax + , @oh_TA_FaxNotifiedNo Jeeves_StrVarChar64 + , @oh_TA_GANno Jeeves_StrVarChar20 + , @oh_TA_IntAutoNo smallint + , @oh_TA_Loadmeter float + , @oh_TA_MailNotified Jeeves_StrVarChar64 + , @oh_TA_PhonNotifiedNo Jeeves_StrVarChar64 + , @oh_TA_SMSNotifiedNo Jeeves_StrVarChar64 + , @oh_TA_TemplKompCd Jeeves_StrVarChar + , @oh_TaxAreaCode1 Jeeves_StrVarChar10 + , @oh_TaxAreaCode2 Jeeves_StrVarChar10 + , @oh_TaxAreaCode3 Jeeves_StrVarChar10 + , @oh_TaxAreaCode4 Jeeves_StrVarChar10 + , @oh_TaxAreaCode5 Jeeves_StrVarChar10 + , @oh_TaxAreaRate decimal(18,8) + , @oh_TaxCode smallint + , @oh_TerminsSakradOrder Jeeves_Boolean + , @oh_TextEfterDokRader Jeeves_Boolean + , @oh_TextKod Jeeves_StrVarChar4 + , @oh_TillbakaBelopp money + , @oh_TillLagStalle Jeeves_StrVarChar8 + , @oh_TimeZoneCode smallint + , @oh_TransitLeverans Jeeves_Boolean + , @oh_TransportorsKod Jeeves_StrVarChar17 + , @oh_UtskrBestDokSkaGoras Jeeves_Boolean + , @oh_UtskrBestDokUtskrDT DateTime + , @oh_UtskrDokLovSkaGoras Jeeves_Boolean + , @oh_UtskrDokLovUtskrDT DateTime + , @oh_ValDat DateTime + , @oh_ValKod Jeeves_StrVarChar3 + , @oh_ValKurs decimal(18,8) + , @oh_VaruProv Jeeves_StrVarChar + , @oh_VAT_Type smallint + , @oh_vb_EmballageKostnad money + , @oh_vb_EmballageKostnInland money + , @oh_vb_ExpeditionKostnad money + , @oh_vb_ForsakringsKostnad money + , @oh_vb_ForsakrKostnInland money + , @oh_vb_ForskottBelopp money + , @oh_vb_ForskottBeloppAck money + , @oh_vb_FraktKostnBer money + , @oh_vb_FraktKostnDeb money + , @oh_vb_FraktKostnInland money + , @oh_vb_FraktKostnMan money + , @oh_vb_OvrFaktAvgift1 money + , @oh_vb_OvrFaktAvgift10 money + , @oh_vb_OvrFaktAvgift2 money + , @oh_vb_OvrFaktAvgift3 money + , @oh_vb_OvrFaktAvgift4 money + , @oh_vb_OvrFaktAvgift5 money + , @oh_vb_OvrFaktAvgift6 money + , @oh_vb_OvrFaktAvgift7 money + , @oh_vb_OvrFaktAvgift8 money + , @oh_vb_OvrFaktAvgift9 money + , @oh_vb_OvrFaktKostnad1 money + , @oh_vb_OvrFaktKostnad2 money + , @oh_vb_OvrFaktKostnInland1 money + , @oh_vb_OvrFaktKostnInland2 money + , @oh_VbOrdSum money + , @oh_VbOrdSumExklMoms money + , @oh_VbOrdSumInklMoms money + , @oh_VbOrdSumRabGr money + , @oh_ViktSumOrder Jeeves_Boolean + , @oh_VolHeight smallint + , @oh_VolLength smallint + , @oh_Volume float + , @oh_VolWidth smallint + , @oh_VRef Jeeves_StrVarChar64 + , @oh_webpublish varchar(1) + , @oh_WorkFaktNr Jeeves_InvNo + +Select + @oh_AcceptCodePayment = COALESCE ( @c_AcceptCodePayment , @oh_AcceptCodePayment ) + , @oh_AdressLappTyp = COALESCE ( @c_AdressLappTyp , @oh_AdressLappTyp ) + , @oh_AdresslappUtskrDat = COALESCE ( @c_AdresslappUtskrDat , @oh_AdresslappUtskrDat ) + , @oh_Aktiv = COALESCE ( @c_Aktiv , @oh_Aktiv ) + , @oh_AnmodanMark = COALESCE ( @c_AnmodanMark , @oh_AnmodanMark ) + , @oh_AntalEURPall = COALESCE ( @c_AntalEURPall , @oh_AntalEURPall ) + , @oh_AntalKolli = COALESCE ( @c_AntalKolli , @oh_AntalKolli ) + , @oh_AntalOvrPall = COALESCE ( @c_AntalOvrPall , @oh_AntalOvrPall ) + , @oh_AntalRader = COALESCE ( @c_AntalRader , @oh_AntalRader ) + , @oh_AoNr = COALESCE ( @c_AoNr , @oh_AoNr ) + , @oh_AoNrAlfa = COALESCE ( @c_AoNrAlfa , @oh_AoNrAlfa ) + , @oh_ArrivalAtCustomerDate = COALESCE ( @c_ArrivalAtCustomerDate , @oh_ArrivalAtCustomerDate ) + , @oh_ArtBtotVikt = COALESCE ( @c_ArtBtotVikt , @oh_ArtBtotVikt ) + , @oh_ArtSerieNrFrom = COALESCE ( @c_ArtSerieNrFrom , @oh_ArtSerieNrFrom ) + , @oh_ArtSerieNrTom = COALESCE ( @c_ArtSerieNrTom , @oh_ArtSerieNrTom ) + , @oh_ArtVikt = COALESCE ( @c_ArtVikt , @oh_ArtVikt ) + , @oh_ArtVolym = COALESCE ( @c_ArtVolym , @oh_ArtVolym ) + , @oh_AttBetalaBelopp = COALESCE ( @c_AttBetalaBelopp , @oh_AttBetalaBelopp ) + , @oh_AutoFrislappas = COALESCE ( @c_AutoFrislappas , @oh_AutoFrislappas ) + , @oh_AutoMatchedWith = COALESCE ( @c_AutoMatchedWith , @oh_AutoMatchedWith ) + , @oh_AutoRegel = COALESCE ( @c_AutoRegel , @oh_AutoRegel ) + , @oh_AutoRegelForskott = COALESCE ( @c_AutoRegelForskott , @oh_AutoRegelForskott ) + , @oh_BetKod = COALESCE ( @c_BetKod , @oh_BetKod ) + , @oh_BetKodForskott = COALESCE ( @c_BetKodForskott , @oh_BetKodForskott ) + , @oh_BookQtyNotOnPickListFlag = COALESCE ( @c_BookQtyNotOnPickListFlag , @oh_BookQtyNotOnPickListFlag ) + , @oh_BristKontrolleradDatum = COALESCE ( @c_BristKontrolleradDatum , @oh_BristKontrolleradDatum ) + , @oh_BristKontrolleradStatus = COALESCE ( @c_BristKontrolleradStatus , @oh_BristKontrolleradStatus ) + , @oh_BristStatusLagerUtlev = COALESCE ( @c_BristStatusLagerUtlev , @oh_BristStatusLagerUtlev ) + , @oh_BristStatusPlaneringBegLevDat = COALESCE ( @c_BristStatusPlaneringBegLevDat , @oh_BristStatusPlaneringBegLevDat ) + , @oh_BristStatusPlaneringBerLevDat = COALESCE ( @c_BristStatusPlaneringBerLevDat , @oh_BristStatusPlaneringBerLevDat ) + , @oh_BruttoVikt = COALESCE ( @c_BruttoVikt , @oh_BruttoVikt ) + , @oh_BusinessUnit = COALESCE ( @c_BusinessUnit , @oh_BusinessUnit ) + , @oh_Cardpaymentcancelled = COALESCE ( @c_Cardpaymentcancelled , @oh_Cardpaymentcancelled ) + , @oh_ClientSessionGUID_Str = COALESCE ( @c_ClientSessionGUID_Str , @oh_ClientSessionGUID_Str ) + , @oh_CodeFixedDeparture = COALESCE ( @c_CodeFixedDeparture , @oh_CodeFixedDeparture ) + , @oh_CostsExclVatBCU = COALESCE ( @c_CostsExclVatBCU , @oh_CostsExclVatBCU ) + , @oh_CostsExclVatCurr = COALESCE ( @c_CostsExclVatCurr , @oh_CostsExclVatCurr ) + , @oh_CostsInclVatBCU = COALESCE ( @c_CostsInclVatBCU , @oh_CostsInclVatBCU ) + , @oh_CostsInclVatCurr = COALESCE ( @c_CostsInclVatCurr , @oh_CostsInclVatCurr ) + , @oh_CreatedByDbObject = COALESCE ( @c_CreatedByDbObject , @oh_CreatedByDbObject ) + , @oh_CreditCardNumber = COALESCE ( @c_CreditCardNumber , @oh_CreditCardNumber ) + , @oh_DelBokningTillaten = COALESCE ( @c_DelBokningTillaten , @oh_DelBokningTillaten ) + , @oh_DelivToBusinessUnit = COALESCE ( @c_DelivToBusinessUnit , @oh_DelivToBusinessUnit ) + , @oh_DelivToPONo = COALESCE ( @c_DelivToPONo , @oh_DelivToPONo ) + , @oh_DelLevTillaten = COALESCE ( @c_DelLevTillaten , @oh_DelLevTillaten ) + , @oh_DiffDgrVerklLevDatDagDat = COALESCE ( @c_DiffDgrVerklLevDatDagDat , @oh_DiffDgrVerklLevDatDagDat ) + , @oh_DirektLeverans = COALESCE ( @c_DirektLeverans , @oh_DirektLeverans ) + , @oh_DirektUttag = COALESCE ( @c_DirektUttag , @oh_DirektUttag ) + , @oh_DistrKod = COALESCE ( @c_DistrKod , @oh_DistrKod ) + , @oh_DivisKod = COALESCE ( @c_DivisKod , @oh_DivisKod ) + , @oh_dtwe_JEEVES_Oh_OrderVarde = COALESCE ( @c_dtwe_JEEVES_Oh_OrderVarde , @oh_dtwe_JEEVES_Oh_OrderVarde ) + , @oh_dtwu_JEEVES_Oh_OrderVarde = COALESCE ( @c_dtwu_JEEVES_Oh_OrderVarde , @oh_dtwu_JEEVES_Oh_OrderVarde ) + , @oh_ebfilsent = COALESCE ( @c_ebfilsent , @oh_ebfilsent ) + , @oh_ebfilsentdt = COALESCE ( @c_ebfilsentdt , @oh_ebfilsentdt ) + , @oh_Edit = COALESCE ( @c_Edit , @oh_Edit ) + , @oh_Editext = COALESCE ( @c_Editext , @oh_Editext ) + , @oh_EditPlBLOB = COALESCE ( @c_EditPlBLOB , @oh_EditPlBLOB ) + , @oh_EmballageFakt = COALESCE ( @c_EmballageFakt , @oh_EmballageFakt ) + , @oh_EmballageKostnad = COALESCE ( @c_EmballageKostnad , @oh_EmballageKostnad ) + , @oh_EmballageKostnInland = COALESCE ( @c_EmballageKostnInland , @oh_EmballageKostnInland ) + , @oh_EstimatorOffNr = COALESCE ( @c_EstimatorOffNr , @oh_EstimatorOffNr ) + , @oh_EstimatorOrder = COALESCE ( @c_EstimatorOrder , @oh_EstimatorOrder ) + , @oh_Exec_Time_Log_String = COALESCE ( @c_Exec_Time_Log_String , @oh_Exec_Time_Log_String ) + , @oh_ExecutionTime = COALESCE ( @c_ExecutionTime , @oh_ExecutionTime ) + , @oh_ExpAvgKd = COALESCE ( @c_ExpAvgKd , @oh_ExpAvgKd ) + , @oh_ExpeditionKostnad = COALESCE ( @c_ExpeditionKostnad , @oh_ExpeditionKostnad ) + , @oh_ExpressKod = COALESCE ( @c_ExpressKod , @oh_ExpressKod ) + , @oh_ExtorderNr = COALESCE ( @c_ExtorderNr , @oh_ExtorderNr ) + , @oh_ExtOrdTyp = COALESCE ( @c_ExtOrdTyp , @oh_ExtOrdTyp ) + , @oh_FaktAvPersSign = COALESCE ( @c_FaktAvPersSign , @oh_FaktAvPersSign ) + , @oh_FaktDat = COALESCE ( @c_FaktDat , @oh_FaktDat ) + , @oh_FaktDateTime = COALESCE ( @c_FaktDateTime , @oh_FaktDateTime ) + , @oh_FaktDatKorr = COALESCE ( @c_FaktDatKorr , @oh_FaktDatKorr ) + , @oh_FaktDatOrg = COALESCE ( @c_FaktDatOrg , @oh_FaktDatOrg ) + , @oh_FaktFfDat = COALESCE ( @c_FaktFfDat , @oh_FaktFfDat ) + , @oh_FaktNr = COALESCE ( @c_FaktNr , @oh_FaktNr ) + , @oh_FaktNr_OCR = COALESCE ( @c_FaktNr_OCR , @oh_FaktNr_OCR ) + , @oh_FaktNrAConto = COALESCE ( @c_FaktNrAConto , @oh_FaktNrAConto ) + , @oh_FaktNrForskott = COALESCE ( @c_FaktNrForskott , @oh_FaktNrForskott ) + , @oh_FaktNrKOrr = COALESCE ( @c_FaktNrKOrr , @oh_FaktNrKOrr ) + , @oh_FaktNrOrg = COALESCE ( @c_FaktNrOrg , @oh_FaktNrOrg ) + , @oh_FaktSlutLevOrder = COALESCE ( @c_FaktSlutLevOrder , @oh_FaktSlutLevOrder ) + , @oh_FaktTB = COALESCE ( @c_FaktTB , @oh_FaktTB ) + , @oh_FaktTbInklMoms = COALESCE ( @c_FaktTbInklMoms , @oh_FaktTbInklMoms ) + , @oh_FakturerareKod = COALESCE ( @c_FakturerareKod , @oh_FakturerareKod ) + , @oh_FfhNr = COALESCE ( @c_FfhNr , @oh_FfhNr ) + , @oh_FiscalPrinterStatusDate = COALESCE ( @c_FiscalPrinterStatusDate , @oh_FiscalPrinterStatusDate ) + , @oh_FlowDummyUniqueId = COALESCE ( @c_FlowDummyUniqueId , @oh_FlowDummyUniqueId ) + , @oh_ForetagKod = COALESCE ( @c_ForetagKod , @oh_ForetagKod ) + , @oh_ForsakringFakt = COALESCE ( @c_ForsakringFakt , @oh_ForsakringFakt ) + , @oh_ForsakringsKostnad = COALESCE ( @c_ForsakringsKostnad , @oh_ForsakringsKostnad ) + , @oh_ForsakrKostnInland = COALESCE ( @c_ForsakrKostnInland , @oh_ForsakrKostnInland ) + , @oh_ForsakrKostnProc = COALESCE ( @c_ForsakrKostnProc , @oh_ForsakrKostnProc ) + , @oh_ForskottBelopp = COALESCE ( @c_ForskottBelopp , @oh_ForskottBelopp ) + , @oh_ForskottBeloppAck = COALESCE ( @c_ForskottBeloppAck , @oh_ForskottBeloppAck ) + , @oh_ForskottMottagetDatum = COALESCE ( @c_ForskottMottagetDatum , @oh_ForskottMottagetDatum ) + , @oh_ForskottOrdKopplTyp = COALESCE ( @c_ForskottOrdKopplTyp , @oh_ForskottOrdKopplTyp ) + , @oh_FraktAvgKd = COALESCE ( @c_FraktAvgKd , @oh_FraktAvgKd ) + , @oh_FrakthandlKod = COALESCE ( @c_FrakthandlKod , @oh_FrakthandlKod ) + , @oh_FraktKostnBer = COALESCE ( @c_FraktKostnBer , @oh_FraktKostnBer ) + , @oh_FraktKostnDeb = COALESCE ( @c_FraktKostnDeb , @oh_FraktKostnDeb ) + , @oh_FraktKostnInland = COALESCE ( @c_FraktKostnInland , @oh_FraktKostnInland ) + , @oh_FraktKostnMan = COALESCE ( @c_FraktKostnMan , @oh_FraktKostnMan ) + , @oh_FraktSedelTyp = COALESCE ( @c_FraktSedelTyp , @oh_FraktSedelTyp ) + , @oh_FraktsedelUtskrDat = COALESCE ( @c_FraktsedelUtskrDat , @oh_FraktsedelUtskrDat ) + , @oh_FraktSkrymmeKod = COALESCE ( @c_FraktSkrymmeKod , @oh_FraktSkrymmeKod ) + , @oh_FraktVikt = COALESCE ( @c_FraktVikt , @oh_FraktVikt ) + , @oh_FriSlappDatTid = COALESCE ( @c_FriSlappDatTid , @oh_FriSlappDatTid ) + , @oh_FsKd = COALESCE ( @c_FsKd , @oh_FsKd ) + , @oh_FSUtskrDat = COALESCE ( @c_FSUtskrDat , @oh_FSUtskrDat ) + , @oh_FtgKontaktNr = COALESCE ( @c_FtgKontaktNr , @oh_FtgKontaktNr ) + , @oh_FtgNr = COALESCE ( @c_FtgNr , @oh_FtgNr ) + , @oh_ftgperson = COALESCE ( @c_ftgperson , @oh_ftgperson ) + , @oh_FtgPostnr = COALESCE ( @c_FtgPostnr , @oh_FtgPostnr ) + , @oh_Giltighetstid = COALESCE ( @c_Giltighetstid , @oh_Giltighetstid ) + , @oh_GiltigTomDatum = COALESCE ( @c_GiltigTomDatum , @oh_GiltigTomDatum ) + , @oh_GodsMarke = COALESCE ( @c_GodsMarke , @oh_GodsMarke ) + , @oh_GodsMarke1 = COALESCE ( @c_GodsMarke1 , @oh_GodsMarke1 ) + , @oh_GodsMarke2 = COALESCE ( @c_GodsMarke2 , @oh_GodsMarke2 ) + , @oh_GodsMarke3 = COALESCE ( @c_GodsMarke3 , @oh_GodsMarke3 ) + , @oh_GodsMarke4 = COALESCE ( @c_GodsMarke4 , @oh_GodsMarke4 ) + , @oh_Handel3Part = COALESCE ( @c_Handel3Part , @oh_Handel3Part ) + , @oh_HandlingChargeProcessed = COALESCE ( @c_HandlingChargeProcessed , @oh_HandlingChargeProcessed ) + , @oh_HideOrder = COALESCE ( @c_HideOrder , @oh_HideOrder ) + , @oh_ICTDelivFromOrderNo = COALESCE ( @c_ICTDelivFromOrderNo , @oh_ICTDelivFromOrderNo ) + , @oh_ICTDelivToOrderNo = COALESCE ( @c_ICTDelivToOrderNo , @oh_ICTDelivToOrderNo ) + , @oh_ICTDelivToPONo = COALESCE ( @c_ICTDelivToPONo , @oh_ICTDelivToPONo ) + , @oh_ICTDispatchMethod = COALESCE ( @c_ICTDispatchMethod , @oh_ICTDispatchMethod ) + , @oh_ICTDispatchTerm = COALESCE ( @c_ICTDispatchTerm , @oh_ICTDispatchTerm ) + , @oh_ICTRuleNumber = COALESCE ( @c_ICTRuleNumber , @oh_ICTRuleNumber ) + , @oh_IdForOrderShuffle = COALESCE ( @c_IdForOrderShuffle , @oh_IdForOrderShuffle ) + , @oh_InbSlag = COALESCE ( @c_InbSlag , @oh_InbSlag ) + , @oh_Ins_DT_MilliSecond = COALESCE ( @c_Ins_DT_MilliSecond , @oh_Ins_DT_MilliSecond ) + , @oh_IntrnCoNoOrigin = COALESCE ( @c_IntrnCoNoOrigin , @oh_IntrnCoNoOrigin ) + , @oh_IntStatTransTyp = COALESCE ( @c_IntStatTransTyp , @oh_IntStatTransTyp ) + , @oh_InventoryLocWMS = COALESCE ( @c_InventoryLocWMS , @oh_InventoryLocWMS ) + , @oh_InvoiceChange = COALESCE ( @c_InvoiceChange , @oh_InvoiceChange ) + , @oh_InvoicedUTCDateTime = COALESCE ( @c_InvoicedUTCDateTime , @oh_InvoicedUTCDateTime ) + , @oh_Jeeves_Init_Insert_Enter = COALESCE ( @c_Jeeves_Init_Insert_Enter , @oh_Jeeves_Init_Insert_Enter ) + , @oh_Jeeves_Init_Insert_PreIns = COALESCE ( @c_Jeeves_Init_Insert_PreIns , @oh_Jeeves_Init_Insert_PreIns ) + , @oh_K4 = COALESCE ( @c_K4 , @oh_K4 ) + , @oh_K5 = COALESCE ( @c_K5 , @oh_K5 ) + , @oh_K6 = COALESCE ( @c_K6 , @oh_K6 ) + , @oh_K7 = COALESCE ( @c_K7 , @oh_K7 ) + , @oh_KalkylPrisFaktura = COALESCE ( @c_KalkylPrisFaktura , @oh_KalkylPrisFaktura ) + , @oh_kampnr = COALESCE ( @c_kampnr , @oh_kampnr ) + , @oh_KBarAvsandandeEnhet = COALESCE ( @c_KBarAvsandandeEnhet , @oh_KBarAvsandandeEnhet ) + , @oh_KodEjFakturera = COALESCE ( @c_KodEjFakturera , @oh_KodEjFakturera ) + , @oh_KopieradFranFaktNr = COALESCE ( @c_KopieradFranFaktNr , @oh_KopieradFranFaktNr ) + , @oh_KopieradFranOrderNr = COALESCE ( @c_KopieradFranOrderNr , @oh_KopieradFranOrderNr ) + , @oh_KopieradTillOrderNr = COALESCE ( @c_KopieradTillOrderNr , @oh_KopieradTillOrderNr ) + , @oh_Kortspecifikinfo = COALESCE ( @c_Kortspecifikinfo , @oh_Kortspecifikinfo ) + , @oh_Kortstatus = COALESCE ( @c_Kortstatus , @oh_Kortstatus ) + , @oh_KortTransaktionsTyp = COALESCE ( @c_KortTransaktionsTyp , @oh_KortTransaktionsTyp ) + , @oh_KostBar = COALESCE ( @c_KostBar , @oh_KostBar ) + , @oh_KostStalleKod = COALESCE ( @c_KostStalleKod , @oh_KostStalleKod ) + , @oh_KreditOrder = COALESCE ( @c_KreditOrder , @oh_KreditOrder ) + , @oh_KreditSparrStatus = COALESCE ( @c_KreditSparrStatus , @oh_KreditSparrStatus ) + , @oh_KstAvsandandeEnhet = COALESCE ( @c_KstAvsandandeEnhet , @oh_KstAvsandandeEnhet ) + , @oh_Kund_PlKod = COALESCE ( @c_Kund_PlKod , @oh_Kund_PlKod ) + , @oh_KundBestDat = COALESCE ( @c_KundBestDat , @oh_KundBestDat ) + , @oh_KundBestNamn = COALESCE ( @c_KundBestNamn , @oh_KundBestNamn ) + , @oh_KundBestNr = COALESCE ( @c_KundBestNr , @oh_KundBestNr ) + , @oh_KundBetalareNr = COALESCE ( @c_KundBetalareNr , @oh_KundBetalareNr ) + , @oh_KundFaktAdr = COALESCE ( @c_KundFaktAdr , @oh_KundFaktAdr ) + , @oh_KundFraktBetalareNr = COALESCE ( @c_KundFraktBetalareNr , @oh_KundFraktBetalareNr ) + , @oh_KundFraktDeb = COALESCE ( @c_KundFraktDeb , @oh_KundFraktDeb ) + , @oh_KundKategoriKod = COALESCE ( @c_KundKategoriKod , @oh_KundKategoriKod ) + , @oh_KundLevSattKod = COALESCE ( @c_KundLevSattKod , @oh_KundLevSattKod ) + , @oh_KundPrisInklMoms = COALESCE ( @c_KundPrisInklMoms , @oh_KundPrisInklMoms ) + , @oh_KundRabatt = COALESCE ( @c_KundRabatt , @oh_KundRabatt ) + , @oh_KundRabattKod = COALESCE ( @c_KundRabattKod , @oh_KundRabattKod ) + , @oh_KundRabattKod0 = COALESCE ( @c_KundRabattKod0 , @oh_KundRabattKod0 ) + , @oh_KundRabattKod1 = COALESCE ( @c_KundRabattKod1 , @oh_KundRabattKod1 ) + , @oh_KundRabattKod2 = COALESCE ( @c_KundRabattKod2 , @oh_KundRabattKod2 ) + , @oh_KundRabattMax = COALESCE ( @c_KundRabattMax , @oh_KundRabattMax ) + , @oh_KundRabattMin = COALESCE ( @c_KundRabattMin , @oh_KundRabattMin ) + , @oh_KundRef2 = COALESCE ( @c_KundRef2 , @oh_KundRef2 ) + , @oh_KundSpecTextBe = COALESCE ( @c_KundSpecTextBe , @oh_KundSpecTextBe ) + , @oh_KundSpecTextFa = COALESCE ( @c_KundSpecTextFa , @oh_KundSpecTextFa ) + , @oh_KundSpecTextFs = COALESCE ( @c_KundSpecTextFs , @oh_KundSpecTextFs ) + , @oh_KundSpecTextOe = COALESCE ( @c_KundSpecTextOe , @oh_KundSpecTextOe ) + , @oh_KundSpecTextPl = COALESCE ( @c_KundSpecTextPl , @oh_KundSpecTextPl ) + , @oh_KundSpecTextTo = COALESCE ( @c_KundSpecTextTo , @oh_KundSpecTextTo ) + , @oh_KundStafflKod = COALESCE ( @c_KundStafflKod , @oh_KundStafflKod ) + , @oh_KundTextKod = COALESCE ( @c_KundTextKod , @oh_KundTextKod ) + , @oh_LagerFlyttning = COALESCE ( @c_LagerFlyttning , @oh_LagerFlyttning ) + , @oh_LagPlats = COALESCE ( @c_LagPlats , @oh_LagPlats ) + , @oh_LagStalle = COALESCE ( @c_LagStalle , @oh_LagStalle ) + , @oh_LandsKod = COALESCE ( @c_LandsKod , @oh_LandsKod ) + , @oh_LeadTimeMatrixBookingFlag = COALESCE ( @c_LeadTimeMatrixBookingFlag , @oh_LeadTimeMatrixBookingFlag ) + , @oh_LegitimationNumber = COALESCE ( @c_LegitimationNumber , @oh_LegitimationNumber ) + , @oh_LevArtBtotVikt = COALESCE ( @c_LevArtBtotVikt , @oh_LevArtBtotVikt ) + , @oh_LevArtVikt = COALESCE ( @c_LevArtVikt , @oh_LevArtVikt ) + , @oh_LevArtVolym = COALESCE ( @c_LevArtVolym , @oh_LevArtVolym ) + , @oh_LevAviseringKod = COALESCE ( @c_LevAviseringKod , @oh_LevAviseringKod ) + , @oh_LevForeTolv = COALESCE ( @c_LevForeTolv , @oh_LevForeTolv ) + , @oh_LevHandlKod = COALESCE ( @c_LevHandlKod , @oh_LevHandlKod ) + , @oh_LevSattKod = COALESCE ( @c_LevSattKod , @oh_LevSattKod ) + , @oh_LevVillkKod = COALESCE ( @c_LevVillkKod , @oh_LevVillkKod ) + , @oh_LfExcl = COALESCE ( @c_LfExcl , @oh_LfExcl ) + , @oh_ManReAvstDT = COALESCE ( @c_ManReAvstDT , @oh_ManReAvstDT ) + , @oh_ManReAvstPerDen = COALESCE ( @c_ManReAvstPerDen , @oh_ManReAvstPerDen ) + , @oh_ManReAvstPersSign = COALESCE ( @c_ManReAvstPersSign , @oh_ManReAvstPersSign ) + , @oh_MarkKundsMomsStyr = COALESCE ( @c_MarkKundsMomsStyr , @oh_MarkKundsMomsStyr ) + , @oh_MarkNyttOEUtskr = COALESCE ( @c_MarkNyttOEUtskr , @oh_MarkNyttOEUtskr ) + , @oh_MarkOrderUniktLager = COALESCE ( @c_MarkOrderUniktLager , @oh_MarkOrderUniktLager ) + , @oh_MomsKod = COALESCE ( @c_MomsKod , @oh_MomsKod ) + , @oh_MomsKodForskott = COALESCE ( @c_MomsKodForskott , @oh_MomsKodForskott ) + , @oh_MottagetBelopp = COALESCE ( @c_MottagetBelopp , @oh_MottagetBelopp ) + , @oh_MRP_InventoryTransferFlag = COALESCE ( @c_MRP_InventoryTransferFlag , @oh_MRP_InventoryTransferFlag ) + , @oh_No_Trigger_Exec = COALESCE ( @c_No_Trigger_Exec , @oh_No_Trigger_Exec ) + , @oh_OeKod = COALESCE ( @c_OeKod , @oh_OeKod ) + , @oh_OeStatusEdi = COALESCE ( @c_OeStatusEdi , @oh_OeStatusEdi ) + , @oh_OEUtskrDat = COALESCE ( @c_OEUtskrDat , @oh_OEUtskrDat ) + , @oh_OffertRadNrToOrdRadNr = COALESCE ( @c_OffertRadNrToOrdRadNr , @oh_OffertRadNrToOrdRadNr ) + , @oh_OffNr = COALESCE ( @c_OffNr , @oh_OffNr ) + , @oh_OhFaktTB = COALESCE ( @c_OhFaktTB , @oh_OhFaktTB ) + , @oh_OhFaktTBInklMoms = COALESCE ( @c_OhFaktTBInklMoms , @oh_OhFaktTBInklMoms ) + , @oh_OhOrdBerednDatBase = COALESCE ( @c_OhOrdBerednDatBase , @oh_OhOrdBerednDatBase ) + , @oh_OhOrdBerLevDatBase = COALESCE ( @c_OhOrdBerLevDatBase , @oh_OhOrdBerLevDatBase ) + , @oh_OhOrdKostnad = COALESCE ( @c_OhOrdKostnad , @oh_OhOrdKostnad ) + , @oh_OhOrdKostnadInklMoms = COALESCE ( @c_OhOrdKostnadInklMoms , @oh_OhOrdKostnadInklMoms ) + , @oh_OhOrdSum = COALESCE ( @c_OhOrdSum , @oh_OhOrdSum ) + , @oh_OhOrdSumInklMoms = COALESCE ( @c_OhOrdSumInklMoms , @oh_OhOrdSumInklMoms ) + , @oh_OhVbOrdSum = COALESCE ( @c_OhVbOrdSum , @oh_OhVbOrdSum ) + , @oh_OhVbOrdSumInklMoms = COALESCE ( @c_OhVbOrdSumInklMoms , @oh_OhVbOrdSumInklMoms ) + , @oh_OIngSkapad = COALESCE ( @c_OIngSkapad , @oh_OIngSkapad ) + , @oh_OkAttPlockaSattDatum = COALESCE ( @c_OkAttPlockaSattDatum , @oh_OkAttPlockaSattDatum ) + , @oh_OkAttPlockaStatus = COALESCE ( @c_OkAttPlockaStatus , @oh_OkAttPlockaStatus ) + , @oh_ole1 = COALESCE ( @c_ole1 , @oh_ole1 ) + , @oh_ole2 = COALESCE ( @c_ole2 , @oh_ole2 ) + , @oh_OrdBegLevDat = COALESCE ( @c_OrdBegLevDat , @oh_OrdBegLevDat ) + , @oh_OrdBerednDat = COALESCE ( @c_OrdBerednDat , @oh_OrdBerednDat ) + , @oh_OrdBerLevDat = COALESCE ( @c_OrdBerLevDat , @oh_OrdBerLevDat ) + , @oh_OrdBerLevTid = COALESCE ( @c_OrdBerLevTid , @oh_OrdBerLevTid ) + , @oh_OrdBeskr = COALESCE ( @c_OrdBeskr , @oh_OrdBeskr ) + , @oh_OrdBokningsStatus = COALESCE ( @c_OrdBokningsStatus , @oh_OrdBokningsStatus ) + , @oh_OrdDatum = COALESCE ( @c_OrdDatum , @oh_OrdDatum ) + , @oh_OrderAvslutad = COALESCE ( @c_OrderAvslutad , @oh_OrderAvslutad ) + , @oh_OrderBeloppIntFsg = COALESCE ( @c_OrderBeloppIntFsg , @oh_OrderBeloppIntFsg ) + , @oh_OrderBeloppIntKop = COALESCE ( @c_OrderBeloppIntKop , @oh_OrderBeloppIntKop ) + , @oh_OrderCostCurrency = COALESCE ( @c_OrderCostCurrency , @oh_OrderCostCurrency ) + , @oh_OrderEnding = COALESCE ( @c_OrderEnding , @oh_OrderEnding ) + , @oh_OrderKopplKod = COALESCE ( @c_OrderKopplKod , @oh_OrderKopplKod ) + , @oh_OrderKostnadIntFsg = COALESCE ( @c_OrderKostnadIntFsg , @oh_OrderKostnadIntFsg ) + , @oh_OrderKostnadIntKop = COALESCE ( @c_OrderKostnadIntKop , @oh_OrderKostnadIntKop ) + , @oh_OrderNr = COALESCE ( @c_OrderNr , @oh_OrderNr ) + , @oh_OrderNrAlfa = COALESCE ( @c_OrderNrAlfa , @oh_OrderNrAlfa ) + , @oh_OrderNrKoppl = COALESCE ( @c_OrderNrKoppl , @oh_OrderNrKoppl ) + , @oh_OrderNrKorr = COALESCE ( @c_OrderNrKorr , @oh_OrderNrKorr ) + , @oh_OrderNrOffert = COALESCE ( @c_OrderNrOffert , @oh_OrderNrOffert ) + , @oh_OrderNrOrg = COALESCE ( @c_OrderNrOrg , @oh_OrderNrOrg ) + , @oh_OrderNrServ = COALESCE ( @c_OrderNrServ , @oh_OrderNrServ ) + , @oh_OrderTBIntFsg = COALESCE ( @c_OrderTBIntFsg , @oh_OrderTBIntFsg ) + , @oh_OrderTBIntKop = COALESCE ( @c_OrderTBIntKop , @oh_OrderTBIntKop ) + , @oh_OrderTextKod = COALESCE ( @c_OrderTextKod , @oh_OrderTextKod ) + , @oh_OrderTGIntFsg = COALESCE ( @c_OrderTGIntFsg , @oh_OrderTGIntFsg ) + , @oh_OrderTGIntKop = COALESCE ( @c_OrderTGIntKop , @oh_OrderTGIntKop ) + , @oh_OrdFoljesedelsNr = COALESCE ( @c_OrdFoljesedelsNr , @oh_OrdFoljesedelsNr ) + , @oh_OrdKostnad = COALESCE ( @c_OrdKostnad , @oh_OrdKostnad ) + , @oh_OrdKostnadInklMoms = COALESCE ( @c_OrdKostnadInklMoms , @oh_OrdKostnadInklMoms ) + , @oh_OrdLevAdr1 = COALESCE ( @c_OrdLevAdr1 , @oh_OrdLevAdr1 ) + , @oh_OrdLevAdr2 = COALESCE ( @c_OrdLevAdr2 , @oh_OrdLevAdr2 ) + , @oh_OrdLevAdr3 = COALESCE ( @c_OrdLevAdr3 , @oh_OrdLevAdr3 ) + , @oh_OrdLevAdr4 = COALESCE ( @c_OrdLevAdr4 , @oh_OrdLevAdr4 ) + , @oh_OrdLevAdrBstOrt = COALESCE ( @c_OrdLevAdrBstOrt , @oh_OrdLevAdrBstOrt ) + , @oh_OrdLevAdrLandsKod = COALESCE ( @c_OrdLevAdrLandsKod , @oh_OrdLevAdrLandsKod ) + , @oh_OrdLevAdrProvinceCode = COALESCE ( @c_OrdLevAdrProvinceCode , @oh_OrdLevAdrProvinceCode ) + , @oh_OrdLevAnvisnRad1 = COALESCE ( @c_OrdLevAnvisnRad1 , @oh_OrdLevAnvisnRad1 ) + , @oh_OrdLevAnvisnRad2 = COALESCE ( @c_OrdLevAnvisnRad2 , @oh_OrdLevAnvisnRad2 ) + , @oh_OrdLevDat = COALESCE ( @c_OrdLevDat , @oh_OrdLevDat ) + , @oh_OrdLevDatOrg = COALESCE ( @c_OrdLevDatOrg , @oh_OrdLevDatOrg ) + , @oh_OrdLevNr = COALESCE ( @c_OrdLevNr , @oh_OrdLevNr ) + , @oh_OrdLevPlats1 = COALESCE ( @c_OrdLevPlats1 , @oh_OrdLevPlats1 ) + , @oh_OrdLovLevDat = COALESCE ( @c_OrdLovLevDat , @oh_OrdLovLevDat ) + , @oh_OrdRabatt = COALESCE ( @c_OrdRabatt , @oh_OrdRabatt ) + , @oh_OrdRestNot = COALESCE ( @c_OrdRestNot , @oh_OrdRestNot ) + , @oh_OrdRestNr = COALESCE ( @c_OrdRestNr , @oh_OrdRestNr , 0 ) + , @oh_OrdStat = COALESCE ( @c_OrdStat , @oh_OrdStat ) + , @oh_OrdSum = COALESCE ( @c_OrdSum , @oh_OrdSum ) + , @oh_OrdSumExclCredChk = COALESCE ( @c_OrdSumExclCredChk , @oh_OrdSumExclCredChk ) + , @oh_OrdSumExklMoms = COALESCE ( @c_OrdSumExklMoms , @oh_OrdSumExklMoms ) + , @oh_OrdSumFraktBer = COALESCE ( @c_OrdSumFraktBer , @oh_OrdSumFraktBer ) + , @oh_OrdSumInklMoms = COALESCE ( @c_OrdSumInklMoms , @oh_OrdSumInklMoms ) + , @oh_OrdSumInklMomsExclCredChk = COALESCE ( @c_OrdSumInklMomsExclCredChk , @oh_OrdSumInklMomsExclCredChk ) + , @oh_OrdSumRabGr = COALESCE ( @c_OrdSumRabGr , @oh_OrdSumRabGr ) + , @oh_OrdSumReg = COALESCE ( @c_OrdSumReg , @oh_OrdSumReg ) + , @oh_OrdSumValReg = COALESCE ( @c_OrdSumValReg , @oh_OrdSumValReg ) + , @oh_OrdTranspDat = COALESCE ( @c_OrdTranspDat , @oh_OrdTranspDat ) + , @oh_OrdTyp = COALESCE ( @c_OrdTyp , @oh_OrdTyp ) + , @oh_OrdVerklLevDat = COALESCE ( @c_OrdVerklLevDat , @oh_OrdVerklLevDat ) + , @oh_OULager_Auto_Utplock = COALESCE ( @c_OULager_Auto_Utplock , @oh_OULager_Auto_Utplock ) + , @oh_OULager_Leverera_Allt = COALESCE ( @c_OULager_Leverera_Allt , @oh_OULager_Leverera_Allt ) + , @oh_OvrFaktAvgift1 = COALESCE ( @c_OvrFaktAvgift1 , @oh_OvrFaktAvgift1 ) + , @oh_OvrFaktAvgift10 = COALESCE ( @c_OvrFaktAvgift10 , @oh_OvrFaktAvgift10 ) + , @oh_OvrFaktAvgift2 = COALESCE ( @c_OvrFaktAvgift2 , @oh_OvrFaktAvgift2 ) + , @oh_OvrFaktAvgift3 = COALESCE ( @c_OvrFaktAvgift3 , @oh_OvrFaktAvgift3 ) + , @oh_OvrFaktAvgift4 = COALESCE ( @c_OvrFaktAvgift4 , @oh_OvrFaktAvgift4 ) + , @oh_OvrFaktAvgift5 = COALESCE ( @c_OvrFaktAvgift5 , @oh_OvrFaktAvgift5 ) + , @oh_OvrFaktAvgift6 = COALESCE ( @c_OvrFaktAvgift6 , @oh_OvrFaktAvgift6 ) + , @oh_OvrFaktAvgift7 = COALESCE ( @c_OvrFaktAvgift7 , @oh_OvrFaktAvgift7 ) + , @oh_OvrFaktAvgift8 = COALESCE ( @c_OvrFaktAvgift8 , @oh_OvrFaktAvgift8 ) + , @oh_OvrFaktAvgift9 = COALESCE ( @c_OvrFaktAvgift9 , @oh_OvrFaktAvgift9 ) + , @oh_OvrFaktKostn1Fakt = COALESCE ( @c_OvrFaktKostn1Fakt , @oh_OvrFaktKostn1Fakt ) + , @oh_OvrFaktKostn2Fakt = COALESCE ( @c_OvrFaktKostn2Fakt , @oh_OvrFaktKostn2Fakt ) + , @oh_OvrFaktKostnad1 = COALESCE ( @c_OvrFaktKostnad1 , @oh_OvrFaktKostnad1 ) + , @oh_OvrFaktKostnad2 = COALESCE ( @c_OvrFaktKostnad2 , @oh_OvrFaktKostnad2 ) + , @oh_OvrFaktKostnInland1 = COALESCE ( @c_OvrFaktKostnInland1 , @oh_OvrFaktKostnInland1 ) + , @oh_OvrFaktKostnInland2 = COALESCE ( @c_OvrFaktKostnInland2 , @oh_OvrFaktKostnInland2 ) + , @oh_PackagingDate = COALESCE ( @c_PackagingDate , @oh_PackagingDate ) + , @oh_PackareKod = COALESCE ( @c_PackareKod , @oh_PackareKod ) + , @oh_PackSedelUtskrDat = COALESCE ( @c_PackSedelUtskrDat , @oh_PackSedelUtskrDat ) + , @oh_PaymenttransID = COALESCE ( @c_PaymenttransID , @oh_PaymenttransID ) + , @oh_PdmCount = COALESCE ( @c_PdmCount , @oh_PdmCount ) + , @oh_PersSign = COALESCE ( @c_PersSign , @oh_PersSign ) + , @oh_PickingLockedByUser = COALESCE ( @c_PickingLockedByUser , @oh_PickingLockedByUser ) + , @oh_PlockIndexOrder = COALESCE ( @c_PlockIndexOrder , @oh_PlockIndexOrder ) + , @oh_PlockJnrOrder = COALESCE ( @c_PlockJnrOrder , @oh_PlockJnrOrder ) + , @oh_PLUtskrDat = COALESCE ( @c_PLUtskrDat , @oh_PLUtskrDat ) + , @oh_PrisJustOrder = COALESCE ( @c_PrisJustOrder , @oh_PrisJustOrder ) + , @oh_PrisJustOrderKost = COALESCE ( @c_PrisJustOrderKost , @oh_PrisJustOrderKost ) + , @oh_PrisLista = COALESCE ( @c_PrisLista , @oh_PrisLista ) + , @oh_ProjCode = COALESCE ( @c_ProjCode , @oh_ProjCode ) + , @oh_ProspektId = COALESCE ( @c_ProspektId , @oh_ProspektId ) + , @oh_PVMSeasonId = COALESCE ( @c_PVMSeasonId , @oh_PVMSeasonId ) + , @oh_QQ_Ins_Trg_Start = COALESCE ( @c_QQ_Ins_Trg_Start , @oh_QQ_Ins_Trg_Start ) + , @oh_RabKlass = COALESCE ( @c_RabKlass , @oh_RabKlass ) + , @oh_Referensnummer = COALESCE ( @c_Referensnummer , @oh_Referensnummer ) + , @oh_RegDat = COALESCE ( @c_RegDat , @oh_RegDat ) + , @oh_ReplicateRecord = COALESCE ( @c_ReplicateRecord , @oh_ReplicateRecord ) + , @oh_RestArtBtotVikt = COALESCE ( @c_RestArtBtotVikt , @oh_RestArtBtotVikt ) + , @oh_RestArtVikt = COALESCE ( @c_RestArtVikt , @oh_RestArtVikt ) + , @oh_RestArtVolym = COALESCE ( @c_RestArtVolym , @oh_RestArtVolym ) + , @oh_RestBehKod = COALESCE ( @c_RestBehKod , @oh_RestBehKod ) + , @oh_RowCreatedBy = COALESCE ( @c_RowCreatedBy , @oh_RowCreatedBy ) + , @oh_RowCreatedDt = COALESCE ( @c_RowCreatedDt , @oh_RowCreatedDt ) + , @oh_RowCreatedUTCDT = COALESCE ( @c_RowCreatedUTCDT , @oh_RowCreatedUTCDT ) + , @oh_RowUpdatedBy = COALESCE ( @c_RowUpdatedBy , @oh_RowUpdatedBy ) + , @oh_RowUpdatedCols = COALESCE ( @c_RowUpdatedCols , @oh_RowUpdatedCols ) + , @oh_RowUpdatedDt = COALESCE ( @c_RowUpdatedDt , @oh_RowUpdatedDt ) + , @oh_RowUpdatedUTCDT = COALESCE ( @c_RowUpdatedUTCDT , @oh_RowUpdatedUTCDT ) + , @oh_RptUnitNo = COALESCE ( @c_RptUnitNo , @oh_RptUnitNo ) + , @oh_RU_Account = COALESCE ( @c_RU_Account , @oh_RU_Account ) + , @oh_SalesTaxHandling = COALESCE ( @c_SalesTaxHandling , @oh_SalesTaxHandling ) + , @oh_SalesType = COALESCE ( @c_SalesType , @oh_SalesType ) + , @oh_Saljare = COALESCE ( @c_Saljare , @oh_Saljare ) + , @oh_SamFaktUtskr = COALESCE ( @c_SamFaktUtskr , @oh_SamFaktUtskr ) + , @oh_SamInKopMark = COALESCE ( @c_SamInKopMark , @oh_SamInKopMark ) + , @oh_SendEdi = COALESCE ( @c_SendEdi , @oh_SendEdi ) + , @oh_SendEdiDT = COALESCE ( @c_SendEdiDT , @oh_SendEdiDT ) + , @oh_ShuffleOrder = COALESCE ( @c_ShuffleOrder , @oh_ShuffleOrder ) + , @oh_SkrivUtskSk = COALESCE ( @c_SkrivUtskSk , @oh_SkrivUtskSk ) + , @oh_SlutKundNamn1 = COALESCE ( @c_SlutKundNamn1 , @oh_SlutKundNamn1 ) + , @oh_SlutKundNamn2 = COALESCE ( @c_SlutKundNamn2 , @oh_SlutKundNamn2 ) + , @oh_SprakKod = COALESCE ( @c_SprakKod , @oh_SprakKod ) + , @oh_SQLCmd2EnterTrg = COALESCE ( @c_SQLCmd2EnterTrg , @oh_SQLCmd2EnterTrg ) + , @oh_StockReplenishment = COALESCE ( @c_StockReplenishment , @oh_StockReplenishment ) + , @oh_TA_AmtCOD = COALESCE ( @c_TA_AmtCOD , @oh_TA_AmtCOD ) + , @oh_TA_ConsNo = COALESCE ( @c_TA_ConsNo , @oh_TA_ConsNo ) + , @oh_TA_CustomerMessage = COALESCE ( @c_TA_CustomerMessage , @oh_TA_CustomerMessage ) + , @oh_TA_Edit = COALESCE ( @c_TA_Edit , @oh_TA_Edit ) + , @oh_TA_FaxNotifiedNo = COALESCE ( @c_TA_FaxNotifiedNo , @oh_TA_FaxNotifiedNo ) + , @oh_TA_GANno = COALESCE ( @c_TA_GANno , @oh_TA_GANno ) + , @oh_TA_IntAutoNo = COALESCE ( @c_TA_IntAutoNo , @oh_TA_IntAutoNo ) + , @oh_TA_Loadmeter = COALESCE ( @c_TA_Loadmeter , @oh_TA_Loadmeter ) + , @oh_TA_MailNotified = COALESCE ( @c_TA_MailNotified , @oh_TA_MailNotified ) + , @oh_TA_PhonNotifiedNo = COALESCE ( @c_TA_PhonNotifiedNo , @oh_TA_PhonNotifiedNo ) + , @oh_TA_SMSNotifiedNo = COALESCE ( @c_TA_SMSNotifiedNo , @oh_TA_SMSNotifiedNo ) + , @oh_TA_TemplKompCd = COALESCE ( @c_TA_TemplKompCd , @oh_TA_TemplKompCd ) + , @oh_TaxAreaCode1 = COALESCE ( @c_TaxAreaCode1 , @oh_TaxAreaCode1 ) + , @oh_TaxAreaCode2 = COALESCE ( @c_TaxAreaCode2 , @oh_TaxAreaCode2 ) + , @oh_TaxAreaCode3 = COALESCE ( @c_TaxAreaCode3 , @oh_TaxAreaCode3 ) + , @oh_TaxAreaCode4 = COALESCE ( @c_TaxAreaCode4 , @oh_TaxAreaCode4 ) + , @oh_TaxAreaCode5 = COALESCE ( @c_TaxAreaCode5 , @oh_TaxAreaCode5 ) + , @oh_TaxAreaRate = COALESCE ( @c_TaxAreaRate , @oh_TaxAreaRate ) + , @oh_TaxCode = COALESCE ( @c_TaxCode , @oh_TaxCode ) + , @oh_TerminsSakradOrder = COALESCE ( @c_TerminsSakradOrder , @oh_TerminsSakradOrder ) + , @oh_TextEfterDokRader = COALESCE ( @c_TextEfterDokRader , @oh_TextEfterDokRader ) + , @oh_TextKod = COALESCE ( @c_TextKod , @oh_TextKod ) + , @oh_TillbakaBelopp = COALESCE ( @c_TillbakaBelopp , @oh_TillbakaBelopp ) + , @oh_TillLagStalle = COALESCE ( @c_TillLagStalle , @oh_TillLagStalle ) + , @oh_TimeZoneCode = COALESCE ( @c_TimeZoneCode , @oh_TimeZoneCode ) + , @oh_TransitLeverans = COALESCE ( @c_TransitLeverans , @oh_TransitLeverans ) + , @oh_TransportorsKod = COALESCE ( @c_TransportorsKod , @oh_TransportorsKod ) + , @oh_UtskrBestDokSkaGoras = COALESCE ( @c_UtskrBestDokSkaGoras , @oh_UtskrBestDokSkaGoras ) + , @oh_UtskrBestDokUtskrDT = COALESCE ( @c_UtskrBestDokUtskrDT , @oh_UtskrBestDokUtskrDT ) + , @oh_UtskrDokLovSkaGoras = COALESCE ( @c_UtskrDokLovSkaGoras , @oh_UtskrDokLovSkaGoras ) + , @oh_UtskrDokLovUtskrDT = COALESCE ( @c_UtskrDokLovUtskrDT , @oh_UtskrDokLovUtskrDT ) + , @oh_ValDat = COALESCE ( @c_ValDat , @oh_ValDat ) + , @oh_ValKod = COALESCE ( @c_ValKod , @oh_ValKod ) + , @oh_ValKurs = COALESCE ( @c_ValKurs , @oh_ValKurs ) + , @oh_VaruProv = COALESCE ( @c_VaruProv , @oh_VaruProv ) + , @oh_VAT_Type = COALESCE ( @c_VAT_Type , @oh_VAT_Type ) + , @oh_vb_EmballageKostnad = COALESCE ( @c_vb_EmballageKostnad , @oh_vb_EmballageKostnad ) + , @oh_vb_EmballageKostnInland = COALESCE ( @c_vb_EmballageKostnInland , @oh_vb_EmballageKostnInland ) + , @oh_vb_ExpeditionKostnad = COALESCE ( @c_vb_ExpeditionKostnad , @oh_vb_ExpeditionKostnad ) + , @oh_vb_ForsakringsKostnad = COALESCE ( @c_vb_ForsakringsKostnad , @oh_vb_ForsakringsKostnad ) + , @oh_vb_ForsakrKostnInland = COALESCE ( @c_vb_ForsakrKostnInland , @oh_vb_ForsakrKostnInland ) + , @oh_vb_ForskottBelopp = COALESCE ( @c_vb_ForskottBelopp , @oh_vb_ForskottBelopp ) + , @oh_vb_ForskottBeloppAck = COALESCE ( @c_vb_ForskottBeloppAck , @oh_vb_ForskottBeloppAck ) + , @oh_vb_FraktKostnBer = COALESCE ( @c_vb_FraktKostnBer , @oh_vb_FraktKostnBer ) + , @oh_vb_FraktKostnDeb = COALESCE ( @c_vb_FraktKostnDeb , @oh_vb_FraktKostnDeb ) + , @oh_vb_FraktKostnInland = COALESCE ( @c_vb_FraktKostnInland , @oh_vb_FraktKostnInland ) + , @oh_vb_FraktKostnMan = COALESCE ( @c_vb_FraktKostnMan , @oh_vb_FraktKostnMan ) + , @oh_vb_OvrFaktAvgift1 = COALESCE ( @c_vb_OvrFaktAvgift1 , @oh_vb_OvrFaktAvgift1 ) + , @oh_vb_OvrFaktAvgift10 = COALESCE ( @c_vb_OvrFaktAvgift10 , @oh_vb_OvrFaktAvgift10 ) + , @oh_vb_OvrFaktAvgift2 = COALESCE ( @c_vb_OvrFaktAvgift2 , @oh_vb_OvrFaktAvgift2 ) + , @oh_vb_OvrFaktAvgift3 = COALESCE ( @c_vb_OvrFaktAvgift3 , @oh_vb_OvrFaktAvgift3 ) + , @oh_vb_OvrFaktAvgift4 = COALESCE ( @c_vb_OvrFaktAvgift4 , @oh_vb_OvrFaktAvgift4 ) + , @oh_vb_OvrFaktAvgift5 = COALESCE ( @c_vb_OvrFaktAvgift5 , @oh_vb_OvrFaktAvgift5 ) + , @oh_vb_OvrFaktAvgift6 = COALESCE ( @c_vb_OvrFaktAvgift6 , @oh_vb_OvrFaktAvgift6 ) + , @oh_vb_OvrFaktAvgift7 = COALESCE ( @c_vb_OvrFaktAvgift7 , @oh_vb_OvrFaktAvgift7 ) + , @oh_vb_OvrFaktAvgift8 = COALESCE ( @c_vb_OvrFaktAvgift8 , @oh_vb_OvrFaktAvgift8 ) + , @oh_vb_OvrFaktAvgift9 = COALESCE ( @c_vb_OvrFaktAvgift9 , @oh_vb_OvrFaktAvgift9 ) + , @oh_vb_OvrFaktKostnad1 = COALESCE ( @c_vb_OvrFaktKostnad1 , @oh_vb_OvrFaktKostnad1 ) + , @oh_vb_OvrFaktKostnad2 = COALESCE ( @c_vb_OvrFaktKostnad2 , @oh_vb_OvrFaktKostnad2 ) + , @oh_vb_OvrFaktKostnInland1 = COALESCE ( @c_vb_OvrFaktKostnInland1 , @oh_vb_OvrFaktKostnInland1 ) + , @oh_vb_OvrFaktKostnInland2 = COALESCE ( @c_vb_OvrFaktKostnInland2 , @oh_vb_OvrFaktKostnInland2 ) + , @oh_VbOrdSum = COALESCE ( @c_VbOrdSum , @oh_VbOrdSum ) + , @oh_VbOrdSumExklMoms = COALESCE ( @c_VbOrdSumExklMoms , @oh_VbOrdSumExklMoms ) + , @oh_VbOrdSumInklMoms = COALESCE ( @c_VbOrdSumInklMoms , @oh_VbOrdSumInklMoms ) + , @oh_VbOrdSumRabGr = COALESCE ( @c_VbOrdSumRabGr , @oh_VbOrdSumRabGr ) + , @oh_ViktSumOrder = COALESCE ( @c_ViktSumOrder , @oh_ViktSumOrder ) + , @oh_VolHeight = COALESCE ( @c_VolHeight , @oh_VolHeight ) + , @oh_VolLength = COALESCE ( @c_VolLength , @oh_VolLength ) + , @oh_Volume = COALESCE ( @c_Volume , @oh_Volume ) + , @oh_VolWidth = COALESCE ( @c_VolWidth , @oh_VolWidth ) + , @oh_VRef = COALESCE ( @c_VRef , @oh_VRef ) + , @oh_webpublish = COALESCE ( @c_webpublish , @oh_webpublish ) + , @oh_WorkFaktNr = COALESCE ( @c_WorkFaktNr , @oh_WorkFaktNr ) + +select @oh_ForetagKod = @c_ForetagKod +select @oh_PersSign = @c_PersSign +select @oh_FtgNr = @c_FtgNr +select @oh_LagStalle = @c_LagStalle + +-- sy1oh02 0 + + +-- ASSIGN from SY1 sy1oh02 + +select + @oh_BetKod = COALESCE ( @c_BetKod, [sy1].[BetKod], @oh_BetKod ) -- 0 + ,@oh_BusinessUnit = COALESCE ( @c_BusinessUnit, [sy1].[BusinessUnit], @oh_BusinessUnit ) -- 200 + ,@oh_DelBokningTillaten = COALESCE ( @c_DelBokningTillaten, [sy1].[DelBokningTillaten], @oh_DelBokningTillaten ) -- 10 + ,@oh_DelLevTillaten = COALESCE ( @c_DelLevTillaten, [sy1].[DelLevTillaten], @oh_DelLevTillaten ) -- 10 + ,@oh_ForetagKod = COALESCE ( @c_ForetagKod, [sy1].[ForetagKod], @oh_ForetagKod ) -- 849 + ,@oh_LagStalle = COALESCE ( @c_LagStalle, [sy1].[LagStalle], @oh_LagStalle ) -- 2 + ,@oh_LandsKod = COALESCE ( @c_LandsKod, [sy1].[LandsKod], @oh_LandsKod ) -- 0 + ,@oh_LevHandlKod = COALESCE ( @c_LevHandlKod, [sy1].[LevHandlKod], @oh_LevHandlKod ) -- 0 + ,@oh_LevSattKod = COALESCE ( @c_LevSattKod, [sy1].[LevSattKod], @oh_LevSattKod ) -- 0 + ,@oh_LevVillkKod = COALESCE ( @c_LevVillkKod, [sy1].[LevVillkKod], @oh_LevVillkKod ) -- 0 + ,@oh_MomsKod = COALESCE ( @c_MomsKod, [sy1].[MomsKod], @oh_MomsKod ) -- 0 + ,@oh_OeKod = COALESCE ( @c_OeKod, [sy1].[OeKod], @oh_OeKod ) -- 930 + ,@oh_OULager_Auto_Utplock = COALESCE ( @c_OULager_Auto_Utplock, [sy1].[OULager_Auto_Utplock], @oh_OULager_Auto_Utplock ) -- 0 + ,@oh_RestBehKod = COALESCE ( @c_RestBehKod, [sy1].[RestBehKod], @oh_RestBehKod ) -- 0 + ,@oh_SprakKod = COALESCE ( @c_SprakKod, [sy1].[SprakKod], @oh_SprakKod ) -- 0 + ,@oh_LagStalle = COALESCE ( @c_LagStalle, [sy1].[LagStalle], @oh_LagStalle ) -- 300 + ,@oh_PrisLista = COALESCE ( @c_PrisLista, [sy1].[PrisLista], @oh_PrisLista ) -- 0 + ,@oh_Saljare = COALESCE ( @c_Saljare, [sy1].[Saljare], @oh_Saljare ) -- 900 + ,@oh_ValKod = COALESCE ( @c_ValKod, [sy1].[ValKod], @oh_ValKod ) -- 0 + ,@oh_ViktSumOrder = COALESCE ( @c_ViktSumOrder, [sy1].[ViktSumOrder], @oh_ViktSumOrder ) -- 0 + ,@sy1_AdjustMinutes2GetLocalTime = COALESCE( sy1.AdjustMinutes2GetLocalTime, 0 ) + ,@sy1_TimeZoneCode = sy1.TimeZoneCode + ,@sy1_CurrencyDecimals = COALESCE( sy1.CurrencyDecimals, 0 ) + ,@sy1_Currency = sy1.ValKod + -- + -- + from [sy1] with (ReadUnCommitted) where [sy1].[ForetagKod] = @c_ForetagKod; +if @@RowCount<>1 or @@Error<>0 begin + print 'Jeeves_Init_Insert_oh; SY1; Invalid my_own_companycode <'+ISNULL(convert(varchar,@c_ForetagKod),'NULL')+'>'; + while @@TranCount > @Enter_TranCount ROLLBACK TRANSACTION; + while @@TranCount < @Enter_TranCount BEGIN TRANSACTION; + return -101; +end; + +-- sy1oh02 0 + + +-- ASSIGN from SY2 sy1oh02 + +select + @oh_AnmodanMark = COALESCE( @c_AnmodanMark, [sy2].[AnmodanMark], @oh_AnmodanMark ) -- 105 + ,@oh_BusinessUnit = COALESCE( @c_BusinessUnit, [sy2].[BusinessUnit], @oh_BusinessUnit ) -- 210 + ,@oh_OrdStat = COALESCE( @c_OrdStat, [sy2].[OrdStat], @oh_OrdStat ) -- 110 + ,@oh_OrdTyp = COALESCE( @c_OrdTyp, [sy2].[OrdTyp], @oh_OrdTyp ) -- 5 + ,@oh_PersSign = COALESCE( @c_PersSign, [sy2].[PersSign], @oh_PersSign ) -- 0 + ,@oh_VRef = COALESCE( @c_VRef, [sy2].[RespNamn], @oh_VRef ) -- 0 + ,@oh_SamInkopMark = COALESCE( @c_SamInkopMark, [sy2].[SamInkopMark], @oh_SamInkopMark ) -- 100 + ,@sy2_AdjustMinutes2GetLocalTime = COALESCE ( sy2.AdjustMinutes2GetLocalTime, 0 ) + ,@sy2_TimeZoneCode = sy2.TimeZoneCode + -- + -- + from [sy2] with (ReadUnCommitted) where [PersSign] = @c_PersSign; +if @@RowCount<>1 or @@Error<>0 begin + print 'Jeeves_Init_Insert_oh; SY2; invalid my_own_Signature <'+ISNULL(@c_PersSign,'NULL')+'>'; + while @@TranCount > @Enter_TranCount ROLLBACK TRANSACTION; + while @@TranCount < @Enter_TranCount BEGIN TRANSACTION; + return -102; +end; + +if @c_AdjustMinutes2GetLocalTime is not null + select @AM2GLT = @c_AdjustMinutes2GetLocalTime +else + select @AM2GLT = coalesce( @sy1_AdjustMinutes2GetLocalTime, 0 ) + coalesce( @sy2_AdjustMinutes2GetLocalTime, 0 ) + +declare + @LocalDateAndTime DateTime, + @UTCDateAndTime DateTime, + @use_when_StrDateTime DateTime, + @use_when_DefStrDateTime Jeeves_StrDateTime; +select + @LocalDateAndTime = DateAdd( MINUTE, @AM2GLT, GetDate() ), + @UTCDateAndTime = GetUTCDate(); +if @sy1_TimeZoneCode >= 0 or @sy2_TimeZoneCode >= 0 or @c_TimeZoneCode >= 0 begin + select + @LocalDateAndTime = dbo.Jeeves_FN_GetLocalDateTime( GetDate(), @c_ForetagKod, @c_PersSign, @c_TimeZoneCode ); + select + @use_when_StrDateTime = @UTCDateAndTime, + @use_when_DefStrDateTime = convert( char(8), @UTCDateAndTime, 112 ) + ' ' + convert( varchar(12), @UTCDateAndTime, 114 ); +end else begin + select + @use_when_StrDateTime = @LocalDateAndTime, + @use_when_DefStrDateTime = convert( char(8), @LocalDateAndTime, 112 ) + ' ' + convert( varchar(12), @LocalDateAndTime, 114 ); +end; + +if @sy1_CurrencyDecimals is null or @sy1_CurrencyDecimals < 0 or @sy1_CurrencyDecimals > 4 + select @sy1_CurrencyDecimals = 2 + + +-- ASSIGN from SY1 sy1oh02 + +select + @oh_OrderCostCurrency = COALESCE ( @c_OrderCostCurrency , '0' ) -- 70 + ,@oh_KundSpecTextBe = COALESCE ( @c_KundSpecTextBe , '0' ) -- 60 + ,@oh_KundSpecTextTo = COALESCE ( @c_KundSpecTextTo , '0' ) -- 58 + ,@oh_FraktSkrymmeKod = COALESCE ( @c_FraktSkrymmeKod , '0' ) -- 40 + ,@oh_LevForeTolv = COALESCE ( @c_LevForeTolv , '0' ) -- 30 + ,@oh_OrdRestNot = COALESCE ( @c_OrdRestNot , '0' ) -- 22 + ,@oh_OffertRadNrToOrdRadNr = COALESCE ( @c_OffertRadNrToOrdRadNr , '1' ) -- 75 + ,@oh_KundSpecTextFa = COALESCE ( @c_KundSpecTextFa , '1' ) -- 56 + ,@oh_KundSpecTextFs = COALESCE ( @c_KundSpecTextFs , '1' ) -- 54 + ,@oh_KundSpecTextPl = COALESCE ( @c_KundSpecTextPl , '1' ) -- 52 + ,@oh_KundSpecTextOe = COALESCE ( @c_KundSpecTextOe , '1' ) -- 50 + ,@oh_OrdRestNr = COALESCE ( @c_OrdRestNr , 0 ) -- 900 + ,@oh_KreditSparrStatus = COALESCE ( @c_KreditSparrStatus , 0 ) -- 80 + ,@oh_OrdLevNr = COALESCE ( @c_OrdLevNr , 0 ) -- 23 + ,@oh_OrdRabatt = COALESCE ( @c_OrdRabatt , 0 ) -- 10 + ,@oh_OrderNr = COALESCE ( @c_OrderNr , 0 ) -- 0 + ,@oh_OrdTyp = COALESCE ( @c_OrdTyp , 1 ) -- 4 + ,@oh_OrdStat = COALESCE ( @c_OrdStat , 10 ) -- 10 + ,@oh_OrdBerednDat = COALESCE ( @c_OrdBerednDat , convert( varchar(8), @LocalDateAndTime, 112 ) ) -- 20 + ,@oh_OrdBerLevDat = COALESCE ( @c_OrdBerLevDat , convert( varchar(8), @LocalDateAndTime, 112 ) ) -- 10 + ,@oh_RegDat = COALESCE ( @c_RegDat , convert( varchar(8), @LocalDateAndTime, 112 ) ) -- 1 + ,@oh_OrdDatum = COALESCE ( @c_OrdDatum , convert( varchar(8), @LocalDateAndTime, 112 ) ) -- 0 + +if @oh_OrderNr is NULL or @oh_OrderNr = 0 begin + exec @x = JEEVES_Calc_OrderNr + @OrdTyp = @oh_OrdTyp, + @PersSign = @oh_PersSign, + @Return_Type = 'O', + @Chk_OrderNr = NULL, + @New_OrderNr = @oh_OrderNr output, + @c_Foretagkod = @oh_Foretagkod + select @dbe=@@Error + if @x>0 and @x=@oh_OrderNr select @x=0 + if @x<>0 or @dbe<>0 begin + while @@TranCount > @Enter_TranCount ROLLBACK TRAN + while @@TranCount < @Enter_TranCount BEGIN TRAN + print 'Jeeves_Init_Insert_oh, returned from Jeeves_Calc_OrderNr with error = ' + coalesce(convert(varchar,@dbe),'NULL') + '/' +coalesce(convert(varchar,@x),'NULL') + return -201 + end + select @c_OrderNr=@oh_OrderNr +end +if @oh_OrderNrAlfa is null select @oh_OrderNrAlfa = convert(varchar,@oh_OrderNr) + + +-- ASSIGN from ofh Sequence=NULL + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign OHofh01' +if + @oh_ForetagKod is not NULL -- -1 + and @oh_OffNr is not NULL -- 0 +begin + select + @oh_BetKod = COALESCE( @c_BetKod, [ofh].[BetKod], @oh_BetKod ) -- 0 ztstring + ,@oh_DistrKod = COALESCE( @c_DistrKod, [ofh].[DistrKod], @oh_DistrKod ) -- 0 ztstring + ,@oh_ExpAvgKd = COALESCE( @c_ExpAvgKd, [ofh].[ExpAvgKd], @oh_ExpAvgKd ) -- 0 ztBoolean + ,@oh_FraktAvgKd = COALESCE( @c_FraktAvgKd, [ofh].[FraktAvgKd], @oh_FraktAvgKd ) -- 0 ztBoolean + ,@oh_FsKd = COALESCE( @c_FsKd, [ofh].[FsKd], @oh_FsKd ) -- 0 ztBoolean + ,@oh_FtgKontaktNr = COALESCE( @c_FtgKontaktNr, [ofh].[FtgKontaktNr], @oh_FtgKontaktNr ) -- 110 ztInteger + ,@oh_FtgNr = COALESCE( @c_FtgNr, [ofh].[FtgNr], @oh_FtgNr ) -- 10 ztCompanyNo + ,@oh_ftgPostnr = COALESCE( @c_ftgPostnr, [ofh].[ftgPostnr], @oh_ftgPostnr ) -- 120 ztstring + ,@oh_GodsMarke1 = COALESCE( @c_GodsMarke1, [ofh].[GodsMarke1], @oh_GodsMarke1 ) -- 58 ztString + ,@oh_GodsMarke2 = COALESCE( @c_GodsMarke2, [ofh].[GodsMarke2], @oh_GodsMarke2 ) -- 60 ztString + ,@oh_GodsMarke3 = COALESCE( @c_GodsMarke3, [ofh].[GodsMarke3], @oh_GodsMarke3 ) -- 65 ztString + ,@oh_GodsMarke4 = COALESCE( @c_GodsMarke4, [ofh].[GodsMarke4], @oh_GodsMarke4 ) -- 70 ztString + ,@oh_KostStalleKod = COALESCE( @c_KostStalleKod, [ofh].[KostStalleKod], @oh_KostStalleKod ) -- 0 ztstring + ,@oh_KundBestNamn = COALESCE( @c_KundBestNamn, [ofh].[KundBestNamn], @oh_KundBestNamn ) -- 10 ztstring + ,@oh_KundBestNr = COALESCE( @c_KundBestNr, [ofh].[KundBestNr], @oh_KundBestNr ) -- 10 ztString + ,@oh_KundBetalareNr = COALESCE( @c_KundBetalareNr, [ofh].[KundBetalareNr], @oh_KundBetalareNr ) -- 0 ztCompanyNo + ,@oh_KundKategoriKod = COALESCE( @c_KundKategoriKod, [ofh].[KundKategoriKod], @oh_KundKategoriKod ) -- 0 ztInteger + ,@oh_KundRabatt = COALESCE( @c_KundRabatt, [ofh].[KundRabatt], @oh_KundRabatt ) -- 90 ZtDecimal73 + ,@oh_KundRef2 = COALESCE( @c_KundRef2, [ofh].[KundRef2], @oh_KundRef2 ) -- 10 ztString + ,@oh_LagStalle = COALESCE( @c_LagStalle, [ofh].[LagStalle], @oh_LagStalle ) -- 0 ztstring + ,@oh_LandsKod = COALESCE( @c_LandsKod, [ofh].[LandsKod], @oh_LandsKod ) -- 0 ztString + ,@oh_LevHandlKod = COALESCE( @c_LevHandlKod, [ofh].[LevHandlKod], @oh_LevHandlKod ) -- 0 ztBoolean + ,@oh_LevSattKod = COALESCE( @c_LevSattKod, [ofh].[LevSattKod], @oh_LevSattKod ) -- 0 ztInteger + ,@oh_LevVillkKod = COALESCE( @c_LevVillkKod, [ofh].[LevVillkKod], @oh_LevVillkKod ) -- 0 ztInteger + ,@oh_MomsKod = COALESCE( @c_MomsKod, [ofh].[MomsKod], @oh_MomsKod ) -- 0 ztInteger + ,@oh_OffertRadNrToOrdRadNr = COALESCE( @c_OffertRadNrToOrdRadNr, [ofh].[OffertRadNrToOrdRadNr], @oh_OffertRadNrToOrdRadNr ) -- 100 ztBoolean + ,@oh_OrdBerLevDat = COALESCE( @c_OrdBerLevDat, [ofh].[OrdBerLevDat], @oh_OrdBerLevDat ) -- 0 ztdate + ,@oh_OrdLevAdr1 = COALESCE( @c_OrdLevAdr1, [ofh].[OrdLevAdr1], @oh_OrdLevAdr1 ) -- 35 ztString + ,@oh_OrdLevAdr2 = COALESCE( @c_OrdLevAdr2, [ofh].[OrdLevAdr2], @oh_OrdLevAdr2 ) -- 40 ztString + ,@oh_OrdLevAdr3 = COALESCE( @c_OrdLevAdr3, [ofh].[OrdLevAdr3], @oh_OrdLevAdr3 ) -- 45 ztString + ,@oh_OrdLevAdr4 = COALESCE( @c_OrdLevAdr4, [ofh].[OrdLevAdr4], @oh_OrdLevAdr4 ) -- 50 ztString + ,@oh_OrdLevAdrBstOrt = COALESCE( @c_OrdLevAdrBstOrt, [ofh].[OrdLevAdrBstOrt], @oh_OrdLevAdrBstOrt ) -- 52 ztString + ,@oh_OrdLevAdrLandsKod = COALESCE( @c_OrdLevAdrLandsKod, [ofh].[OrdLevAdrLandsKod], @oh_OrdLevAdrLandsKod ) -- 54 ztString + ,@oh_OrdLevAdrProvinceCode = COALESCE( @c_OrdLevAdrProvinceCode, [ofh].[OrdLevAdrProvinceCode], @oh_OrdLevAdrProvinceCode ) -- 56 ztString + ,@oh_OrdLevPlats1 = COALESCE( @c_OrdLevPlats1, [ofh].[OrdLevPlats1], @oh_OrdLevPlats1 ) -- 30 ztCompanyNo + ,@oh_OrdTyp = COALESCE( @c_OrdTyp, [ofh].[OrdTyp], @oh_OrdTyp ) -- 25 ztInteger + ,@oh_PrisLista = COALESCE( @c_PrisLista, [ofh].[PrisLista], @oh_PrisLista ) -- 0 ZtLong + ,@oh_ProjCode = COALESCE( @c_ProjCode, [ofh].[ProjCode], @oh_ProjCode ) -- 0 ztstring + ,@oh_RabKlass = COALESCE( @c_RabKlass, [ofh].[RabKlass], @oh_RabKlass ) -- 130 ztInteger + ,@oh_Saljare = COALESCE( @c_Saljare, [ofh].[Saljare], @oh_Saljare ) -- 20 ztString + ,@oh_SprakKod = COALESCE( @c_SprakKod, [ofh].[SprakKod], @oh_SprakKod ) -- 0 ztInteger + ,@oh_TaxAreaCode1 = COALESCE( @c_TaxAreaCode1, [ofh].[TaxAreaCode1], @oh_TaxAreaCode1 ) -- 80 ztString + ,@oh_TaxAreaCode2 = COALESCE( @c_TaxAreaCode2, [ofh].[TaxAreaCode2], @oh_TaxAreaCode2 ) -- 82 ztString + ,@oh_TaxAreaCode3 = COALESCE( @c_TaxAreaCode3, [ofh].[TaxAreaCode3], @oh_TaxAreaCode3 ) -- 84 ztString + ,@oh_TaxAreaCode4 = COALESCE( @c_TaxAreaCode4, [ofh].[TaxAreaCode4], @oh_TaxAreaCode4 ) -- 86 ztString + ,@oh_TaxAreaCode5 = COALESCE( @c_TaxAreaCode5, [ofh].[TaxAreaCode5], @oh_TaxAreaCode5 ) -- 88 ztString + ,@oh_ValKod = COALESCE( @c_ValKod, [ofh].[ValKod], @oh_ValKod ) -- 0 ztstring + ,@oh_VRef = COALESCE( @c_VRef, [ofh].[VRef], @oh_VRef ) -- 10 ztstring +-- +-- + from [ofh] with (ReadUnCommitted) where + @oh_ForetagKod = [ofh].[ForetagKod] -- -1 + and @oh_OffNr = [ofh].[OffNr] -- 0 + +end + + +-- ASSIGN from xb Sequence=NULL + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign OHxb01' +if + @oh_ForetagKod is not NULL -- -1 + and @oh_LagStalle is not NULL -- 0 +begin + select + @oh_InventoryLocWMS = COALESCE( @c_InventoryLocWMS, [xb].[InventoryLocWMS], @oh_InventoryLocWMS ) -- 10 ztBoolean + ,@oh_RptUnitNo = COALESCE( @c_RptUnitNo, [xb].[RptUnitNo], @oh_RptUnitNo ) -- 20 ztInteger +-- +-- + from [xb] with (ReadUnCommitted) where + @oh_ForetagKod = [xb].[ForetagKod] -- -1 + and @oh_LagStalle = [xb].[LagStalle] -- 0 + +end + + +-- ASSIGN from Ohvw Sequence=NULL Alias on oh + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign OhOhvw01' +if + @oh_ForetagKod is not NULL -- -1 + and @oh_OrderNrOffert is not NULL -- 0 +begin + select + @oh_BetKod = COALESCE( @c_BetKod, [Ohvw].[BetKod], @oh_BetKod ) -- 0 ztstring + ,@oh_DistrKod = COALESCE( @c_DistrKod, [Ohvw].[DistrKod], @oh_DistrKod ) -- 0 ztstring + ,@oh_ExpAvgKd = COALESCE( @c_ExpAvgKd, [Ohvw].[ExpAvgKd], @oh_ExpAvgKd ) -- 0 ztBoolean + ,@oh_FraktAvgKd = COALESCE( @c_FraktAvgKd, [Ohvw].[FraktAvgKd], @oh_FraktAvgKd ) -- 0 ztBoolean + ,@oh_FsKd = COALESCE( @c_FsKd, [Ohvw].[FsKd], @oh_FsKd ) -- 0 ztBoolean + ,@oh_FtgNr = COALESCE( @c_FtgNr, [Ohvw].[FtgNr], @oh_FtgNr ) -- 10 ztCompanyNo + ,@oh_GodsMarke1 = COALESCE( @c_GodsMarke1, [Ohvw].[GodsMarke1], @oh_GodsMarke1 ) -- 55 ztString + ,@oh_GodsMarke2 = COALESCE( @c_GodsMarke2, [Ohvw].[GodsMarke2], @oh_GodsMarke2 ) -- 60 ztString + ,@oh_GodsMarke3 = COALESCE( @c_GodsMarke3, [Ohvw].[GodsMarke3], @oh_GodsMarke3 ) -- 65 ztString + ,@oh_GodsMarke4 = COALESCE( @c_GodsMarke4, [Ohvw].[GodsMarke4], @oh_GodsMarke4 ) -- 70 ztString + ,@oh_KostStalleKod = COALESCE( @c_KostStalleKod, [Ohvw].[KostStalleKod], @oh_KostStalleKod ) -- 0 ztstring + ,@oh_KundBestNamn = COALESCE( @c_KundBestNamn, [Ohvw].[KundBestNamn], @oh_KundBestNamn ) -- 10 ztstring + ,@oh_KundBestNr = COALESCE( @c_KundBestNr, [Ohvw].[KundBestNr], @oh_KundBestNr ) -- 10 ztString + ,@oh_KundBetalareNr = COALESCE( @c_KundBetalareNr, [Ohvw].[KundBetalareNr], @oh_KundBetalareNr ) -- 0 ztCompanyNo + ,@oh_KundKategoriKod = COALESCE( @c_KundKategoriKod, [Ohvw].[KundKategoriKod], @oh_KundKategoriKod ) -- 0 ztInteger + ,@oh_KundRabatt = COALESCE( @c_KundRabatt, [Ohvw].[KundRabatt], @oh_KundRabatt ) -- 90 ZtDecimal73 + ,@oh_KundRef2 = COALESCE( @c_KundRef2, [Ohvw].[KundRef2], @oh_KundRef2 ) -- 10 ztString + ,@oh_LagStalle = COALESCE( @c_LagStalle, [Ohvw].[LagStalle], @oh_LagStalle ) -- 0 ztstring + ,@oh_LandsKod = COALESCE( @c_LandsKod, [Ohvw].[LandsKod], @oh_LandsKod ) -- 0 ztString + ,@oh_LevHandlKod = COALESCE( @c_LevHandlKod, [Ohvw].[LevHandlKod], @oh_LevHandlKod ) -- 0 ztBoolean + ,@oh_LevSattKod = COALESCE( @c_LevSattKod, [Ohvw].[LevSattKod], @oh_LevSattKod ) -- 0 ztInteger + ,@oh_LevVillkKod = COALESCE( @c_LevVillkKod, [Ohvw].[LevVillkKod], @oh_LevVillkKod ) -- 0 ztInteger + ,@oh_MomsKod = COALESCE( @c_MomsKod, [Ohvw].[MomsKod], @oh_MomsKod ) -- 0 ztInteger + ,@oh_OffertRadNrToOrdRadNr = COALESCE( @c_OffertRadNrToOrdRadNr, [Ohvw].[OffertRadNrToOrdRadNr], @oh_OffertRadNrToOrdRadNr ) -- 100 ztBoolean + ,@oh_OrdLevAdr1 = COALESCE( @c_OrdLevAdr1, [Ohvw].[OrdLevAdr1], @oh_OrdLevAdr1 ) -- 35 ztString + ,@oh_OrdLevAdr2 = COALESCE( @c_OrdLevAdr2, [Ohvw].[OrdLevAdr2], @oh_OrdLevAdr2 ) -- 40 ztString + ,@oh_OrdLevAdr3 = COALESCE( @c_OrdLevAdr3, [Ohvw].[OrdLevAdr3], @oh_OrdLevAdr3 ) -- 45 ztString + ,@oh_OrdLevAdr4 = COALESCE( @c_OrdLevAdr4, [Ohvw].[OrdLevAdr4], @oh_OrdLevAdr4 ) -- 50 ztString + ,@oh_OrdLevAdrBstOrt = COALESCE( @c_OrdLevAdrBstOrt, [Ohvw].[OrdLevAdrBstOrt], @oh_OrdLevAdrBstOrt ) -- 52 ztString + ,@oh_OrdLevAdrLandsKod = COALESCE( @c_OrdLevAdrLandsKod, [Ohvw].[OrdLevAdrLandsKod], @oh_OrdLevAdrLandsKod ) -- 54 ztString + ,@oh_OrdLevPlats1 = COALESCE( @c_OrdLevPlats1, [Ohvw].[OrdLevPlats1], @oh_OrdLevPlats1 ) -- 30 ztCompanyNo + ,@oh_OrdTyp = COALESCE( @c_OrdTyp, [Ohvw].[OrdTyp], @oh_OrdTyp ) -- 25 ztInteger + ,@oh_PrisLista = COALESCE( @c_PrisLista, [Ohvw].[PrisLista], @oh_PrisLista ) -- 0 ZtLong + ,@oh_ProjCode = COALESCE( @c_ProjCode, [Ohvw].[ProjCode], @oh_ProjCode ) -- 0 ztstring + ,@oh_Saljare = COALESCE( @c_Saljare, [Ohvw].[Saljare], @oh_Saljare ) -- 20 ztString + ,@oh_SprakKod = COALESCE( @c_SprakKod, [Ohvw].[SprakKod], @oh_SprakKod ) -- 0 ztInteger + ,@oh_ValKod = COALESCE( @c_ValKod, [Ohvw].[ValKod], @oh_ValKod ) -- 0 ztstring + ,@oh_VRef = COALESCE( @c_VRef, [Ohvw].[VRef], @oh_VRef ) -- 10 ztstring +-- +-- + from [oh] as [Ohvw] with (ReadUnCommitted) where + @oh_ForetagKod = [Ohvw].[ForetagKod] -- -1 + and @oh_OrderNrOffert = [Ohvw].[OrderNr] -- 0 + +end + + +-- ASSIGN from x2f Sequence=NULL + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign ohx2f01' +if + @oh_ForetagKod is not NULL -- -1 + and @oh_LevSattKod is not NULL -- 10 +begin + select + @oh_AdressLappTyp = COALESCE( @c_AdressLappTyp, [x2f].[AdressLappTyp], @oh_AdressLappTyp ) -- 30 ztInteger + ,@oh_FraktHandlKod = COALESCE( @c_FraktHandlKod, [x2f].[FraktHandlKod], @oh_FraktHandlKod ) -- 40 ztBoolean + ,@oh_FraktSedelTyp = COALESCE( @c_FraktSedelTyp, [x2f].[FraktSedelTyp], @oh_FraktSedelTyp ) -- 20 ztInteger +-- +-- + from [x2f] with (ReadUnCommitted) where + @oh_ForetagKod = [x2f].[ForetagKod] -- -1 + and @oh_LevSattKod = [x2f].[LevSattKod] -- 10 + +end + + +-- ASSIGN from fr 1 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign OHFR01' +if + @oh_ForetagKod is not NULL -- -1 + and @oh_FtgNr is not NULL -- 0 +begin + select + @oh_LandsKod = COALESCE( @c_LandsKod, [fr].[LandsKod], @oh_LandsKod ) -- 110 ztString +-- +-- + from [fr] with (ReadUnCommitted) where + @oh_ForetagKod = [fr].[ForetagKod] -- -1 + and @oh_FtgNr = [fr].[FtgNr] -- 0 + +end + + +-- ASSIGN from kus 1 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign ohkus01' +if + @oh_ForetagKod is not NULL -- -1 + and @oh_FtgNr is not NULL -- 0 +begin + select + @oh_BetKod = COALESCE( @c_BetKod, [kus].[BetKod], @oh_BetKod ) -- 0 ztstring + ,@oh_BetKodForskott = COALESCE( @c_BetKodForskott, [kus].[BetKodForskott], @oh_BetKodForskott ) -- 430 ztString + ,@oh_DelLevTillaten = COALESCE( @c_DelLevTillaten, [kus].[DelLevTillaten], @oh_DelLevTillaten ) -- 10 ztInteger + ,@oh_DistrKod = COALESCE( @c_DistrKod, [kus].[DistrKod], @oh_DistrKod ) -- 0 ztstring + ,@oh_EmballageFakt = COALESCE( @c_EmballageFakt, [kus].[EmballageFakt], @oh_EmballageFakt ) -- 410 ztBoolean + ,@oh_ExpAvgKd = COALESCE( @c_ExpAvgKd, [kus].[ExpAvgKd], @oh_ExpAvgKd ) -- 0 ztBoolean + ,@oh_FaktSlutLevOrder = COALESCE( @c_FaktSlutLevOrder, [kus].[FaktSlutLevOrder], @oh_FaktSlutLevOrder ) -- 450 ztBoolean + ,@oh_ForsakringFakt = COALESCE( @c_ForsakringFakt, [kus].[ForsakringFakt], @oh_ForsakringFakt ) -- 490 ztBoolean + ,@oh_ForsakrKostnProc = COALESCE( @c_ForsakrKostnProc, [kus].[ForsakrKostnProc], @oh_ForsakrKostnProc ) -- 320 ZtDecimal73 + ,@oh_ForskottOrdKopplTyp = COALESCE( @c_ForskottOrdKopplTyp, [kus].[ForskottOrdKopplTyp], @oh_ForskottOrdKopplTyp ) -- 420 ztInteger + ,@oh_FsKd = COALESCE( @c_FsKd, [kus].[FsKd], @oh_FsKd ) -- 0 ztBoolean + ,@oh_GodsMarke1 = COALESCE( @c_GodsMarke1, [kus].[GodsMarke1], @oh_GodsMarke1 ) -- 15 ztString + ,@oh_GodsMarke2 = COALESCE( @c_GodsMarke2, [kus].[GodsMarke2], @oh_GodsMarke2 ) -- 20 ztString + ,@oh_Handel3Part = COALESCE( @c_Handel3Part, [kus].[Handel3Part], @oh_Handel3Part ) -- 480 ztBoolean + ,@oh_InbSlag = COALESCE( @c_InbSlag, [kus].[InbSlag], @oh_InbSlag ) -- 0 ztstring + ,@oh_KundBetalareNr = COALESCE( @c_KundBetalareNr, [kus].[KundBetalareNr], @oh_KundBetalareNr ) -- 0 ztCompanyNo + ,@oh_KundFraktBetalareNr = COALESCE( @c_KundFraktBetalareNr, [kus].[KundFraktBetalareNr], @oh_KundFraktBetalareNr ) -- 0 ztCompanyNo + ,@oh_KundFraktDeb = COALESCE( @c_KundFraktDeb, [kus].[KundFraktDeb], @oh_KundFraktDeb ) -- 0 ztBoolean + ,@oh_KundKategoriKod = COALESCE( @c_KundKategoriKod, [kus].[KundKategoriKod], @oh_KundKategoriKod ) -- 0 ztInteger + ,@oh_KundPrisInklMoms = COALESCE( @c_KundPrisInklMoms, [kus].[KundPrisInklMoms], @oh_KundPrisInklMoms ) -- 470 ztBoolean + ,@oh_KundRabatt = COALESCE( @c_KundRabatt, [kus].[KundRabatt], @oh_KundRabatt ) -- 0 ZtDecimal73 + ,@oh_KundRabattKod = COALESCE( @c_KundRabattKod, [kus].[KundRabattKod], @oh_KundRabattKod ) -- 0 ztBoolean + ,@oh_KundRabattKod0 = COALESCE( @c_KundRabattKod0, [kus].[KundRabattKod0], @oh_KundRabattKod0 ) -- 0 ztBoolean + ,@oh_KundRabattKod1 = COALESCE( @c_KundRabattKod1, [kus].[KundRabattKod1], @oh_KundRabattKod1 ) -- 0 ztBoolean + ,@oh_KundRabattKod2 = COALESCE( @c_KundRabattKod2, [kus].[KundRabattKod2], @oh_KundRabattKod2 ) -- 0 ztBoolean + ,@oh_KundRabattMax = COALESCE( @c_KundRabattMax, [kus].[KundRabattMax], @oh_KundRabattMax ) -- 0 ztFloat + ,@oh_KundRabattMin = COALESCE( @c_KundRabattMin, [kus].[KundRabattMin], @oh_KundRabattMin ) -- 0 ztFloat + ,@oh_KundRef2 = COALESCE( @c_KundRef2, [kus].[KundRef2], @oh_KundRef2 ) -- 530 ztString + ,@oh_KundStafflKod = COALESCE( @c_KundStafflKod, [kus].[KundStafflKod], @oh_KundStafflKod ) -- 0 ztBoolean + ,@oh_LandsKod = COALESCE( @c_LandsKod, [kus].[LandsKod], @oh_LandsKod ) -- 0 ztString + ,@oh_LevHandlKod = COALESCE( @c_LevHandlKod, [kus].[LevHandlKod], @oh_LevHandlKod ) -- 0 ztBoolean + ,@oh_LevSattKod = COALESCE( @c_LevSattKod, [kus].[LevSattKod], @oh_LevSattKod ) -- 0 ztInteger + ,@oh_LevVillkKod = COALESCE( @c_LevVillkKod, [kus].[LevVillkKod], @oh_LevVillkKod ) -- 0 ztInteger + ,@oh_LfExcl = COALESCE( @c_LfExcl, [kus].[LfExcl], @oh_LfExcl ) -- 540 ztBoolean + ,@oh_MarkKundsMomsStyr = COALESCE( @c_MarkKundsMomsStyr, [kus].[MarkKundsMomsStyr], @oh_MarkKundsMomsStyr ) -- 0 ztBoolean + ,@oh_MomsKod = COALESCE( @c_MomsKod, [kus].[MomsKod], @oh_MomsKod ) -- 0 ztInteger + ,@oh_OeKod = COALESCE( @c_OeKod, [kus].[OeKod], @oh_OeKod ) -- 0 ztBoolean + ,@oh_OffNr = COALESCE( @c_OffNr, [kus].[OffNr], @oh_OffNr ) -- 10 ztstring + ,@oh_OrdLevPlats1 = COALESCE( @c_OrdLevPlats1, [kus].[OrdLevPlats1], @oh_OrdLevPlats1 ) -- 10 ztCompanyNo + ,@oh_OvrFaktKostn1Fakt = COALESCE( @c_OvrFaktKostn1Fakt, [kus].[OvrFaktKostn1Fakt], @oh_OvrFaktKostn1Fakt ) -- 500 ztBoolean + ,@oh_OvrFaktKostn2Fakt = COALESCE( @c_OvrFaktKostn2Fakt, [kus].[OvrFaktKostn2Fakt], @oh_OvrFaktKostn2Fakt ) -- 510 ztBoolean + ,@oh_PrisLista = COALESCE( @c_PrisLista, [kus].[PrisLista], @oh_PrisLista ) -- 0 ZtLong + ,@oh_RabKlass = COALESCE( @c_RabKlass, [kus].[RabKlass], @oh_RabKlass ) -- 460 ztInteger + ,@oh_RestBehKod = COALESCE( @c_RestBehKod, [kus].[RestBehKod], @oh_RestBehKod ) -- 400 ztInteger + ,@oh_Saljare = COALESCE( @c_Saljare, [kus].[Saljare], @oh_Saljare ) -- 210 ztString + ,@oh_SamFaktUtskr = COALESCE( @c_SamFaktUtskr, [kus].[SamFaktUtskr], @oh_SamFaktUtskr ) -- 310 ztBoolean + ,@oh_SprakKod = COALESCE( @c_SprakKod, [kus].[SprakKod], @oh_SprakKod ) -- 0 ztInteger + ,@oh_ValKod = COALESCE( @c_ValKod, [kus].[ValKod], @oh_ValKod ) -- 0 ztstring + ,@oh_VAT_Type = COALESCE( @c_VAT_Type, [kus].[VAT_Type], @oh_VAT_Type ) -- 520 ztInteger +-- +-- + from [kus] with (ReadUnCommitted) where + @oh_ForetagKod = [kus].[ForetagKod] -- -1 + and @oh_FtgNr = [kus].[FtgNr] -- 0 + +end + + +-- ASSIGN from X1 10 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign ohX101' +if + @oh_ForetagKod is not NULL -- -1 + and @oh_MomsKod is not NULL -- 10 +begin + select + @oh_SalesTaxHandling = COALESCE( @c_SalesTaxHandling, [X1].[SalesTaxHandling], @oh_SalesTaxHandling ) -- 20 ztBoolean + ,@oh_TaxCode = COALESCE( @c_TaxCode, [X1].[TaxCode], @oh_TaxCode ) -- 30 ztInteger +-- +-- + from [X1] with (ReadUnCommitted) where + @oh_ForetagKod = [X1].[ForetagKod] -- -1 + and @oh_MomsKod = [X1].[MomsKod] -- 10 + +end + + +-- ASSIGN from lp 92 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign ohlp01' +if + @oh_ForetagKod is not NULL -- -1 + and @oh_FtgNr is not NULL -- 10 + and @oh_OrdLevPlats1 is not NULL -- 20 +begin + select + @oh_LevSattKod = COALESCE( @c_LevSattKod, [lp].[LevSattKod], @oh_LevSattKod ) -- 100 ztInteger + ,@oh_LevVillkKod = COALESCE( @c_LevVillkKod, [lp].[LevVillkKod], @oh_LevVillkKod ) -- 110 ztInteger +-- +-- + from [lp] with (ReadUnCommitted) where + @oh_ForetagKod = [lp].[ForetagKod] -- -1 + and @oh_FtgNr = [lp].[FtgNr] -- 10 + and @oh_OrdLevPlats1 = [lp].[OrdLevPlats1] -- 20 + +end + + +-- ASSIGN from vkus 95 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign ohvkus01' +if + @oh_ForetagKod is not NULL -- -1 + and @oh_KundBetalareNr is not NULL -- 0 +begin + select + @oh_SamFaktUtskr = COALESCE( @c_SamFaktUtskr, [vkus].[SamFaktUtskr], @oh_SamFaktUtskr ) -- 0 ztBoolean +-- +-- + from [vkus] with (ReadUnCommitted) where + @oh_ForetagKod = [vkus].[ForetagKod] -- -1 + and @oh_KundBetalareNr = [vkus].[FtgNr] -- 0 + +end + + +-- ASSIGN from X6 99 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign ohX601' +if + @oh_ForetagKod is not NULL -- -1 + and @oh_OrdTyp is not NULL -- 10 +begin + select + @oh_AutoFrislappas = COALESCE( @c_AutoFrislappas, [X6].[AutoFrislappas], @oh_AutoFrislappas ) -- 130 ztBoolean + ,@oh_AutoRegel = COALESCE( @c_AutoRegel, [X6].[AutoRegel], @oh_AutoRegel ) -- 200 ztstring + ,@oh_DirektLeverans = COALESCE( @c_DirektLeverans, [X6].[DirektLeverans], @oh_DirektLeverans ) -- 130 ztBoolean + ,@oh_DirektUttag = COALESCE( @c_DirektUttag, [X6].[DirektUttag], @oh_DirektUttag ) -- 140 ztBoolean + ,@oh_ExpAvgKd = COALESCE( @c_ExpAvgKd, [X6].[ExpAvgKd], @oh_ExpAvgKd ) -- 175 ztBoolean + ,@oh_IntStatTransTyp = COALESCE( @c_IntStatTransTyp, [X6].[IntStatTransTyp], @oh_IntStatTransTyp ) -- 270 ztInteger + ,@oh_KalkylPrisFaktura = COALESCE( @c_KalkylPrisFaktura, [X6].[KalkylPrisFaktura], @oh_KalkylPrisFaktura ) -- 220 ztString + ,@oh_KodEjFakturera = COALESCE( @c_KodEjFakturera, [X6].[KodEjFakturera], @oh_KodEjFakturera ) -- 290 ztBoolean + ,@oh_KreditOrder = COALESCE( @c_KreditOrder, [X6].[KreditOrder], @oh_KreditOrder ) -- 110 ztBoolean + ,@oh_LagerFlyttning = COALESCE( @c_LagerFlyttning, [X6].[LagerFlyttning], @oh_LagerFlyttning ) -- 260 ztBoolean + ,@oh_MarkOrderUniktLager = COALESCE( @c_MarkOrderUniktLager, [X6].[MarkOrderUniktLager], @oh_MarkOrderUniktLager ) -- 134 ztBoolean + ,@oh_OrderKopplKod = COALESCE( @c_OrderKopplKod, [X6].[OrderKopplKod], @oh_OrderKopplKod ) -- 160 ztInteger + ,@oh_PrisJustOrder = COALESCE( @c_PrisJustOrder, [X6].[PrisJustOrder], @oh_PrisJustOrder ) -- 120 ztBoolean + ,@oh_PrisJustOrderKost = COALESCE( @c_PrisJustOrderKost, [X6].[PrisJustOrderKost], @oh_PrisJustOrderKost ) -- 125 ztBoolean + ,@oh_RestBehKod = COALESCE( @c_RestBehKod, [X6].[RestBehKod], @oh_RestBehKod ) -- 250 ztInteger + ,@oh_SamFaktUtskr = COALESCE( @c_SamFaktUtskr, [X6].[SamFaktUtskr], @oh_SamFaktUtskr ) -- 170 ztBoolean + ,@oh_Stockreplenishment = COALESCE( @c_Stockreplenishment, [X6].[Stockreplenishment], @oh_Stockreplenishment ) -- 280 ztBoolean + ,@oh_TillLagStalle = COALESCE( @c_TillLagStalle, [X6].[TillLagStalle], @oh_TillLagStalle ) -- 180 ztString + ,@oh_TransitLeverans = COALESCE( @c_TransitLeverans, [X6].[TransitLeverans], @oh_TransitLeverans ) -- 132 ztBoolean + ,@oh_VaruProv = COALESCE( @c_VaruProv, [X6].[VaruProv], @oh_VaruProv ) -- 210 ztString +-- +-- + from [X6] with (ReadUnCommitted) where + @oh_ForetagKod = [X6].[ForetagKod] -- -1 + and @oh_OrdTyp = [X6].[OrdTyp] -- 10 + +end + +if @oh_OrderKopplKod is not NULL begin + if (select count(*) from kus with (ReadUnCommitted) where FtgNr=@oh_FtgNr and ForetagKod = @oh_ForetagKod and ISNULL(OrderKoppling,'0')='0') <> 0 + select @oh_OrderKopplKod = NULL +end + +if @oh_ValKod is NULL begin -- L=07 + select @oh_ValKod=ValKod from sy1 with (ReadUnCommitted) where ForetagKod = @oh_ForetagKod +end + +if ISNULL(@oh_ValKurs,0) = 0 begin -- L=14 + select @oh_ValKurs=ValKurs from xx with (ReadUnCommitted) where ForetagKod = @oh_ForetagKod and ValKod = @oh_ValKod +end +If @c_Integer_NULL is not NULL Begin + if @oh_AdressLappTyp = @c_Integer_NULL set @oh_AdressLappTyp = NULL; + if @oh_Aktiv = @c_Integer_NULL set @oh_Aktiv = NULL; + if @oh_AntalEURPall = @c_Integer_NULL set @oh_AntalEURPall = NULL; + if @oh_AntalKolli = @c_Integer_NULL set @oh_AntalKolli = NULL; + if @oh_AntalOvrPall = @c_Integer_NULL set @oh_AntalOvrPall = NULL; + if @oh_AntalRader = @c_Integer_NULL set @oh_AntalRader = NULL; + if @oh_AoNr = @c_Integer_NULL set @oh_AoNr = NULL; + if @oh_AutoMatchedWith = @c_Integer_NULL set @oh_AutoMatchedWith = NULL; + if @oh_BristKontrolleradStatus = @c_Integer_NULL set @oh_BristKontrolleradStatus = NULL; + if @oh_BristStatusLagerUtlev = @c_Integer_NULL set @oh_BristStatusLagerUtlev = NULL; + if @oh_BristStatusPlaneringBegLevDat = @c_Integer_NULL set @oh_BristStatusPlaneringBegLevDat = NULL; + if @oh_BristStatusPlaneringBerLevDat = @c_Integer_NULL set @oh_BristStatusPlaneringBerLevDat = NULL; + if @OH_DelBokningTillaten = @c_Integer_NULL set @OH_DelBokningTillaten = NULL; + if @oh_DelivToPONo = @c_Integer_NULL set @oh_DelivToPONo = NULL; + if @oh_DelLevTillaten = @c_Integer_NULL set @oh_DelLevTillaten = NULL; + if @oh_DiffDgrVerklLevDatDagDat = @c_Integer_NULL set @oh_DiffDgrVerklLevDatDagDat = NULL; + if @oh_ExtOrdTyp = @c_Integer_NULL set @oh_ExtOrdTyp = NULL; + if @oh_FaktNr = @c_Integer_NULL set @oh_FaktNr = NULL; + if @oh_FaktNrAConto = @c_Integer_NULL set @oh_FaktNrAConto = NULL; + if @oh_FaktNrForskott = @c_Integer_NULL set @oh_FaktNrForskott = NULL; + if @oh_FaktNrKOrr = @c_Integer_NULL set @oh_FaktNrKOrr = NULL; + if @oh_FaktNrOrg = @c_Integer_NULL set @oh_FaktNrOrg = NULL; + if @oh_FakturerareKod = @c_Integer_NULL set @oh_FakturerareKod = NULL; + if @oh_FfhNr = @c_Integer_NULL set @oh_FfhNr = NULL; + if @oh_ForetagKod = @c_Integer_NULL set @oh_ForetagKod = NULL; + if @oh_ForskottOrdKopplTyp = @c_Integer_NULL set @oh_ForskottOrdKopplTyp = NULL; + if @oh_FraktSedelTyp = @c_Integer_NULL set @oh_FraktSedelTyp = NULL; + if @oh_FtgKontaktNr = @c_Integer_NULL set @oh_FtgKontaktNr = NULL; + if @oh_ICTDelivFromOrderNo = @c_Integer_NULL set @oh_ICTDelivFromOrderNo = NULL; + if @oh_ICTDelivToOrderNo = @c_Integer_NULL set @oh_ICTDelivToOrderNo = NULL; + if @oh_ICTDelivToPONo = @c_Integer_NULL set @oh_ICTDelivToPONo = NULL; + if @oh_ICTDispatchMethod = @c_Integer_NULL set @oh_ICTDispatchMethod = NULL; + if @oh_ICTDispatchTerm = @c_Integer_NULL set @oh_ICTDispatchTerm = NULL; + if @oh_ICTRuleNumber = @c_Integer_NULL set @oh_ICTRuleNumber = NULL; + if @oh_IntrnCoNoOrigin = @c_Integer_NULL set @oh_IntrnCoNoOrigin = NULL; + if @oh_IntStatTransTyp = @c_Integer_NULL set @oh_IntStatTransTyp = NULL; + if @oh_kampnr = @c_Integer_NULL set @oh_kampnr = NULL; + if @oh_KopieradFranFaktNr = @c_Integer_NULL set @oh_KopieradFranFaktNr = NULL; + if @oh_KopieradFranOrderNr = @c_Integer_NULL set @oh_KopieradFranOrderNr = NULL; + if @oh_KopieradTillOrderNr = @c_Integer_NULL set @oh_KopieradTillOrderNr = NULL; + if @oh_KreditSparrStatus = @c_Integer_NULL set @oh_KreditSparrStatus = NULL; + if @oh_KundKategoriKod = @c_Integer_NULL set @oh_KundKategoriKod = NULL; + if @oh_KundLevSattKod = @c_Integer_NULL set @oh_KundLevSattKod = NULL; + if @oh_LevSattKod = @c_Integer_NULL set @oh_LevSattKod = NULL; + if @oh_LevVillkKod = @c_Integer_NULL set @oh_LevVillkKod = NULL; + if @oh_MomsKod = @c_Integer_NULL set @oh_MomsKod = NULL; + if @oh_MomsKodForskott = @c_Integer_NULL set @oh_MomsKodForskott = NULL; + if @oh_No_Trigger_Exec = @c_Integer_NULL set @oh_No_Trigger_Exec = NULL; + if @oh_OeStatusEdi = @c_Integer_NULL set @oh_OeStatusEdi = NULL; + if @oh_OkAttPlockaStatus = @c_Integer_NULL set @oh_OkAttPlockaStatus = NULL; + if @OH_OrdBokningsStatus = @c_Integer_NULL set @OH_OrdBokningsStatus = NULL; + if @oh_OrderKopplKod = @c_Integer_NULL set @oh_OrderKopplKod = NULL; + if @oh_OrderNr = @c_Integer_NULL set @oh_OrderNr = NULL; + if @oh_OrderNrKoppl = @c_Integer_NULL set @oh_OrderNrKoppl = NULL; + if @oh_OrderNrKorr = @c_Integer_NULL set @oh_OrderNrKorr = NULL; + if @oh_OrderNrOffert = @c_Integer_NULL set @oh_OrderNrOffert = NULL; + if @oh_OrderNrOrg = @c_Integer_NULL set @oh_OrderNrOrg = NULL; + if @oh_OrderNrServ = @c_Integer_NULL set @oh_OrderNrServ = NULL; + if @oh_OrdFoljesedelsNr = @c_Integer_NULL set @oh_OrdFoljesedelsNr = NULL; + if @oh_OrdLevNr = @c_Integer_NULL set @oh_OrdLevNr = NULL; + if @oh_OrdRestNr = @c_Integer_NULL set @oh_OrdRestNr = NULL; + if @oh_OrdStat = @c_Integer_NULL set @oh_OrdStat = NULL; + if @oh_OrdTyp = @c_Integer_NULL set @oh_OrdTyp = NULL; + if @oh_PackareKod = @c_Integer_NULL set @oh_PackareKod = NULL; + if @Oh_PdmCount = @c_Integer_NULL set @Oh_PdmCount = NULL; + if @oh_PlockIndexOrder = @c_Integer_NULL set @oh_PlockIndexOrder = NULL; + if @oh_PlockJnrOrder = @c_Integer_NULL set @oh_PlockJnrOrder = NULL; + if @oh_PrisLista = @c_Integer_NULL set @oh_PrisLista = NULL; + if @oh_ProspektId = @c_Integer_NULL set @oh_ProspektId = NULL; + if @oh_RabKlass = @c_Integer_NULL set @oh_RabKlass = NULL; + if @oh_ReplicateRecord = @c_Integer_NULL set @oh_ReplicateRecord = NULL; + if @oh_RestBehKod = @c_Integer_NULL set @oh_RestBehKod = NULL; + if @oh_RptUnitNo = @c_Integer_NULL set @oh_RptUnitNo = NULL; + if @oh_SprakKod = @c_Integer_NULL set @oh_SprakKod = NULL; + if @oh_SQLCmd2EnterTrg = @c_Integer_NULL set @oh_SQLCmd2EnterTrg = NULL; + if @oh_TA_IntAutoNo = @c_Integer_NULL set @oh_TA_IntAutoNo = NULL; + if @oh_TaxCode = @c_Integer_NULL set @oh_TaxCode = NULL; + if @oh_TimeZoneCode = @c_Integer_NULL set @oh_TimeZoneCode = NULL; + if @oh_VAT_Type = @c_Integer_NULL set @oh_VAT_Type = NULL; + if @oh_VolHeight = @c_Integer_NULL set @oh_VolHeight = NULL; + if @oh_VolLength = @c_Integer_NULL set @oh_VolLength = NULL; + if @oh_VolWidth = @c_Integer_NULL set @oh_VolWidth = NULL; + if @oh_WorkFaktNr = @c_Integer_NULL set @oh_WorkFaktNr = NULL; +End; +If @c_Varchar_NULL is not NULL Begin + if @oh_AcceptCodePayment = @c_Varchar_NULL set @oh_AcceptCodePayment = NULL; + if @oh_AoNrAlfa = @c_Varchar_NULL set @oh_AoNrAlfa = NULL; + if @oh_ArtSerieNrFrom = @c_Varchar_NULL set @oh_ArtSerieNrFrom = NULL; + if @oh_ArtSerieNrTom = @c_Varchar_NULL set @oh_ArtSerieNrTom = NULL; + if @oh_AutoRegel = @c_Varchar_NULL set @oh_AutoRegel = NULL; + if @oh_AutoRegelForskott = @c_Varchar_NULL set @oh_AutoRegelForskott = NULL; + if @oh_BetKod = @c_Varchar_NULL set @oh_BetKod = NULL; + if @oh_BetKodForskott = @c_Varchar_NULL set @oh_BetKodForskott = NULL; + if @oh_BusinessUnit = @c_Varchar_NULL set @oh_BusinessUnit = NULL; + if @oh_CreatedByDbObject = @c_Varchar_NULL set @oh_CreatedByDbObject = NULL; + if @oh_CreditCardNumber = @c_Varchar_NULL set @oh_CreditCardNumber = NULL; + if @oh_DelivToBusinessUnit = @c_Varchar_NULL set @oh_DelivToBusinessUnit = NULL; + if @oh_DistrKod = @c_Varchar_NULL set @oh_DistrKod = NULL; + if @oh_DivisKod = @c_Varchar_NULL set @oh_DivisKod = NULL; + if @oh_EstimatorOffNr = @c_Varchar_NULL set @oh_EstimatorOffNr = NULL; + if @oh_Exec_Time_Log_String = @c_Varchar_NULL set @oh_Exec_Time_Log_String = NULL; + if @oh_ExtorderNr = @c_Varchar_NULL set @oh_ExtorderNr = NULL; + if @oh_FaktAvPersSign = @c_Varchar_NULL set @oh_FaktAvPersSign = NULL; + if @oh_FaktNr_OCR = @c_Varchar_NULL set @oh_FaktNr_OCR = NULL; + if @oh_FtgNr = @c_Varchar_NULL set @oh_FtgNr = NULL; + if @oh_ftgperson = @c_Varchar_NULL set @oh_ftgperson = NULL; + if @oh_FtgPostnr = @c_Varchar_NULL set @oh_FtgPostnr = NULL; + if @oh_Giltighetstid = @c_Varchar_NULL set @oh_Giltighetstid = NULL; + if @oh_GodsMarke = @c_Varchar_NULL set @oh_GodsMarke = NULL; + if @oh_GodsMarke1 = @c_Varchar_NULL set @oh_GodsMarke1 = NULL; + if @oh_GodsMarke2 = @c_Varchar_NULL set @oh_GodsMarke2 = NULL; + if @oh_GodsMarke3 = @c_Varchar_NULL set @oh_GodsMarke3 = NULL; + if @oh_GodsMarke4 = @c_Varchar_NULL set @oh_GodsMarke4 = NULL; + if @oh_IdForOrderShuffle = @c_Varchar_NULL set @oh_IdForOrderShuffle = NULL; + if @oh_InbSlag = @c_Varchar_NULL set @oh_InbSlag = NULL; + if @oh_K4 = @c_Varchar_NULL set @oh_K4 = NULL; + if @oh_K5 = @c_Varchar_NULL set @oh_K5 = NULL; + if @oh_K6 = @c_Varchar_NULL set @oh_K6 = NULL; + if @oh_K7 = @c_Varchar_NULL set @oh_K7 = NULL; + if @oh_KalkylPrisFaktura = @c_Varchar_NULL set @oh_KalkylPrisFaktura = NULL; + if @oh_KBarAvsandandeEnhet = @c_Varchar_NULL set @oh_KBarAvsandandeEnhet = NULL; + if @oh_Kortspecifikinfo = @c_Varchar_NULL set @oh_Kortspecifikinfo = NULL; + if @oh_Kortstatus = @c_Varchar_NULL set @oh_Kortstatus = NULL; + if @oh_KortTransaktionsTyp = @c_Varchar_NULL set @oh_KortTransaktionsTyp = NULL; + if @oh_KostBar = @c_Varchar_NULL set @oh_KostBar = NULL; + if @oh_KostStalleKod = @c_Varchar_NULL set @oh_KostStalleKod = NULL; + if @oh_KstAvsandandeEnhet = @c_Varchar_NULL set @oh_KstAvsandandeEnhet = NULL; + if @oh_Kund_PlKod = @c_Varchar_NULL set @oh_Kund_PlKod = NULL; + if @oh_KundBestNamn = @c_Varchar_NULL set @oh_KundBestNamn = NULL; + if @oh_KundBestNr = @c_Varchar_NULL set @oh_KundBestNr = NULL; + if @oh_KundBetalareNr = @c_Varchar_NULL set @oh_KundBetalareNr = NULL; + if @oh_KundFaktAdr = @c_Varchar_NULL set @oh_KundFaktAdr = NULL; + if @oh_KundFraktBetalareNr = @c_Varchar_NULL set @oh_KundFraktBetalareNr = NULL; + if @oh_KundRef2 = @c_Varchar_NULL set @oh_KundRef2 = NULL; + if @oh_KundTextKod = @c_Varchar_NULL set @oh_KundTextKod = NULL; + if @oh_LagPlats = @c_Varchar_NULL set @oh_LagPlats = NULL; + if @oh_LagStalle = @c_Varchar_NULL set @oh_LagStalle = NULL; + if @oh_LandsKod = @c_Varchar_NULL set @oh_LandsKod = NULL; + if @oh_LegitimationNumber = @c_Varchar_NULL set @oh_LegitimationNumber = NULL; + if @oh_ManReAvstPersSign = @c_Varchar_NULL set @oh_ManReAvstPersSign = NULL; + if @oh_OffNr = @c_Varchar_NULL set @oh_OffNr = NULL; + if @oh_ole1 = @c_Varchar_NULL set @oh_ole1 = NULL; + if @oh_ole2 = @c_Varchar_NULL set @oh_ole2 = NULL; + if @oh_OrdBeskr = @c_Varchar_NULL set @oh_OrdBeskr = NULL; + if @oh_OrderNrAlfa = @c_Varchar_NULL set @oh_OrderNrAlfa = NULL; + if @oh_OrderTextKod = @c_Varchar_NULL set @oh_OrderTextKod = NULL; + if @oh_OrdLevAdr1 = @c_Varchar_NULL set @oh_OrdLevAdr1 = NULL; + if @oh_OrdLevAdr2 = @c_Varchar_NULL set @oh_OrdLevAdr2 = NULL; + if @oh_OrdLevAdr3 = @c_Varchar_NULL set @oh_OrdLevAdr3 = NULL; + if @oh_OrdLevAdr4 = @c_Varchar_NULL set @oh_OrdLevAdr4 = NULL; + if @oh_OrdLevAdrBstOrt = @c_Varchar_NULL set @oh_OrdLevAdrBstOrt = NULL; + if @oh_OrdLevAdrLandsKod = @c_Varchar_NULL set @oh_OrdLevAdrLandsKod = NULL; + if @oh_OrdLevAdrProvinceCode = @c_Varchar_NULL set @oh_OrdLevAdrProvinceCode = NULL; + if @oh_OrdLevAnvisnRad1 = @c_Varchar_NULL set @oh_OrdLevAnvisnRad1 = NULL; + if @oh_OrdLevAnvisnRad2 = @c_Varchar_NULL set @oh_OrdLevAnvisnRad2 = NULL; + if @oh_OrdLevPlats1 = @c_Varchar_NULL set @oh_OrdLevPlats1 = NULL; + if @oh_PaymenttransID = @c_Varchar_NULL set @oh_PaymenttransID = NULL; + if @oh_PersSign = @c_Varchar_NULL set @oh_PersSign = NULL; + if @oh_PickingLockedByUser = @c_Varchar_NULL set @oh_PickingLockedByUser = NULL; + if @oh_ProjCode = @c_Varchar_NULL set @oh_ProjCode = NULL; + if @oh_PVMSeasonId = @c_Varchar_NULL set @oh_PVMSeasonId = NULL; + if @oh_Referensnummer = @c_Varchar_NULL set @oh_Referensnummer = NULL; + if @oh_RowCreatedBy = @c_Varchar_NULL set @oh_RowCreatedBy = NULL; + if @oh_RowUpdatedBy = @c_Varchar_NULL set @oh_RowUpdatedBy = NULL; + if @oh_RowUpdatedCols = @c_Varchar_NULL set @oh_RowUpdatedCols = NULL; + if @oh_RU_Account = @c_Varchar_NULL set @oh_RU_Account = NULL; + if @oh_SalesType = @c_Varchar_NULL set @oh_SalesType = NULL; + if @oh_Saljare = @c_Varchar_NULL set @oh_Saljare = NULL; + if @oh_SlutKundNamn1 = @c_Varchar_NULL set @oh_SlutKundNamn1 = NULL; + if @oh_SlutKundNamn2 = @c_Varchar_NULL set @oh_SlutKundNamn2 = NULL; + if @oh_TA_ConsNo = @c_Varchar_NULL set @oh_TA_ConsNo = NULL; + if @oh_TA_CustomerMessage = @c_Varchar_NULL set @oh_TA_CustomerMessage = NULL; + if @oh_TA_FaxNotifiedNo = @c_Varchar_NULL set @oh_TA_FaxNotifiedNo = NULL; + if @oh_TA_GANno = @c_Varchar_NULL set @oh_TA_GANno = NULL; + if @oh_TA_MailNotified = @c_Varchar_NULL set @oh_TA_MailNotified = NULL; + if @oh_TA_PhonNotifiedNo = @c_Varchar_NULL set @oh_TA_PhonNotifiedNo = NULL; + if @oh_TA_SMSNotifiedNo = @c_Varchar_NULL set @oh_TA_SMSNotifiedNo = NULL; + if @oh_TA_TemplKompCd = @c_Varchar_NULL set @oh_TA_TemplKompCd = NULL; + if @oh_TaxAreaCode1 = @c_Varchar_NULL set @oh_TaxAreaCode1 = NULL; + if @oh_TaxAreaCode2 = @c_Varchar_NULL set @oh_TaxAreaCode2 = NULL; + if @oh_TaxAreaCode3 = @c_Varchar_NULL set @oh_TaxAreaCode3 = NULL; + if @oh_TaxAreaCode4 = @c_Varchar_NULL set @oh_TaxAreaCode4 = NULL; + if @oh_TaxAreaCode5 = @c_Varchar_NULL set @oh_TaxAreaCode5 = NULL; + if @oh_TextKod = @c_Varchar_NULL set @oh_TextKod = NULL; + if @oh_TillLagStalle = @c_Varchar_NULL set @oh_TillLagStalle = NULL; + if @oh_TransportorsKod = @c_Varchar_NULL set @oh_TransportorsKod = NULL; + if @oh_ValKod = @c_Varchar_NULL set @oh_ValKod = NULL; + if @oh_VaruProv = @c_Varchar_NULL set @oh_VaruProv = NULL; + if @oh_VRef = @c_Varchar_NULL set @oh_VRef = NULL; + if @oh_webpublish = @c_Varchar_NULL set @oh_webpublish = NULL; +End; +If @c_Date_NULL is not NULL Begin + if @oh_AdresslappUtskrDat = @c_Date_NULL set @oh_AdresslappUtskrDat = NULL; + if @oh_ArrivalAtCustomerDate = @c_Date_NULL set @oh_ArrivalAtCustomerDate = NULL; + if @oh_BristKontrolleradDatum = @c_Date_NULL set @oh_BristKontrolleradDatum = NULL; + if @oh_dtwe_JEEVES_Oh_OrderVarde = @c_Date_NULL set @oh_dtwe_JEEVES_Oh_OrderVarde = NULL; + if @oh_dtwu_JEEVES_Oh_OrderVarde = @c_Date_NULL set @oh_dtwu_JEEVES_Oh_OrderVarde = NULL; + if @oh_ebfilsentdt = @c_Date_NULL set @oh_ebfilsentdt = NULL; + if @oh_FaktDat = @c_Date_NULL set @oh_FaktDat = NULL; + if @oh_FaktDateTime = @c_Date_NULL set @oh_FaktDateTime = NULL; + if @oh_FaktDatKorr = @c_Date_NULL set @oh_FaktDatKorr = NULL; + if @oh_FaktDatOrg = @c_Date_NULL set @oh_FaktDatOrg = NULL; + if @oh_FaktFfDat = @c_Date_NULL set @oh_FaktFfDat = NULL; + if @oh_FiscalPrinterStatusDate = @c_Date_NULL set @oh_FiscalPrinterStatusDate = NULL; + if @oh_ForskottMottagetDatum = @c_Date_NULL set @oh_ForskottMottagetDatum = NULL; + if @oh_FraktsedelUtskrDat = @c_Date_NULL set @oh_FraktsedelUtskrDat = NULL; + if @oh_FriSlappDatTid = @c_Date_NULL set @oh_FriSlappDatTid = NULL; + if @oh_FSUtskrDat = @c_Date_NULL set @oh_FSUtskrDat = NULL; + if @oh_GiltigTomDatum = @c_Date_NULL set @oh_GiltigTomDatum = NULL; + if @oh_Ins_DT_MilliSecond = @c_Date_NULL set @oh_Ins_DT_MilliSecond = NULL; + if @oh_InvoicedUTCDateTime = @c_Date_NULL set @oh_InvoicedUTCDateTime = NULL; + if @oh_Jeeves_Init_Insert_Enter = @c_Date_NULL set @oh_Jeeves_Init_Insert_Enter = NULL; + if @oh_Jeeves_Init_Insert_PreIns = @c_Date_NULL set @oh_Jeeves_Init_Insert_PreIns = NULL; + if @oh_KundBestDat = @c_Date_NULL set @oh_KundBestDat = NULL; + if @oh_ManReAvstDT = @c_Date_NULL set @oh_ManReAvstDT = NULL; + if @oh_ManReAvstPerDen = @c_Date_NULL set @oh_ManReAvstPerDen = NULL; + if @oh_OEUtskrDat = @c_Date_NULL set @oh_OEUtskrDat = NULL; + if @oh_OhOrdBerednDatBase = @c_Date_NULL set @oh_OhOrdBerednDatBase = NULL; + if @oh_OhOrdBerLevDatBase = @c_Date_NULL set @oh_OhOrdBerLevDatBase = NULL; + if @oh_OkAttPlockaSattDatum = @c_Date_NULL set @oh_OkAttPlockaSattDatum = NULL; + if @oh_OrdBegLevDat = @c_Date_NULL set @oh_OrdBegLevDat = NULL; + if @oh_OrdBerednDat = @c_Date_NULL set @oh_OrdBerednDat = NULL; + if @oh_OrdBerLevDat = @c_Date_NULL set @oh_OrdBerLevDat = NULL; + if @oh_OrdDatum = @c_Date_NULL set @oh_OrdDatum = NULL; + if @oh_OrdLevDat = @c_Date_NULL set @oh_OrdLevDat = NULL; + if @oh_OrdLevDatOrg = @c_Date_NULL set @oh_OrdLevDatOrg = NULL; + if @oh_OrdLovLevDat = @c_Date_NULL set @oh_OrdLovLevDat = NULL; + if @oh_OrdTranspDat = @c_Date_NULL set @oh_OrdTranspDat = NULL; + if @oh_OrdVerklLevDat = @c_Date_NULL set @oh_OrdVerklLevDat = NULL; + if @oh_PackagingDate = @c_Date_NULL set @oh_PackagingDate = NULL; + if @oh_PackSedelUtskrDat = @c_Date_NULL set @oh_PackSedelUtskrDat = NULL; + if @oh_PLUtskrDat = @c_Date_NULL set @oh_PLUtskrDat = NULL; + if @oh_QQ_Ins_Trg_Start = @c_Date_NULL set @oh_QQ_Ins_Trg_Start = NULL; + if @oh_RegDat = @c_Date_NULL set @oh_RegDat = NULL; + if @oh_RowCreatedDt = @c_Date_NULL set @oh_RowCreatedDt = NULL; + if @oh_RowCreatedUTCDT = @c_Date_NULL set @oh_RowCreatedUTCDT = NULL; + if @oh_RowUpdatedDt = @c_Date_NULL set @oh_RowUpdatedDt = NULL; + if @oh_RowUpdatedUTCDT = @c_Date_NULL set @oh_RowUpdatedUTCDT = NULL; + if @oh_SendEdiDT = @c_Date_NULL set @oh_SendEdiDT = NULL; + if @oh_UtskrBestDokUtskrDT = @c_Date_NULL set @oh_UtskrBestDokUtskrDT = NULL; + if @oh_UtskrDokLovUtskrDT = @c_Date_NULL set @oh_UtskrDokLovUtskrDT = NULL; + if @oh_ValDat = @c_Date_NULL set @oh_ValDat = NULL; +End; + + +declare + @x6_SamFaktUtskr JEEVES_Boolean, + @x6_ExpAvgKd JEEVES_Boolean, + @x6_RestBehKod smallint, + @x2_ExpAvgKd JEEVES_Boolean, + @kus_ExpAvgKd JEEVES_Boolean, + @kus_RestBehKod smallint, + @kus_MarkBetBetVillkStyr JEEVES_Boolean, + @kus_BetKod JEEVES_StrVarChar4, + @kus_KundKategoriKod smallint, + @kus_MomsKod smallint, + @sy1_RestBehKod smallint, + @vkus_SamFaktUtskr JEEVES_Boolean, + @vkus_MarkBetBetVillkStyr JEEVES_Boolean, + @vkus_BetKod JEEVES_StrVarChar4, + + @jvss_SALES048 smallint, + @jvss_SALES133 smallint, + @jvss_SALES190 smallint, + + @xb_KostStalleKod JEEVES_StrVarChar8, + @xb_KostBar JEEVES_StrVarChar8, + @xb_K4 JEEVES_StrVarChar8, + @xb_K5 JEEVES_StrVarChar8, + @xb_K6 JEEVES_StrVarChar8, + @xb_K7 JEEVES_StrVarChar8, + @xb_AutoRegelForskott JEEVES_StrVarChar8, + + @salj_KostStalleKod JEEVES_StrVarChar8, + @salj_KostBar JEEVES_StrVarChar8, + @salj_K4 JEEVES_StrVarChar8, + @salj_K5 JEEVES_StrVarChar8, + @salj_K6 JEEVES_StrVarChar8, + @salj_K7 JEEVES_StrVarChar8, + @salj_AutoRegelForskott JEEVES_StrVarChar8 + +select + @kus_ExpAvgKd = ISNULL(ExpAvgKd,'1'), + @kus_RestBehKod = RestBehKod, + @kus_MarkBetBetVillkStyr = ISNULL(MarkBetBetVillkStyr,'0'), + @kus_BetKod = BetKod, + @kus_KundKategoriKod = KundKategoriKod, + @kus_MomsKod = MomsKod + from kus with (ReadUnCommitted) where FtgNr = @oh_FtgNr and ForetagKod = @oh_ForetagKod + +select @jvss_SALES048 = dbo.Jeeves_FN_GetParam( @oh_ForetagKod, 'SALES048', 'N', '0' ) +if @jvss_SALES048 is NULL or @jvss_SALES048 < 0 or @jvss_SALES048 > 3 select @jvss_SALES048 = 0 + +select @jvss_SALES133 = dbo.Jeeves_FN_GetParam( @oh_ForetagKod, 'SALES133', 'N', '0' ) +if @jvss_SALES133 is NULL or @jvss_SALES133 < 0 or @jvss_SALES133 > 3 select @jvss_SALES133 = 0 + +select @jvss_SALES190 = dbo.Jeeves_FN_GetParam( @oh_ForetagKod, 'SALES190', 'N', '0' ) +if @jvss_SALES190 is NULL or @jvss_SALES190 < 0 or @jvss_SALES190 > 3 select @jvss_SALES190 = 0 + +if @jvss_SALES048=1 or @jvss_SALES048=3 or @jvss_SALES133=1 or @jvss_SALES133=3 +begin + select + @xb_KostStalleKod = KostStalleKod, + @xb_KostBar = KostBar, + @xb_K4 = K4, + @xb_K5 = K5, + @xb_K6 = K6, + @xb_K7 = K7, + @xb_AutoRegelForskott = AutoRegelForskott + from xb with (ReadUnCommitted) where + ForetagKod = @oh_ForetagKod and + LagStalle = @oh_LagStalle + if @@RowCount = 1 + begin + if @jvss_SALES048=1 + begin + if @jvss_SALES190<>1 and @jvss_SALES190<>3 + begin + if @oh_KostStalleKod is NULL SET @oh_KostStalleKod = @xb_KostStalleKod + end + if @oh_KostBar is NULL SET @oh_KostBar = @xb_KostBar + if @oh_K4 is NULL SET @oh_K4 = @xb_K4 + if @oh_K5 is NULL SET @oh_K5 = @xb_K5 + if @oh_K6 is NULL SET @oh_K6 = @xb_K6 + if @oh_K7 is NULL SET @oh_K7 = @xb_K7 + end + if @jvss_SALES048=3 + begin + if @jvss_SALES190<>1 and @jvss_SALES190<>3 + begin + if @oh_KostStalleKod is NULL and @xb_KostStalleKod is not NULL SET @oh_KostStalleKod = @xb_KostStalleKod + end + if @oh_KostBar is NULL and @xb_KostBar is not NULL SET @oh_KostBar = @xb_KostBar + if @oh_K4 is NULL and @xb_K4 is not NULL SET @oh_K4 = @xb_K4 + if @oh_K5 is NULL and @xb_K5 is not NULL SET @oh_K5 = @xb_K5 + if @oh_K6 is NULL and @xb_K6 is not NULL SET @oh_K6 = @xb_K6 + if @oh_K7 is NULL and @xb_K7 is not NULL SET @oh_K7 = @xb_K7 + end + if @jvss_SALES133=1 or @jvss_SALES133=3 + begin + if @oh_AutoRegelForskott is NULL SET @oh_AutoRegelForskott = @xb_AutoRegelForskott + end + end +end + +if @jvss_SALES048=2 or @jvss_SALES048=3 or @jvss_SALES133=2 or @jvss_SALES133=3 or @jvss_SALES190=1 or @jvss_SALES190=3 +begin + select + @salj_KostStalleKod = KostStalleKod, + @salj_KostBar = KostBar, + @salj_K4 = K4, + @salj_K5 = K5, + @salj_K6 = K6, + @salj_K7 = K7, + @salj_AutoRegelForskott = AutoRegelForskott + from salj with (ReadUnCommitted) where + ForetagKod = @oh_ForetagKod and + Saljare = @oh_Saljare + if @@RowCount = 1 + begin + if @jvss_SALES048=2 + begin + if @oh_KostStalleKod is NULL SET @oh_KostStalleKod = @salj_KostStalleKod + if @oh_KostBar is NULL SET @oh_KostBar = @salj_KostBar + if @oh_K4 is NULL SET @oh_K4 = @salj_K4 + if @oh_K5 is NULL SET @oh_K5 = @salj_K5 + if @oh_K6 is NULL SET @oh_K6 = @salj_K6 + if @oh_K7 is NULL SET @oh_K7 = @salj_K7 + if @oh_AutoRegelForskott is NULL SET @oh_AutoRegelForskott = @salj_AutoRegelForskott + end + if @jvss_SALES048=3 + begin + if @oh_KostStalleKod is NULL and @salj_KostStalleKod is not NULL SET @oh_KostStalleKod = @salj_KostStalleKod + if @oh_KostBar is NULL and @salj_KostBar is not NULL SET @oh_KostBar = @salj_KostBar + if @oh_K4 is NULL and @salj_K4 is not NULL SET @oh_K4 = @salj_K4 + if @oh_K5 is NULL and @salj_K5 is not NULL SET @oh_K5 = @salj_K5 + if @oh_K6 is NULL and @salj_K6 is not NULL SET @oh_K6 = @salj_K6 + if @oh_K7 is NULL and @salj_K7 is not NULL SET @oh_K7 = @salj_K7 + if @oh_AutoRegelForskott is NULL and @salj_AutoRegelForskott is not NULL SET @oh_AutoRegelForskott = @salj_AutoRegelForskott + end + if @jvss_SALES190=1 or @jvss_SALES190=3 + begin + if @oh_KostStalleKod is NULL and @salj_KostStalleKod is not NULL SET @oh_KostStalleKod = @salj_KostStalleKod + end + if @jvss_SALES133=2 or @jvss_SALES133=3 + begin + if @oh_AutoRegelForskott is NULL SET @oh_AutoRegelForskott = @salj_AutoRegelForskott + end + end +end + +-- +-- + +select + @sy1_RestBehKod = RestBehKod + from sy1 with (ReadUnCommitted) where ForetagKod = @oh_ForetagKod + +select + @x6_SamFaktUtskr = ISNULL(SamFaktUtskr,'1'), + @x6_ExpAvgKd = ISNULL(ExpAvgKd,'1'), + @x6_RestBehKod = RestBehKod + from x6 with (ReadUnCommitted) where OrdTyp = @oh_OrdTyp and ForetagKod = @oh_ForetagKod + +select + @vkus_SamFaktUtskr = ISNULL(SamFaktUtskr,'0'), + @vkus_MarkBetBetVillkStyr = ISNULL(MarkBetBetVillkStyr,'0'), + @vkus_BetKod = BetKod + from vkus with (ReadUnCommitted) where FtgNr = ISNULL(@oh_KundBetalareNr,@oh_FtgNr) and ForetagKod = @oh_ForetagKod + +if @c_BetKod is NULL +begin + if @oh_KundBetalareNr is not NULL and @oh_FtgNr<>@oh_KundBetalareNr + begin + if @kus_MarkBetBetVillkStyr = '1' + begin + select @oh_BetKod = @vkus_BetKod + end + else + begin + select @oh_BetKod = @kus_BetKod + end + end +end + +if @c_SamFaktUtskr is NULL +begin + if @x6_SamFaktUtskr = '0' + begin + select @oh_SamFaktUtskr = @x6_SamFaktUtskr + end + else + begin + select @oh_SamFaktUtskr = @vkus_SamFaktUtskr + end +end + +select + @x2_ExpAvgKd = ISNULL(ExpAvgKd,'1') + from x2 with (ReadUnCommitted) where BetKod = @oh_BetKod and ForetagKod = @oh_ForetagKod + +if @c_ExpAvgKd is NULL +begin + select @oh_ExpAvgKd = @kus_ExpAvgKd + if @oh_ExpAvgKd = '1' + begin + select @oh_ExpAvgKd = @x6_ExpAvgKd + if @oh_ExpAvgKd = '1' + begin + select @oh_ExpAvgKd = @x2_ExpAvgKd + end + end +end + +if @c_RestBehKod is NULL +begin + if @x6_RestBehKod is not NULL + begin + if @kus_RestBehKod is not NULL + begin + if (@kus_RestBehKod = 1 and @x6_RestBehKod < 1) OR + (@kus_RestBehKod = 2 and @x6_RestBehKod < 2) + begin + select @oh_RestBehKod = @kus_RestBehKod + end + else + begin + select @oh_RestBehKod = @x6_RestBehKod + end + end + else + begin + select @oh_RestBehKod = @x6_RestBehKod + end + end + else + begin + select @oh_RestBehKod = @kus_RestBehKod + end + + if @oh_RestBehKod is NULL + begin + select @oh_RestBehKod = @sy1_RestBehKod + end +end +if @c_MomsKod is NULL and @kus_MomsKod is not NULL +begin + select @oh_MomsKod = @kus_MomsKod +end + +declare + @lp_MomsKod smallint + +if @c_MomsKod is NULL and @oh_OrdLevPlats1 is not NULL +begin + if dbo.Jeeves_FN_GetParam( @c_ForetagKod, 'SALES245', 'B', '0' ) = '1' + begin + select + @lp_MomsKod = MomsKod + from lp with (ReadUnCommitted) where + lp.ForetagKod = @oh_ForetagKod and + lp.FtgNr = @oh_FtgNr and + lp.OrdLevPlats1 = @oh_OrdLevPlats1 + if @lp_MomsKod is not NULL + begin + select @oh_MomsKod = @lp_MomsKod + end + end +end + + + +set @c_Logg_Exec_Time_String = @c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre insert oh' +set @Jeeves_Init_Insert_PreIns = GetDate() +set @oh_Jeeves_Init_Insert_Enter = @Jeeves_Init_Insert_Enter +set @oh_Jeeves_Init_Insert_PreIns = @Jeeves_Init_Insert_PreIns +set @oh_Exec_Time_Log_String = case when @oh_Exec_Time_Log_String is null then @c_Logg_Exec_Time_String else @c_Logg_Exec_Time_String + ' == ' + @oh_Exec_Time_Log_String end + + + +set @xxx_PrimaryKeyValue = '<%.oh>; key =' + +char(13)+char(10)+char(9)+'<%OrderNr> = ' + coalesce( convert( varchar(21), @c_OrderNr ), 'NULL' ) + +-- +-- + + + + +insert into oh ( + [AcceptCodePayment] + ,[AdressLappTyp] + ,[AdresslappUtskrDat] + ,[Aktiv] + ,[AnmodanMark] + ,[AntalEURPall] + ,[AntalKolli] + ,[AntalOvrPall] + ,[AntalRader] + ,[AoNr] + ,[AoNrAlfa] + ,[ArrivalAtCustomerDate] + ,[ArtBtotVikt] + ,[ArtSerieNrFrom] + ,[ArtSerieNrTom] + ,[ArtVikt] + ,[ArtVolym] + ,[AttBetalaBelopp] + ,[AutoFrislappas] + ,[AutoMatchedWith] + ,[AutoRegel] + ,[AutoRegelForskott] + ,[BetKod] + ,[BetKodForskott] + ,[BookQtyNotOnPickListFlag] + ,[BristKontrolleradDatum] + ,[BristKontrolleradStatus] + ,[BristStatusLagerUtlev] + ,[BristStatusPlaneringBegLevDat] + ,[BristStatusPlaneringBerLevDat] + ,[BruttoVikt] + ,[BusinessUnit] + ,[Cardpaymentcancelled] + ,[ClientSessionGUID_Str] + ,[CodeFixedDeparture] + ,[CostsExclVatBCU] + ,[CostsExclVatCurr] + ,[CostsInclVatBCU] + ,[CostsInclVatCurr] + ,[CreatedByDbObject] + ,[CreditCardNumber] + ,[DelBokningTillaten] + ,[DelivToBusinessUnit] + ,[DelivToPONo] + ,[DelLevTillaten] + ,[DiffDgrVerklLevDatDagDat] + ,[DirektLeverans] + ,[DirektUttag] + ,[DistrKod] + ,[DivisKod] + ,[dtwe_JEEVES_Oh_OrderVarde] + ,[dtwu_JEEVES_Oh_OrderVarde] + ,[ebfilsent] + ,[ebfilsentdt] + ,[Edit] + ,[Editext] + ,[EditPlBLOB] + ,[EmballageFakt] + ,[EmballageKostnad] + ,[EmballageKostnInland] + ,[EstimatorOffNr] + ,[EstimatorOrder] + ,[Exec_Time_Log_String] + ,[ExecutionTime] + ,[ExpAvgKd] + ,[ExpeditionKostnad] + ,[ExpressKod] + ,[ExtorderNr] + ,[ExtOrdTyp] + ,[FaktAvPersSign] + ,[FaktDat] + ,[FaktDateTime] + ,[FaktDatKorr] + ,[FaktDatOrg] + ,[FaktFfDat] + ,[FaktNr] + ,[FaktNr_OCR] + ,[FaktNrAConto] + ,[FaktNrForskott] + ,[FaktNrKOrr] + ,[FaktNrOrg] + ,[FaktSlutLevOrder] + ,[FaktTB] + ,[FaktTbInklMoms] + ,[FakturerareKod] + ,[FfhNr] + ,[FiscalPrinterStatusDate] + ,[FlowDummyUniqueId] + ,[ForetagKod] + ,[ForsakringFakt] + ,[ForsakringsKostnad] + ,[ForsakrKostnInland] + ,[ForsakrKostnProc] + ,[ForskottBelopp] + ,[ForskottBeloppAck] + ,[ForskottMottagetDatum] + ,[ForskottOrdKopplTyp] + ,[FraktAvgKd] + ,[FrakthandlKod] + ,[FraktKostnBer] + ,[FraktKostnDeb] + ,[FraktKostnInland] + ,[FraktKostnMan] + ,[FraktSedelTyp] + ,[FraktsedelUtskrDat] + ,[FraktSkrymmeKod] + ,[FraktVikt] + ,[FriSlappDatTid] + ,[FsKd] + ,[FSUtskrDat] + ,[FtgKontaktNr] + ,[FtgNr] + ,[ftgperson] + ,[FtgPostnr] + ,[Giltighetstid] + ,[GiltigTomDatum] + ,[GodsMarke] + ,[GodsMarke1] + ,[GodsMarke2] + ,[GodsMarke3] + ,[GodsMarke4] + ,[Handel3Part] + ,[HandlingChargeProcessed] + ,[HideOrder] + ,[ICTDelivFromOrderNo] + ,[ICTDelivToOrderNo] + ,[ICTDelivToPONo] + ,[ICTDispatchMethod] + ,[ICTDispatchTerm] + ,[ICTRuleNumber] + ,[IdForOrderShuffle] + ,[InbSlag] + ,[IntrnCoNoOrigin] + ,[IntStatTransTyp] + ,[InventoryLocWMS] + ,[InvoiceChange] + ,[InvoicedUTCDateTime] + ,[Jeeves_Init_Insert_Enter] + ,[Jeeves_Init_Insert_PreIns] + ,[K4] + ,[K5] + ,[K6] + ,[K7] + ,[KalkylPrisFaktura] + ,[kampnr] + ,[KBarAvsandandeEnhet] + ,[KodEjFakturera] + ,[KopieradFranFaktNr] + ,[KopieradFranOrderNr] + ,[KopieradTillOrderNr] + ,[Kortspecifikinfo] + ,[Kortstatus] + ,[KortTransaktionsTyp] + ,[KostBar] + ,[KostStalleKod] + ,[KreditOrder] + ,[KreditSparrStatus] + ,[KstAvsandandeEnhet] + ,[Kund_PlKod] + ,[KundBestDat] + ,[KundBestNamn] + ,[KundBestNr] + ,[KundBetalareNr] + ,[KundFaktAdr] + ,[KundFraktBetalareNr] + ,[KundFraktDeb] + ,[KundKategoriKod] + ,[KundLevSattKod] + ,[KundPrisInklMoms] + ,[KundRabatt] + ,[KundRabattKod] + ,[KundRabattKod0] + ,[KundRabattKod1] + ,[KundRabattKod2] + ,[KundRabattMax] + ,[KundRabattMin] + ,[KundRef2] + ,[KundSpecTextBe] + ,[KundSpecTextFa] + ,[KundSpecTextFs] + ,[KundSpecTextOe] + ,[KundSpecTextPl] + ,[KundSpecTextTo] + ,[KundStafflKod] + ,[KundTextKod] + ,[LagerFlyttning] + ,[LagPlats] + ,[LagStalle] + ,[LandsKod] + ,[LeadTimeMatrixBookingFlag] + ,[LegitimationNumber] + ,[LevArtBtotVikt] + ,[LevArtVikt] + ,[LevArtVolym] + ,[LevAviseringKod] + ,[LevForeTolv] + ,[LevHandlKod] + ,[LevSattKod] + ,[LevVillkKod] + ,[LfExcl] + ,[ManReAvstDT] + ,[ManReAvstPerDen] + ,[ManReAvstPersSign] + ,[MarkKundsMomsStyr] + ,[MarkNyttOEUtskr] + ,[MarkOrderUniktLager] + ,[MomsKod] + ,[MomsKodForskott] + ,[MottagetBelopp] + ,[MRP_InventoryTransferFlag] + ,[No_Trigger_Exec] + ,[OeKod] + ,[OeStatusEdi] + ,[OEUtskrDat] + ,[OffertRadNrToOrdRadNr] + ,[OffNr] + ,[OhFaktTB] + ,[OhFaktTBInklMoms] + ,[OhOrdBerednDatBase] + ,[OhOrdBerLevDatBase] + ,[OhOrdKostnad] + ,[OhOrdKostnadInklMoms] + ,[OhOrdSum] + ,[OhOrdSumInklMoms] + ,[OhVbOrdSum] + ,[OhVbOrdSumInklMoms] + ,[OIngSkapad] + ,[OkAttPlockaSattDatum] + ,[OkAttPlockaStatus] + ,[ole1] + ,[ole2] + ,[OrdBegLevDat] + ,[OrdBerednDat] + ,[OrdBerLevDat] + ,[OrdBerLevTid] + ,[OrdBeskr] + ,[OrdBokningsStatus] + ,[OrdDatum] + ,[OrderAvslutad] + ,[OrderBeloppIntFsg] + ,[OrderBeloppIntKop] + ,[OrderCostCurrency] + ,[OrderEnding] + ,[OrderKopplKod] + ,[OrderKostnadIntFsg] + ,[OrderKostnadIntKop] + ,[OrderNr] + ,[OrderNrAlfa] + ,[OrderNrKoppl] + ,[OrderNrKorr] + ,[OrderNrOffert] + ,[OrderNrOrg] + ,[OrderNrServ] + ,[OrderTBIntFsg] + ,[OrderTBIntKop] + ,[OrderTextKod] + ,[OrderTGIntFsg] + ,[OrderTGIntKop] + ,[OrdFoljesedelsNr] + ,[OrdKostnad] + ,[OrdKostnadInklMoms] + ,[OrdLevAdr1] + ,[OrdLevAdr2] + ,[OrdLevAdr3] + ,[OrdLevAdr4] + ,[OrdLevAdrBstOrt] + ,[OrdLevAdrLandsKod] + ,[OrdLevAdrProvinceCode] + ,[OrdLevAnvisnRad1] + ,[OrdLevAnvisnRad2] + ,[OrdLevDat] + ,[OrdLevDatOrg] + ,[OrdLevNr] + ,[OrdLevPlats1] + ,[OrdLovLevDat] + ,[OrdRabatt] + ,[OrdRestNot] + ,[OrdRestNr] + ,[OrdStat] + ,[OrdSum] + ,[OrdSumExclCredChk] + ,[OrdSumExklMoms] + ,[OrdSumFraktBer] + ,[OrdSumInklMoms] + ,[OrdSumInklMomsExclCredChk] + ,[OrdSumRabGr] + ,[OrdSumReg] + ,[OrdSumValReg] + ,[OrdTranspDat] + ,[OrdTyp] + ,[OrdVerklLevDat] + ,[OULager_Auto_Utplock] + ,[OULager_Leverera_Allt] + ,[OvrFaktAvgift1] + ,[OvrFaktAvgift10] + ,[OvrFaktAvgift2] + ,[OvrFaktAvgift3] + ,[OvrFaktAvgift4] + ,[OvrFaktAvgift5] + ,[OvrFaktAvgift6] + ,[OvrFaktAvgift7] + ,[OvrFaktAvgift8] + ,[OvrFaktAvgift9] + ,[OvrFaktKostn1Fakt] + ,[OvrFaktKostn2Fakt] + ,[OvrFaktKostnad1] + ,[OvrFaktKostnad2] + ,[OvrFaktKostnInland1] + ,[OvrFaktKostnInland2] + ,[PackagingDate] + ,[PackareKod] + ,[PackSedelUtskrDat] + ,[PaymenttransID] + ,[PdmCount] + ,[PersSign] + ,[PickingLockedByUser] + ,[PlockIndexOrder] + ,[PlockJnrOrder] + ,[PLUtskrDat] + ,[PrisJustOrder] + ,[PrisJustOrderKost] + ,[PrisLista] + ,[ProjCode] + ,[ProspektId] + ,[PVMSeasonId] + ,[QQ_Ins_Trg_Start] + ,[RabKlass] + ,[Referensnummer] + ,[RegDat] + ,[ReplicateRecord] + ,[RestArtBtotVikt] + ,[RestArtVikt] + ,[RestArtVolym] + ,[RestBehKod] + ,[RowCreatedBy] + ,[RowCreatedDt] + ,[RowCreatedUTCDT] + ,[RowUpdatedBy] + ,[RowUpdatedCols] + ,[RowUpdatedDt] + ,[RowUpdatedUTCDT] + ,[RptUnitNo] + ,[RU_Account] + ,[SalesTaxHandling] + ,[SalesType] + ,[Saljare] + ,[SamFaktUtskr] + ,[SamInKopMark] + ,[SendEdi] + ,[SendEdiDT] + ,[ShuffleOrder] + ,[SkrivUtskSk] + ,[SlutKundNamn1] + ,[SlutKundNamn2] + ,[SprakKod] + ,[SQLCmd2EnterTrg] + ,[StockReplenishment] + ,[TA_AmtCOD] + ,[TA_ConsNo] + ,[TA_CustomerMessage] + ,[TA_Edit] + ,[TA_FaxNotifiedNo] + ,[TA_GANno] + ,[TA_IntAutoNo] + ,[TA_Loadmeter] + ,[TA_MailNotified] + ,[TA_PhonNotifiedNo] + ,[TA_SMSNotifiedNo] + ,[TA_TemplKompCd] + ,[TaxAreaCode1] + ,[TaxAreaCode2] + ,[TaxAreaCode3] + ,[TaxAreaCode4] + ,[TaxAreaCode5] + ,[TaxAreaRate] + ,[TaxCode] + ,[TerminsSakradOrder] + ,[TextEfterDokRader] + ,[TextKod] + ,[TillbakaBelopp] + ,[TillLagStalle] + ,[TimeZoneCode] + ,[TransitLeverans] + ,[TransportorsKod] + ,[UtskrBestDokSkaGoras] + ,[UtskrBestDokUtskrDT] + ,[UtskrDokLovSkaGoras] + ,[UtskrDokLovUtskrDT] + ,[ValDat] + ,[ValKod] + ,[ValKurs] + ,[VaruProv] + ,[VAT_Type] + ,[vb_EmballageKostnad] + ,[vb_EmballageKostnInland] + ,[vb_ExpeditionKostnad] + ,[vb_ForsakringsKostnad] + ,[vb_ForsakrKostnInland] + ,[vb_ForskottBelopp] + ,[vb_ForskottBeloppAck] + ,[vb_FraktKostnBer] + ,[vb_FraktKostnDeb] + ,[vb_FraktKostnInland] + ,[vb_FraktKostnMan] + ,[vb_OvrFaktAvgift1] + ,[vb_OvrFaktAvgift10] + ,[vb_OvrFaktAvgift2] + ,[vb_OvrFaktAvgift3] + ,[vb_OvrFaktAvgift4] + ,[vb_OvrFaktAvgift5] + ,[vb_OvrFaktAvgift6] + ,[vb_OvrFaktAvgift7] + ,[vb_OvrFaktAvgift8] + ,[vb_OvrFaktAvgift9] + ,[vb_OvrFaktKostnad1] + ,[vb_OvrFaktKostnad2] + ,[vb_OvrFaktKostnInland1] + ,[vb_OvrFaktKostnInland2] + ,[VbOrdSum] + ,[VbOrdSumExklMoms] + ,[VbOrdSumInklMoms] + ,[VbOrdSumRabGr] + ,[ViktSumOrder] + ,[VolHeight] + ,[VolLength] + ,[Volume] + ,[VolWidth] + ,[VRef] + ,[webpublish] + ,[WorkFaktNr] +-- +-- + ) + values ( + @oh_AcceptCodePayment + ,@oh_AdressLappTyp + ,@oh_AdresslappUtskrDat + ,COALESCE( @oh_Aktiv, 0 ) + ,COALESCE( @oh_AnmodanMark, '0' ) + ,COALESCE( @oh_AntalEURPall, 0 ) + ,COALESCE( @oh_AntalKolli, 0 ) + ,COALESCE( @oh_AntalOvrPall, 0 ) + ,COALESCE( @oh_AntalRader, 0 ) + ,@oh_AoNr + ,@oh_AoNrAlfa + ,@oh_ArrivalAtCustomerDate + ,COALESCE( @oh_ArtBtotVikt, 0 ) + ,@oh_ArtSerieNrFrom + ,@oh_ArtSerieNrTom + ,COALESCE( @oh_ArtVikt, 0 ) + ,COALESCE( @oh_ArtVolym, 0 ) + ,COALESCE( @oh_AttBetalaBelopp, 0 ) + ,COALESCE( @oh_AutoFrislappas, '0' ) + ,@oh_AutoMatchedWith + ,@oh_AutoRegel + ,@oh_AutoRegelForskott + ,@oh_BetKod + ,@oh_BetKodForskott + ,COALESCE( @oh_BookQtyNotOnPickListFlag, '0' ) + ,@oh_BristKontrolleradDatum + ,COALESCE( @oh_BristKontrolleradStatus, 0 ) + ,COALESCE( @oh_BristStatusLagerUtlev, 0 ) + ,COALESCE( @oh_BristStatusPlaneringBegLevDat, 0 ) + ,COALESCE( @oh_BristStatusPlaneringBerLevDat, 0 ) + ,COALESCE( @oh_BruttoVikt, 0 ) + ,@oh_BusinessUnit + ,COALESCE( @oh_Cardpaymentcancelled, '0' ) + ,@oh_ClientSessionGUID_Str + ,COALESCE( @oh_CodeFixedDeparture, '0' ) + ,COALESCE( @oh_CostsExclVatBCU, 0 ) + ,COALESCE( @oh_CostsExclVatCurr, 0 ) + ,COALESCE( @oh_CostsInclVatBCU, 0 ) + ,COALESCE( @oh_CostsInclVatCurr, 0 ) + ,case when @oh_CreatedByDbObject is null then object_Name( @@ProcId ) else left( @oh_CreatedByDbObject + N'/' + object_Name( @@ProcId ), 60 ) end + ,@oh_CreditCardNumber + ,COALESCE( @oh_DelBokningTillaten, 0 ) + ,@oh_DelivToBusinessUnit + ,@oh_DelivToPONo + ,COALESCE( @oh_DelLevTillaten, 0 ) + ,@oh_DiffDgrVerklLevDatDagDat + ,COALESCE( @oh_DirektLeverans, '0' ) + ,COALESCE( @oh_DirektUttag, '0' ) + ,@oh_DistrKod + ,@oh_DivisKod + ,@oh_dtwe_JEEVES_Oh_OrderVarde + ,@oh_dtwu_JEEVES_Oh_OrderVarde + ,COALESCE( @oh_ebfilsent, 0 ) + ,@oh_ebfilsentdt + ,@oh_Edit + ,@oh_Editext + ,@oh_EditPlBLOB + ,COALESCE( @oh_EmballageFakt, '1' ) + ,COALESCE( @oh_EmballageKostnad, 0 ) + ,COALESCE( @oh_EmballageKostnInland, NULL ) + ,@oh_EstimatorOffNr + ,COALESCE( @oh_EstimatorOrder, '0' ) + ,@oh_Exec_Time_Log_String + ,COALESCE( @oh_ExecutionTime, 0 ) + ,@oh_ExpAvgKd + ,COALESCE( @oh_ExpeditionKostnad, 0 ) + ,COALESCE( @oh_ExpressKod, '0' ) + ,@oh_ExtorderNr + ,@oh_ExtOrdTyp + ,@oh_FaktAvPersSign + ,@oh_FaktDat + ,@oh_FaktDateTime + ,@oh_FaktDatKorr + ,@oh_FaktDatOrg + ,@oh_FaktFfDat + ,@oh_FaktNr + ,@oh_FaktNr_OCR + ,@oh_FaktNrAConto + ,@oh_FaktNrForskott + ,@oh_FaktNrKOrr + ,@oh_FaktNrOrg + ,COALESCE( @oh_FaktSlutLevOrder, '0' ) + ,COALESCE( @oh_FaktTB, 0 ) + ,COALESCE( @oh_FaktTbInklMoms, 0 ) + ,@oh_FakturerareKod + ,@oh_FfhNr + ,@oh_FiscalPrinterStatusDate + ,COALESCE( @oh_FlowDummyUniqueId, @use_when_DefStrDateTime ) + ,COALESCE( @oh_ForetagKod, 0 ) + ,COALESCE( @oh_ForsakringFakt, '1' ) + ,COALESCE( @oh_ForsakringsKostnad, 0 ) + ,COALESCE( @oh_ForsakrKostnInland, NULL ) + ,COALESCE( @oh_ForsakrKostnProc, 0 ) + ,COALESCE( @oh_ForskottBelopp, 0 ) + ,COALESCE( @oh_ForskottBeloppAck, 0 ) + ,@oh_ForskottMottagetDatum + ,@oh_ForskottOrdKopplTyp + ,@oh_FraktAvgKd + ,COALESCE( @oh_FrakthandlKod, '0' ) + ,COALESCE( @oh_FraktKostnBer, 0 ) + ,COALESCE( @oh_FraktKostnDeb, 0 ) + ,COALESCE( @oh_FraktKostnInland, NULL ) + ,COALESCE( @oh_FraktKostnMan, 0 ) + ,@oh_FraktSedelTyp + ,@oh_FraktsedelUtskrDat + ,COALESCE( @oh_FraktSkrymmeKod, '0' ) + ,COALESCE( @oh_FraktVikt, 0 ) + ,@oh_FriSlappDatTid + ,@oh_FsKd + ,@oh_FSUtskrDat + ,@oh_FtgKontaktNr + ,@oh_FtgNr + ,@oh_ftgperson + ,@oh_FtgPostnr + ,@oh_Giltighetstid + ,@oh_GiltigTomDatum + ,@oh_GodsMarke + ,@oh_GodsMarke1 + ,@oh_GodsMarke2 + ,@oh_GodsMarke3 + ,@oh_GodsMarke4 + ,COALESCE( @oh_Handel3Part, '0' ) + ,COALESCE( @oh_HandlingChargeProcessed, '0' ) + ,@oh_HideOrder + ,@oh_ICTDelivFromOrderNo + ,@oh_ICTDelivToOrderNo + ,@oh_ICTDelivToPONo + ,@oh_ICTDispatchMethod + ,@oh_ICTDispatchTerm + ,@oh_ICTRuleNumber + ,@oh_IdForOrderShuffle + ,@oh_InbSlag + ,@oh_IntrnCoNoOrigin + ,@oh_IntStatTransTyp + ,COALESCE( @oh_InventoryLocWMS, '0' ) + ,COALESCE( @oh_InvoiceChange, '0' ) + ,@oh_InvoicedUTCDateTime + ,@oh_Jeeves_Init_Insert_Enter + ,@oh_Jeeves_Init_Insert_PreIns + ,@oh_K4 + ,@oh_K5 + ,@oh_K6 + ,@oh_K7 + ,COALESCE( @oh_KalkylPrisFaktura, '0' ) + ,@oh_kampnr + ,@oh_KBarAvsandandeEnhet + ,COALESCE( @oh_KodEjFakturera, '0' ) + ,@oh_KopieradFranFaktNr + ,@oh_KopieradFranOrderNr + ,@oh_KopieradTillOrderNr + ,@oh_Kortspecifikinfo + ,@oh_Kortstatus + ,@oh_KortTransaktionsTyp + ,@oh_KostBar + ,@oh_KostStalleKod + ,COALESCE( @oh_KreditOrder, '0' ) + ,COALESCE( @oh_KreditSparrStatus, 0 ) + ,@oh_KstAvsandandeEnhet + ,COALESCE( @oh_Kund_PlKod, '1' ) + ,@oh_KundBestDat + ,@oh_KundBestNamn + ,@oh_KundBestNr + ,@oh_KundBetalareNr + ,@oh_KundFaktAdr + ,@oh_KundFraktBetalareNr + ,@oh_KundFraktDeb + ,@oh_KundKategoriKod + ,@oh_KundLevSattKod + ,COALESCE( @oh_KundPrisInklMoms, '0' ) + ,COALESCE( @oh_KundRabatt, 0 ) + ,COALESCE( @oh_KundRabattKod, '0' ) + ,COALESCE( @oh_KundRabattKod0, '0' ) + ,COALESCE( @oh_KundRabattKod1, '0' ) + ,COALESCE( @oh_KundRabattKod2, '0' ) + ,COALESCE( @oh_KundRabattMax, 0 ) + ,COALESCE( @oh_KundRabattMin, 0 ) + ,@oh_KundRef2 + ,COALESCE( @oh_KundSpecTextBe, '0' ) + ,COALESCE( @oh_KundSpecTextFa, '1' ) + ,COALESCE( @oh_KundSpecTextFs, '1' ) + ,COALESCE( @oh_KundSpecTextOe, '1' ) + ,COALESCE( @oh_KundSpecTextPl, '1' ) + ,COALESCE( @oh_KundSpecTextTo, '0' ) + ,COALESCE( @oh_KundStafflKod, '1' ) + ,@oh_KundTextKod + ,COALESCE( @oh_LagerFlyttning, '0' ) + ,@oh_LagPlats + ,@oh_LagStalle + ,@oh_LandsKod + ,COALESCE( @oh_LeadTimeMatrixBookingFlag, '0' ) + ,@oh_LegitimationNumber + ,COALESCE( @oh_LevArtBtotVikt, 0 ) + ,COALESCE( @oh_LevArtVikt, 0 ) + ,COALESCE( @oh_LevArtVolym, 0 ) + ,COALESCE( @oh_LevAviseringKod, '0' ) + ,COALESCE( @oh_LevForeTolv, '0' ) + ,@oh_LevHandlKod + ,@oh_LevSattKod + ,@oh_LevVillkKod + ,@oh_LfExcl + ,@oh_ManReAvstDT + ,@oh_ManReAvstPerDen + ,@oh_ManReAvstPersSign + ,COALESCE( @oh_MarkKundsMomsStyr, '0' ) + ,COALESCE( @oh_MarkNyttOEUtskr, '0' ) + ,COALESCE( @oh_MarkOrderUniktLager, '0' ) + ,@oh_MomsKod + ,@oh_MomsKodForskott + ,COALESCE( @oh_MottagetBelopp, 0 ) + ,COALESCE( @oh_MRP_InventoryTransferFlag, '0' ) + ,COALESCE( @oh_No_Trigger_Exec, 0 ) + ,COALESCE( @oh_OeKod, '1' ) + ,@oh_OeStatusEdi + ,@oh_OEUtskrDat + ,COALESCE( @oh_OffertRadNrToOrdRadNr, '1' ) + ,@oh_OffNr + ,COALESCE( @oh_OhFaktTB, 0 ) + ,COALESCE( @oh_OhFaktTBInklMoms, 0 ) + ,@oh_OhOrdBerednDatBase + ,@oh_OhOrdBerLevDatBase + ,COALESCE( @oh_OhOrdKostnad, 0 ) + ,COALESCE( @oh_OhOrdKostnadInklMoms, 0 ) + ,COALESCE( @oh_OhOrdSum, 0 ) + ,COALESCE( @oh_OhOrdSumInklMoms, 0 ) + ,COALESCE( @oh_OhVbOrdSum, 0 ) + ,COALESCE( @oh_OhVbOrdSumInklMoms, 0 ) + ,COALESCE( @oh_OIngSkapad, '0' ) + ,@oh_OkAttPlockaSattDatum + ,COALESCE( @oh_OkAttPlockaStatus, 0 ) + ,@oh_ole1 + ,@oh_ole2 + ,@oh_OrdBegLevDat + ,@oh_OrdBerednDat + ,@oh_OrdBerLevDat + ,@oh_OrdBerLevTid + ,@oh_OrdBeskr + ,COALESCE( @oh_OrdBokningsStatus, 0 ) + ,@oh_OrdDatum + ,COALESCE( @oh_OrderAvslutad, '0' ) + ,COALESCE( @oh_OrderBeloppIntFsg, NULL ) + ,COALESCE( @oh_OrderBeloppIntKop, NULL ) + ,COALESCE( @oh_OrderCostCurrency, '0' ) + ,@oh_OrderEnding + ,@oh_OrderKopplKod + ,COALESCE( @oh_OrderKostnadIntFsg, NULL ) + ,COALESCE( @oh_OrderKostnadIntKop, NULL ) + ,COALESCE( @oh_OrderNr, 0 ) + ,COALESCE( @oh_OrderNrAlfa, @use_when_DefStrDateTime ) + ,@oh_OrderNrKoppl + ,@oh_OrderNrKorr + ,@oh_OrderNrOffert + ,@oh_OrderNrOrg + ,@oh_OrderNrServ + ,COALESCE( @oh_OrderTBIntFsg, NULL ) + ,COALESCE( @oh_OrderTBIntKop, NULL ) + ,@oh_OrderTextKod + ,COALESCE( @oh_OrderTGIntFsg, NULL ) + ,COALESCE( @oh_OrderTGIntKop, NULL ) + ,@oh_OrdFoljesedelsNr + ,COALESCE( @oh_OrdKostnad, 0 ) + ,COALESCE( @oh_OrdKostnadInklMoms, 0 ) + ,@oh_OrdLevAdr1 + ,@oh_OrdLevAdr2 + ,@oh_OrdLevAdr3 + ,@oh_OrdLevAdr4 + ,@oh_OrdLevAdrBstOrt + ,@oh_OrdLevAdrLandsKod + ,@oh_OrdLevAdrProvinceCode + ,@oh_OrdLevAnvisnRad1 + ,@oh_OrdLevAnvisnRad2 + ,@oh_OrdLevDat + ,@oh_OrdLevDatOrg + ,COALESCE( @oh_OrdLevNr, 0 ) + ,@oh_OrdLevPlats1 + ,@oh_OrdLovLevDat + ,COALESCE( @oh_OrdRabatt, 0 ) + ,COALESCE( @oh_OrdRestNot, '0' ) + ,COALESCE( @oh_OrdRestNr, 0 ) + ,COALESCE( @oh_OrdStat, 0 ) + ,COALESCE( @oh_OrdSum, 0 ) + ,COALESCE( @oh_OrdSumExclCredChk, 0 ) + ,COALESCE( @oh_OrdSumExklMoms, 0 ) + ,COALESCE( @oh_OrdSumFraktBer, 0 ) + ,COALESCE( @oh_OrdSumInklMoms, 0 ) + ,COALESCE( @oh_OrdSumInklMomsExclCredChk, 0 ) + ,COALESCE( @oh_OrdSumRabGr, 0 ) + ,COALESCE( @oh_OrdSumReg, 0 ) + ,COALESCE( @oh_OrdSumValReg, 0 ) + ,@oh_OrdTranspDat + ,COALESCE( @oh_OrdTyp, 0 ) + ,@oh_OrdVerklLevDat + ,COALESCE( @oh_OULager_Auto_Utplock, '0' ) + ,COALESCE( @oh_OULager_Leverera_Allt, '0' ) + ,COALESCE( @oh_OvrFaktAvgift1, NULL ) + ,COALESCE( @oh_OvrFaktAvgift10, NULL ) + ,COALESCE( @oh_OvrFaktAvgift2, NULL ) + ,COALESCE( @oh_OvrFaktAvgift3, NULL ) + ,COALESCE( @oh_OvrFaktAvgift4, NULL ) + ,COALESCE( @oh_OvrFaktAvgift5, NULL ) + ,COALESCE( @oh_OvrFaktAvgift6, NULL ) + ,COALESCE( @oh_OvrFaktAvgift7, NULL ) + ,COALESCE( @oh_OvrFaktAvgift8, NULL ) + ,COALESCE( @oh_OvrFaktAvgift9, NULL ) + ,COALESCE( @oh_OvrFaktKostn1Fakt, '1' ) + ,COALESCE( @oh_OvrFaktKostn2Fakt, '1' ) + ,COALESCE( @oh_OvrFaktKostnad1, 0 ) + ,COALESCE( @oh_OvrFaktKostnad2, 0 ) + ,COALESCE( @oh_OvrFaktKostnInland1, NULL ) + ,COALESCE( @oh_OvrFaktKostnInland2, NULL ) + ,@oh_PackagingDate + ,@oh_PackareKod + ,@oh_PackSedelUtskrDat + ,@oh_PaymenttransID + ,COALESCE( @oh_PdmCount, 0 ) + ,COALESCE( @oh_PersSign, RIGHT(SUser_SName(),Col_Length('oh','PersSign')) ) + ,@oh_PickingLockedByUser + ,@oh_PlockIndexOrder + ,@oh_PlockJnrOrder + ,@oh_PLUtskrDat + ,COALESCE( @oh_PrisJustOrder, '0' ) + ,COALESCE( @oh_PrisJustOrderKost, '0' ) + ,@oh_PrisLista + ,@oh_ProjCode + ,@oh_ProspektId + ,@oh_PVMSeasonId + ,COALESCE( @oh_QQ_Ins_Trg_Start, convert( char(8), @LocalDateAndTime,112) + ' ' + convert( varchar(12), @LocalDateAndTime, 114 ) ) + ,@oh_RabKlass + ,@oh_Referensnummer + ,COALESCE( @oh_RegDat, convert( varchar(8), @LocalDateAndTime, 112 ) ) + ,@oh_ReplicateRecord + ,COALESCE( @oh_RestArtBtotVikt, 0 ) + ,COALESCE( @oh_RestArtVikt, 0 ) + ,COALESCE( @oh_RestArtVolym, 0 ) + ,@oh_RestBehKod + ,COALESCE( @oh_RowCreatedBy, RIGHT(SUser_SName(),Col_Length('oh','RowCreatedBy')) ) + ,COALESCE( @oh_RowCreatedDt, convert( char(8), @LocalDateAndTime,112) + ' ' + convert( varchar(12), @LocalDateAndTime, 114 ) ) + ,COALESCE( @oh_RowCreatedUTCDT, cast( convert( char(8), @UTCDateAndTime, 112 ) + ' ' + convert( char(5), @UTCDateAndTime, 114 ) as DateTime ) ) + ,@oh_RowUpdatedBy + ,@oh_RowUpdatedCols + ,@oh_RowUpdatedDt + ,@oh_RowUpdatedUTCDT + ,@oh_RptUnitNo + ,@oh_RU_Account + ,COALESCE( @oh_SalesTaxHandling, '0' ) + ,@oh_SalesType + ,@oh_Saljare + ,COALESCE( @oh_SamFaktUtskr, '1' ) + ,COALESCE( @oh_SamInKopMark, '0' ) + ,COALESCE( @oh_SendEdi, '1' ) + ,@oh_SendEdiDT + ,COALESCE( @oh_ShuffleOrder, '0' ) + ,COALESCE( @oh_SkrivUtskSk, '0' ) + ,@oh_SlutKundNamn1 + ,@oh_SlutKundNamn2 + ,@oh_SprakKod + ,@oh_SQLCmd2EnterTrg + ,COALESCE( @oh_StockReplenishment, '0' ) + ,COALESCE( @oh_TA_AmtCOD, 0 ) + ,@oh_TA_ConsNo + ,@oh_TA_CustomerMessage + ,@oh_TA_Edit + ,@oh_TA_FaxNotifiedNo + ,@oh_TA_GANno + ,@oh_TA_IntAutoNo + ,COALESCE( @oh_TA_Loadmeter, 0 ) + ,@oh_TA_MailNotified + ,@oh_TA_PhonNotifiedNo + ,@oh_TA_SMSNotifiedNo + ,@oh_TA_TemplKompCd + ,@oh_TaxAreaCode1 + ,@oh_TaxAreaCode2 + ,@oh_TaxAreaCode3 + ,@oh_TaxAreaCode4 + ,@oh_TaxAreaCode5 + ,COALESCE( @oh_TaxAreaRate, NULL ) + ,@oh_TaxCode + ,COALESCE( @oh_TerminsSakradOrder, '0' ) + ,COALESCE( @oh_TextEfterDokRader, '0' ) + ,@oh_TextKod + ,COALESCE( @oh_TillbakaBelopp, 0 ) + ,@oh_TillLagStalle + ,@oh_TimeZoneCode + ,COALESCE( @oh_TransitLeverans, '0' ) + ,@oh_TransportorsKod + ,COALESCE( @oh_UtskrBestDokSkaGoras, '0' ) + ,@oh_UtskrBestDokUtskrDT + ,COALESCE( @oh_UtskrDokLovSkaGoras, '1' ) + ,@oh_UtskrDokLovUtskrDT + ,@oh_ValDat + ,@oh_ValKod + ,COALESCE( @oh_ValKurs, 1 ) + ,COALESCE( @oh_VaruProv, '0' ) + ,@oh_VAT_Type + ,COALESCE( @oh_vb_EmballageKostnad, 0 ) + ,COALESCE( @oh_vb_EmballageKostnInland, NULL ) + ,COALESCE( @oh_vb_ExpeditionKostnad, 0 ) + ,COALESCE( @oh_vb_ForsakringsKostnad, 0 ) + ,COALESCE( @oh_vb_ForsakrKostnInland, NULL ) + ,COALESCE( @oh_vb_ForskottBelopp, NULL ) + ,COALESCE( @oh_vb_ForskottBeloppAck, 0 ) + ,COALESCE( @oh_vb_FraktKostnBer, 0 ) + ,COALESCE( @oh_vb_FraktKostnDeb, 0 ) + ,COALESCE( @oh_vb_FraktKostnInland, NULL ) + ,COALESCE( @oh_vb_FraktKostnMan, 0 ) + ,COALESCE( @oh_vb_OvrFaktAvgift1, NULL ) + ,COALESCE( @oh_vb_OvrFaktAvgift10, NULL ) + ,COALESCE( @oh_vb_OvrFaktAvgift2, NULL ) + ,COALESCE( @oh_vb_OvrFaktAvgift3, NULL ) + ,COALESCE( @oh_vb_OvrFaktAvgift4, NULL ) + ,COALESCE( @oh_vb_OvrFaktAvgift5, NULL ) + ,COALESCE( @oh_vb_OvrFaktAvgift6, NULL ) + ,COALESCE( @oh_vb_OvrFaktAvgift7, NULL ) + ,COALESCE( @oh_vb_OvrFaktAvgift8, NULL ) + ,COALESCE( @oh_vb_OvrFaktAvgift9, NULL ) + ,COALESCE( @oh_vb_OvrFaktKostnad1, 0 ) + ,COALESCE( @oh_vb_OvrFaktKostnad2, 0 ) + ,COALESCE( @oh_vb_OvrFaktKostnInland1, NULL ) + ,COALESCE( @oh_vb_OvrFaktKostnInland2, NULL ) + ,COALESCE( @oh_VbOrdSum, 0 ) + ,COALESCE( @oh_VbOrdSumExklMoms, 0 ) + ,COALESCE( @oh_VbOrdSumInklMoms, 0 ) + ,COALESCE( @oh_VbOrdSumRabGr, 0 ) + ,COALESCE( @oh_ViktSumOrder, '0' ) + ,COALESCE( @oh_VolHeight, 0 ) + ,COALESCE( @oh_VolLength, 0 ) + ,COALESCE( @oh_Volume, 0 ) + ,COALESCE( @oh_VolWidth, 0 ) + ,@oh_VRef + ,@oh_webpublish + ,@oh_WorkFaktNr +-- +-- + ) + +select @dbe=@@Error, @dbc=@@RowCount, @Jeeves_Init_Insert_PostIns = GetDate(); +if @dbe <> 0 or @dbc = 0 begin + if @@TranCount > 0 rollback transaction; + exec Jeeves_Spr_Db_Error @c_ForetagKod, @c_PersSign, @c_zLanguage, @dbe, @dbc, @Procedure_Name, N'oh', 'I', @xxx_PrimaryKeyValue; + while @@TranCount<@Enter_TranCount BEGIN TRANSACTION; + return -100; +end; + + +/**** +update [oh] set + [Exec_Time_Log_String] = [Exec_Time_Log_String] + ''+substring(convert(varchar,GetDate(),121),18,6) + ,[No_Trigger_Exec] = 1 - [No_Trigger_Exec] + where + [oh].[ForetagKod] = @oh_ForetagKod and + [oh].[OrderNr] = @oh_OrderNr +****/ + +-- +-- + +while @@TranCount > @Enter_TranCount COMMIT TRANSACTION; +while @@TranCount > @Enter_TranCount ROLLBACK TRANSACTION; +while @@TranCount < @Enter_TranCount BEGIN TRANSACTION + + +end try +begin catch + -- 0 ROLLBACK TRANSACTION; + execute Jeeves_Catch_SPR_Error @catch_ERROR_NUMBER OUTPUT, @catch_ERROR_MESSAGE OUTPUT, @Procedure_Name, @PgmId, @xxx_PrimaryKeyValue, @c_IntrnCoNo, @c_PersSign, @c_zLanguage, NULL; + while @@TranCount < @Enter_TranCount BEGIN TRANSACTION; + Execute Jeeves_RaisError @catch_ERROR_NUMBER, @catch_ERROR_MESSAGE; + return -100; + -- 0 begin + print '----'; + print 'Return error from procedure ''Jeeves_UsrDefModSqlObject'' when updating the object ''Jeeves_Init_Insert_oh'' with customer own modifications.'; + print 'Error_Number = ' + cast( @dbe as varchar(22) ); + print '----'; + end; + end try + begin catch + print '----'; + print 'Catch error from ''Jeeves_UsrDefModSqlObject'' when updating the object ''Jeeves_Init_Insert_oh'' with customer own modifications..'; + print 'Error_Number = ' + cast( Error_Number() as varchar(22) ); + print Error_Message(); + print '----'; + end catch; + print 'Execution time: '+ltrim( rtrim( str( cast( DateDiff( MILLISECOND, @Time, GetDate() ) as decimal(12,3) ) / 1000, 12, 3) ) ) + ' seconds.'; + print '--'; + end; +end; +go +print 'End Jeeves_Init_Insert_oh' +go +print 'End Jeeves_Init_Insert_oh' +go +if @@ServerName in ('jvsdev8','svma_home') and GetDate() < '20010830' exec Jeeves_Init_Insert_oh @c_ForetagKod=0, @c_PersSign='sm',@c_FtgNr='sm',@DebugMsg='x' +go diff --git a/jeeves_sp_updates/Jeeves_Init_Insert_orp.spr b/jeeves_sp_updates/Jeeves_Init_Insert_orp.spr new file mode 100644 index 0000000..f73e2a0 --- /dev/null +++ b/jeeves_sp_updates/Jeeves_Init_Insert_orp.spr @@ -0,0 +1,4401 @@ +set nocount on +go +If Object_ID( N'Jeeves_Add_Column' ) is not NULL execute Jeeves_Add_Column N'orp', N'ATPQueryId', N'int', NULL ,N'NULL'; -- 2016-08-17 +go +print 'Begin Jeeves_Init_Insert_orp' +go +print 'Begin Jeeves_Init_Insert_orp' +go +--if exists (select 1 from SysObjects where Name='Jeeves_Init_Insert_orp') drop procedure Jeeves_Init_Insert_orp +if not exists (select 1 from sys.objects where Name='Jeeves_Init_Insert_orp') execute ( 'create procedure Jeeves_Init_Insert_orp as return 0' ) +go +if object_id( N'Jeeves_UsrDefModSqlObject' ) is not NULL and + object_id( N'UsrDefModSqlObject' ) is not NULL +begin + if exists ( select 1 from UsrDefModSqlObject where DB_Object_Name = 'Jeeves_Init_Insert_orp' and UsrDefMod_type_SQLObject = 'MERGE' ) begin + declare @Time DateTime = GetDate(); + print '--'; + print 'Extracts customer own modifications from the object ''Jeeves_Init_Insert_orp''.'; + declare @dbe integer; + begin try + execute @dbe = Jeeves_UsrDefModSqlObject 'Jeeves_Init_Insert_orp', NULL, 'Extract', NULL, NULL, NULL, NULL, NULL, NULL, 'SQL_SCRIPT', 'X'; + if @dbe <> 0 begin + print '----'; + print 'Return error from procedure ''Jeeves_UsrDefModSqlObject'' when extracting customer own modifications from the object ''Jeeves_Init_Insert_orp''.'; + print 'Error_Number = ' + cast( @dbe as varchar(22) ); + print '----'; + end; + end try + begin catch + print '----'; + print 'Catch error from ''Jeeves_UsrDefModSqlObject'' when extracting customer own modifications from the object ''Jeeves_Init_Insert_orp''.'; + print 'Error_Number = ' + cast( Error_Number() as varchar(22) ); + print Error_Message(); + print '----'; + end catch; + print 'Execution time: '+ltrim( rtrim( str( cast( DateDiff( MILLISECOND, @Time, GetDate() ) as decimal(12,3) ) / 1000, 12, 3) ) ) + ' seconds.'; + print '--'; + end; +end; +go +alter procedure Jeeves_Init_Insert_orp +-- +-- Procedure Jeeves_Init_Insert_orp created 2017-05-15 15:55:12 by procedure JVSSTODS12.zero_r01.JEEVES_Generate_Procedure_Insert, IntrnCoNo 0; Jeeves version X (14), Sign = kp +-- + @c_AddArtInAktiv Jeeves_Boolean = NULL OUTPUT + ,@c_AddToMO Jeeves_MONo = NULL OUTPUT + ,@c_AddToPO Jeeves_PONo = NULL OUTPUT + ,@c_Aktiv smallint = NULL OUTPUT + ,@c_AltEnhetKod Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_AltOpPrior smallint = NULL OUTPUT + ,@c_AnmodanMark Jeeves_Boolean = NULL OUTPUT + ,@c_AnskaffningKop Jeeves_Boolean = NULL OUTPUT + ,@c_AnskaffningMotBehov Jeeves_Boolean = NULL OUTPUT + ,@c_AnskaffningTillv Jeeves_Boolean = NULL OUTPUT + ,@c_AntalAttLev decimal(17,6) = NULL OUTPUT + ,@c_AntalAttLevAltEnh decimal(17,6) = NULL OUTPUT + ,@c_AntalPaPlocklista decimal(17,6) = NULL OUTPUT + ,@c_AntalUnderPlock decimal(17,6) = NULL OUTPUT + ,@c_AntDec smallint = NULL OUTPUT + ,@c_AoNr Jeeves_MONo = NULL OUTPUT + ,@c_AoNrAlfa Jeeves_StrVarChar128 = NULL OUTPUT + ,@c_AoPos int = NULL OUTPUT + ,@c_AoStartDat DateTime = NULL OUTPUT + ,@c_ArkVersion int = NULL OUTPUT + ,@c_ArrivalAtCustomerDate DateTime = NULL OUTPUT + ,@c_ars_LagPlats Jeeves_StrVarChar20 = NULL OUTPUT + ,@c_ArtBeskr Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_ArtCirkaPris money = NULL OUTPUT + ,@c_ArtikelVariant Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtKalkBer money = NULL OUTPUT + ,@c_ArtKalkBerA money = NULL OUTPUT + ,@c_ArtKalkBerB money = NULL OUTPUT + ,@c_ArtKalkBerC money = NULL OUTPUT + ,@c_ArtKalkBerMtrl money = NULL OUTPUT + ,@c_ArtKalkBerStart money = NULL OUTPUT + ,@c_ArtKalkBerSum money = NULL OUTPUT + ,@c_ArtKalkBudg money = NULL OUTPUT + ,@c_ArtKalkPer smallint = NULL OUTPUT + ,@c_ArtKalkPris money = NULL OUTPUT + ,@c_ArtKalkprisE money = NULL OUTPUT + ,@c_ArtKalkprisO money = NULL OUTPUT + ,@c_ArtKalkprisOFast money = NULL OUTPUT + ,@c_ArtKalkprisOMtrl money = NULL OUTPUT + ,@c_ArtKod smallint = NULL OUTPUT + ,@c_ArtKundRabKod Jeeves_Boolean = NULL OUTPUT + ,@c_ArtLevPrior smallint = NULL OUTPUT + ,@c_ArtNr Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtNrAltArt Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtNrEAN Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtNrKund Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtNrLev Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtNrRegMall Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtOmvFaktor ZtPurQty2Stock = NULL OUTPUT + ,@c_ArtPackSeparat Jeeves_Boolean = NULL OUTPUT + ,@c_ArtProdKlass Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_ArtProdKonto Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_ArtRevId Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_ArtRitnNr Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtSerieNr Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtSerieNrFrom Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ArtSerieNrTom Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_AtagandeGrad smallint = NULL OUTPUT + ,@c_ATPQueryId int = NULL OUTPUT + ,@c_AutDelivOU_MO smallint = NULL OUTPUT + ,@c_AutoCreated Jeeves_Boolean = NULL OUTPUT + ,@c_AutoFrislappas Jeeves_Boolean = NULL OUTPUT + ,@c_AutoOrderLine smallint = NULL OUTPUT + ,@c_AutoRegel Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_AutStockBookingRule smallint = NULL OUTPUT + ,@c_BAntalAvi float = NULL OUTPUT + ,@c_BatchBokas Jeeves_Boolean = NULL OUTPUT + ,@c_BatchId Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_Bestallas Jeeves_Boolean = NULL OUTPUT + ,@c_BestAnt decimal(17,6) = NULL OUTPUT + ,@c_BestAntExtQty decimal(17,6) = NULL OUTPUT + ,@c_BestInPris money = NULL OUTPUT + ,@c_BestNr Jeeves_PONo = NULL OUTPUT + ,@c_BestRadNr int = NULL OUTPUT + ,@c_BestRestNr smallint = NULL OUTPUT + ,@c_BFigNr Jeeves_StrVarChar6 = NULL OUTPUT + ,@c_BokatAntal decimal(17,6) = NULL OUTPUT + ,@c_BookQtyMO decimal(17,6) = NULL OUTPUT + ,@c_BookQtyPO decimal(17,6) = NULL OUTPUT + ,@c_BristKontrolleradStatus smallint = NULL OUTPUT + ,@c_BristStatusLagerUtlev smallint = NULL OUTPUT + ,@c_BristStatusPlaneringBegLevDat smallint = NULL OUTPUT + ,@c_BristStatusPlaneringBerLevDat smallint = NULL OUTPUT + ,@c_BusinessUnit Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_ClientSessionGUID_Str ztUniqueIdentifier = NULL OUTPUT + ,@c_CnfgrUniqueId Jeeves_SONo = NULL OUTPUT + ,@c_CodeFixedDeparture Jeeves_Boolean = NULL OUTPUT + ,@c_CreatedByDbObject Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_DelBokningTillaten smallint = NULL OUTPUT + ,@c_DelivFromBusinessUnit Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_DelivToBusinessUnit Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_DelivToPOBackorderNo smallint = NULL OUTPUT + ,@c_DelivToPOLnNo smallint = NULL OUTPUT + ,@c_DelivToPONo int = NULL OUTPUT + ,@c_DelLevTillaten smallint = NULL OUTPUT + ,@c_DirektLeverans Jeeves_Boolean = NULL OUTPUT + ,@c_DirektUttag Jeeves_Boolean = NULL OUTPUT + ,@c_DiscountOrderLine smallint = NULL OUTPUT + ,@c_DoIndirectUpdate varchar(1) = NULL OUTPUT + ,@c_Edit Jeeves_StrVarCharMax = NULL OUTPUT + ,@c_Editext Jeeves_StrVarCharMax = NULL OUTPUT + ,@c_EnhetsKod Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_EstimatorOrder Jeeves_Boolean = NULL OUTPUT + ,@c_Exec_Time_Log_String Jeeves_StrVarChar512 = NULL OUTPUT + ,@c_ExecutionTime float = NULL OUTPUT + ,@c_ExternQty decimal(17,6) = NULL OUTPUT + ,@c_ExtOrderNr Jeeves_StrVarChar17 = NULL OUTPUT + ,@c_ExtOrdRadNr int = NULL OUTPUT + ,@c_ExtOrdTyp smallint = NULL OUTPUT + ,@c_FaktDat DateTime = NULL OUTPUT + ,@c_FaktDatKorr DateTime = NULL OUTPUT + ,@c_FaktDatOrg DateTime = NULL OUTPUT + ,@c_FaktNr Jeeves_InvNo = NULL OUTPUT + ,@c_FaktNrKorr Jeeves_InvNo = NULL OUTPUT + ,@c_FaktNrOrg Jeeves_InvNo = NULL OUTPUT + ,@c_FaktorDelLevPkt decimal(18,8) = NULL OUTPUT + ,@c_FfhNr int = NULL OUTPUT + ,@c_FfhRadNr smallint = NULL OUTPUT + ,@c_FlodesGrupp Jeeves_StrVarChar5 = NULL OUTPUT + ,@c_FoljesedelsRef Jeeves_StrVarChar17 = NULL OUTPUT + ,@c_ForbrukningsMaterial Jeeves_Boolean = NULL OUTPUT + ,@c_ForetagKod smallint = NULL OUTPUT + ,@c_FPris money = NULL OUTPUT + ,@c_FPrisFast money = NULL OUTPUT + ,@c_FPrisInternt money = NULL OUTPUT + ,@c_FPrisInterntEnlRegel money = NULL OUTPUT + ,@c_FsgArtOmvFaktor float = NULL OUTPUT + ,@c_FsgPrisPer float = NULL OUTPUT + ,@c_FtgNr Jeeves_CompanyNo = NULL OUTPUT + ,@c_GodsMarke Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_GroupPoWoOn Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_Handel3Part Jeeves_Boolean = NULL OUTPUT + ,@c_ICTAdjmtFactor decimal(18,8) = NULL OUTPUT + ,@c_ICTArtKalkPer smallint = NULL OUTPUT + ,@c_ICTCodeFixedDeparture Jeeves_Boolean = NULL OUTPUT + ,@c_ICTCreditOrderInfo Jeeves_StrVarChar128 = NULL OUTPUT + ,@c_ICTDelivFromBackOrderNo Jeeves_SONo = NULL OUTPUT + ,@c_ICTDelivFromOrderNo Jeeves_SONo = NULL OUTPUT + ,@c_ICTDelivFromOrdLnNo int = NULL OUTPUT + ,@c_ICTDelivFromOrdSubLnNo int = NULL OUTPUT + ,@c_ICTDelivToBackOrderNo Jeeves_SONo = NULL OUTPUT + ,@c_ICTDelivToOrderNo Jeeves_SONo = NULL OUTPUT + ,@c_ICTDelivToOrdLnNo int = NULL OUTPUT + ,@c_ICTDelivToOrdSubLnNo int = NULL OUTPUT + ,@c_ICTDelivToPOBackorderNo Jeeves_SONo = NULL OUTPUT + ,@c_ICTDelivToPOLnNo int = NULL OUTPUT + ,@c_ICTDelivToPONo Jeeves_PONo = NULL OUTPUT + ,@c_ICTDispatchMethod smallint = NULL OUTPUT + ,@c_ICTOrdBerednDat DateTime = NULL OUTPUT + ,@c_ICTOrdBerLevDat DateTime = NULL OUTPUT + ,@c_ICTOrdBerLevTid ztTime = NULL OUTPUT + ,@c_ICTOrdLevNr smallint = NULL OUTPUT + ,@c_ICTOrdLnStatus smallint = NULL OUTPUT + ,@c_ICTOrdResrvStat smallint = NULL OUTPUT + ,@c_ICTPackageCode Jeeves_Boolean = NULL OUTPUT + ,@c_ICTPriceType smallint = NULL OUTPUT + ,@c_ICTRuleNumber smallint = NULL OUTPUT + ,@c_ICTTransportTid smallint = NULL OUTPUT + ,@c_IdForOrderShuffle Jeeves_StrVarChar20 = NULL OUTPUT + ,@c_IndividRef Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_IndividRef_AB Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_IndividRef_AC Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_IndividRef_AD Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_IndividRef_AE Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_IndividRef_AF Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_IndividRef_VV Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_InkAvt int = NULL OUTPUT + ,@c_Ins_DT_MilliSecond DateTime = NULL OUTPUT + ,@c_IntrnCoNoOrigin smallint = NULL OUTPUT + ,@c_IntStatTransTyp smallint = NULL OUTPUT + ,@c_InValKurs decimal(18,8) = NULL OUTPUT + ,@c_InValuta Jeeves_StrVarChar3 = NULL OUTPUT + ,@c_InventoryLocWMS Jeeves_Boolean = NULL OUTPUT + ,@c_Jeeves_Init_Insert_Enter DateTime = NULL OUTPUT + ,@c_Jeeves_Init_Insert_PreIns DateTime = NULL OUTPUT + ,@c_K4 Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_K5 Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_K6 Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_K7 Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_KalkylPrisFaktura Jeeves_StrVarChar = NULL OUTPUT + ,@c_kampnr int = NULL OUTPUT + ,@c_KanbanSignal Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_KBarAvsandandeEnhet Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_KodEjFakturera Jeeves_Boolean = NULL OUTPUT + ,@c_KodEJUtskrFA Jeeves_Boolean = NULL OUTPUT + ,@c_KodEJUtskrFS Jeeves_Boolean = NULL OUTPUT + ,@c_KodEJUtskrOE Jeeves_Boolean = NULL OUTPUT + ,@c_KodExtTextToOrder Jeeves_Boolean = NULL OUTPUT + ,@c_KodLagerOmBokning Jeeves_Boolean = NULL OUTPUT + ,@c_KonfigArtNr Jeeves_ItemNo = NULL OUTPUT + ,@c_KopieradFranFaktNr Jeeves_InvNo = NULL OUTPUT + ,@c_KopieradFranOrderNr Jeeves_SONo = NULL OUTPUT + ,@c_KopieradTillOrderNr Jeeves_SONo = NULL OUTPUT + ,@c_KorId int = NULL OUTPUT + ,@c_KostBar Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_KostStalleKod Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_KostStalleKodIntFsg Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_KreditOrder Jeeves_Boolean = NULL OUTPUT + ,@c_KstAvsandandeEnhet Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_KundBestNr Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_KundIntOrderNr Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_KundIntOrdRadNr int = NULL OUTPUT + ,@c_KundKategoriKod smallint = NULL OUTPUT + ,@c_KundPrisInklMoms Jeeves_Boolean = NULL OUTPUT + ,@c_KundRabatt decimal(18,8) = NULL OUTPUT + ,@c_LagerBokas Jeeves_Boolean = NULL OUTPUT + ,@c_LagerFlyttning Jeeves_Boolean = NULL OUTPUT + ,@c_LagerHanteringTyp smallint = NULL OUTPUT + ,@c_LagPlats Jeeves_StrVarChar20 = NULL OUTPUT + ,@c_LagStalle Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_LagStalleLevOrder Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_LagStalleOULager Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_LeadTimeMatrixBookingFlag Jeeves_Boolean = NULL OUTPUT + ,@c_LedTid_orp_2_bp_ti smallint = NULL OUTPUT + ,@c_LevAntalAltEnhSparrat decimal(17,6) = NULL OUTPUT + ,@c_LevAntalSparrat decimal(17,6) = NULL OUTPUT + ,@c_LevNr Jeeves_CompanyNo = NULL OUTPUT + ,@c_LevRabattProc1 decimal(18,8) = NULL OUTPUT + ,@c_LevsArtBeskr Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_LevSattKod smallint = NULL OUTPUT + ,@c_LevTid ztTime = NULL OUTPUT + ,@c_ManReAvstDT DateTime = NULL OUTPUT + ,@c_ManReAvstPerDen DateTime = NULL OUTPUT + ,@c_ManReAvstPersSign Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_MarkDelLevPkt Jeeves_Boolean = NULL OUTPUT + ,@c_MarkOrderUniktKalkP Jeeves_Boolean = NULL OUTPUT + ,@c_MarkOrderUniktLager Jeeves_Boolean = NULL OUTPUT + ,@c_MarkUpArtKalkPrisO float = NULL OUTPUT + ,@c_MomsKod smallint = NULL OUTPUT + ,@c_MRP_InventoryTransferFlag Jeeves_Boolean = NULL OUTPUT + ,@c_MtrlVerklKost money = NULL OUTPUT + ,@c_MtrlVerklKostJustering money = NULL OUTPUT + ,@c_MtrlVerklKostMtrl money = NULL OUTPUT + ,@c_NettoEjRabKod Jeeves_Boolean = NULL OUTPUT + ,@c_NettoPris money = NULL OUTPUT + ,@c_No_Trigger_Exec smallint = NULL OUTPUT + ,@c_NotInvoiceOrderLine Jeeves_Boolean = NULL OUTPUT + ,@c_OffNr Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_OffRadNr smallint = NULL OUTPUT + ,@c_OingSkapad Jeeves_Boolean = NULL OUTPUT + ,@c_OkAttPlockaSattDatum DateTime = NULL OUTPUT + ,@c_OkAttPlockaStatus smallint = NULL OUTPUT + ,@c_ole1 Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_ole2 Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_OneOffSalesCode Jeeves_Boolean = NULL OUTPUT + ,@c_OrdAntal decimal(17,6) = NULL OUTPUT + ,@c_OrdAntalAltEnh decimal(17,6) = NULL OUTPUT + ,@c_OrdAntalB float = NULL OUTPUT + ,@c_OrdAntalC float = NULL OUTPUT + ,@c_OrdArtBeskr Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_OrdBegLevDat DateTime = NULL OUTPUT + ,@c_OrdBerednDat DateTime = NULL OUTPUT + ,@c_OrdBerLevDat DateTime = NULL OUTPUT + ,@c_OrdBerLevDatRest DateTime = NULL OUTPUT + ,@c_OrdBerLevTid ztTime = NULL OUTPUT + ,@c_OrdBokningsStatus smallint = NULL OUTPUT + ,@c_OrdDatum DateTime = NULL OUTPUT + ,@c_OrderBeloppIntFsg money = NULL OUTPUT + ,@c_OrderBeloppIntKop money = NULL OUTPUT + ,@c_OrderFranOffert Jeeves_Boolean = NULL OUTPUT + ,@c_OrderKod smallint = NULL OUTPUT + ,@c_OrderKopplAntal decimal(17,6) = NULL OUTPUT + ,@c_OrderKopplKod smallint = NULL OUTPUT + ,@c_OrderKostnadIntFsg money = NULL OUTPUT + ,@c_OrderKostnadIntKop money = NULL OUTPUT + ,@c_OrderLineFromOrderB smallint = NULL OUTPUT + ,@c_OrderNr Jeeves_SONo = NULL OUTPUT + ,@c_OrderNrAlfa Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_OrderNrKoppl Jeeves_SONo = NULL OUTPUT + ,@c_OrderNrKorr Jeeves_SONo = NULL OUTPUT + ,@c_OrderNrOffert Jeeves_SONo = NULL OUTPUT + ,@c_OrderNrOrg Jeeves_SONo = NULL OUTPUT + ,@c_OrderNrServ Jeeves_SONo = NULL OUTPUT + ,@c_OrderRadFaktKostnad Jeeves_Boolean = NULL OUTPUT + ,@c_OrderRowFromEstimator Jeeves_Boolean = NULL OUTPUT + ,@c_OrderTBIntFsg money = NULL OUTPUT + ,@c_OrderTBIntKop money = NULL OUTPUT + ,@c_OrderTGIntFsg decimal(18,8) = NULL OUTPUT + ,@c_OrderTGIntKop decimal(18,8) = NULL OUTPUT + ,@c_OrderUniktLager decimal(17,6) = NULL OUTPUT + ,@c_OrdFoljesedelsNr int = NULL OUTPUT + ,@c_OrdFsNr smallint = NULL OUTPUT + ,@c_OrdLevAntal decimal(17,6) = NULL OUTPUT + ,@c_OrdLevAntalAltEnh decimal(17,6) = NULL OUTPUT + ,@c_OrdLevDat DateTime = NULL OUTPUT + ,@c_OrdLevDatOrg DateTime = NULL OUTPUT + ,@c_OrdLevNr smallint = NULL OUTPUT + ,@c_OrdLevPlats1 Jeeves_CompanyNo = NULL OUTPUT + ,@c_OrdLovLevDat DateTime = NULL OUTPUT + ,@c_OrdQtyOnFfh decimal(17,6) = NULL OUTPUT + ,@c_OrdRabatt decimal(18,8) = NULL OUTPUT + ,@c_OrdRadNr int = NULL OUTPUT + ,@c_OrdRadNrKoppl int = NULL OUTPUT + ,@c_OrdRadNrMall int = NULL OUTPUT + ,@c_OrdRadNrOffert int = NULL OUTPUT + ,@c_OrdRadNrOrg int = NULL OUTPUT + ,@c_OrdRadNrServ int = NULL OUTPUT + ,@c_OrdRadNrStrPos int = NULL OUTPUT + ,@c_OrdRadNrStrPosOffert int = NULL OUTPUT + ,@c_OrdRadNrStrPosOrg int = NULL OUTPUT + ,@c_OrdRadNrStrPosUrspr int = NULL OUTPUT + ,@c_OrdRadNrUrspr int = NULL OUTPUT + ,@c_OrdRadRab decimal(18,8) = NULL OUTPUT + ,@c_OrdRadSplitKod smallint = NULL OUTPUT + ,@c_OrdRadSt smallint = NULL OUTPUT + ,@c_OrdRadSum money = NULL OUTPUT + ,@c_OrdRestAnt decimal(17,6) = NULL OUTPUT + ,@c_OrdRestAntAltEnh decimal(17,6) = NULL OUTPUT + ,@c_OrdRestAntPack decimal(17,6) = NULL OUTPUT + ,@c_OrdRestNot Jeeves_Boolean = NULL OUTPUT + ,@c_OrdRestNr smallint = NULL OUTPUT + ,@c_OrdRestNrOrg smallint = NULL OUTPUT + ,@c_OrdStdAntal decimal(17,6) = NULL OUTPUT + ,@c_OrdTyp smallint = NULL OUTPUT + ,@c_OrdvRabKod smallint = NULL OUTPUT + ,@c_OrpRadText Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_OrpRadTextBe Jeeves_Boolean = NULL OUTPUT + ,@c_OrpRadTextFa Jeeves_Boolean = NULL OUTPUT + ,@c_OrpRadTextFs Jeeves_Boolean = NULL OUTPUT + ,@c_OrpRadTextOe Jeeves_Boolean = NULL OUTPUT + ,@c_OrpRadTextPl Jeeves_Boolean = NULL OUTPUT + ,@c_OrpRadTextTo Jeeves_Boolean = NULL OUTPUT + ,@c_OrpStrDetUt smallint = NULL OUTPUT + ,@c_OrpStrPrisBer smallint = NULL OUTPUT + ,@c_PackageItemOnPickList Jeeves_Boolean = NULL OUTPUT + ,@c_PackageItemQty2Det Jeeves_Boolean = NULL OUTPUT + ,@c_PackageItemZero Jeeves_Boolean = NULL OUTPUT + ,@c_PackagingDate DateTime = NULL OUTPUT + ,@c_PaketArtikel Jeeves_Boolean = NULL OUTPUT + ,@c_PaketMultiMomsKod Jeeves_Boolean = NULL OUTPUT + ,@c_PaketUnderArbete Jeeves_Boolean = NULL OUTPUT + ,@c_pdmcount int = NULL OUTPUT + ,@c_PersSign Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_PkgAndDetailOnPickList Jeeves_Boolean = NULL OUTPUT + ,@c_PkgItemDiscnt2Detail Jeeves_Boolean = NULL OUTPUT + ,@c_PktOrdRestNr smallint = NULL OUTPUT + ,@c_PktVbOrdRadSumNettoUrspr money = NULL OUTPUT + ,@c_PktVbOrdRadSumUrspr money = NULL OUTPUT + ,@c_PlockJnrOrder int = NULL OUTPUT + ,@c_PLUtskrDat DateTime = NULL OUTPUT + ,@c_PrelFaktVardeUtlev money = NULL OUTPUT + ,@c_PrisAdaco smallint = NULL OUTPUT + ,@c_PrisAndrDatum DateTime = NULL OUTPUT + ,@c_PrisHantTyp smallint = NULL OUTPUT + ,@c_PrisHantTypIntFsg smallint = NULL OUTPUT + ,@c_PrisJustOrder Jeeves_Boolean = NULL OUTPUT + ,@c_PrisJustOrderKost Jeeves_Boolean = NULL OUTPUT + ,@c_PrisLista int = NULL OUTPUT + ,@c_PrisTypP smallint = NULL OUTPUT + ,@c_PrjManufMilestone smallint = NULL OUTPUT + ,@c_ProdGr Jeeves_StrVarChar5 = NULL OUTPUT + ,@c_ProjCode Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_ProspektId int = NULL OUTPUT + ,@c_PVmAssortQty decimal(17,6) = NULL OUTPUT + ,@c_PVMAssortQtyTot decimal(17,6) = NULL OUTPUT + ,@c_PVmAssortVariant Jeeves_Boolean = NULL OUTPUT + ,@c_PvmDispCheckDateAccept smallint = NULL OUTPUT + ,@c_PvmErrMessage Jeeves_StrVarCharMax = NULL OUTPUT + ,@c_PvmGridNo smallint = NULL OUTPUT + ,@c_PvmGridRepOrderBy smallint = NULL OUTPUT + ,@c_PvmOrdRadNrOrg int = NULL OUTPUT + ,@c_PvmOrdRadNrStrPosOrg int = NULL OUTPUT + ,@c_PvmOrdRestNrOrg smallint = NULL OUTPUT + ,@c_PvmPickPropQty decimal(17,6) = NULL OUTPUT + ,@c_PvmRowIsPvm smallint = NULL OUTPUT + ,@c_PVMSeasonId Jeeves_StrVarChar15 = NULL OUTPUT + ,@c_PvmWarningMessage Jeeves_StrVarCharMax = NULL OUTPUT + ,@c_q_ALFA_KonteraEO2Palagg Jeeves_Boolean = NULL OUTPUT + ,@c_q_ALFA_KonteraEOPalagg Jeeves_Boolean = NULL OUTPUT + ,@c_q_ALFA_KonteraGO2Palagg Jeeves_Boolean = NULL OUTPUT + ,@c_QQ_Ins_Trg_Start DateTime = NULL OUTPUT + ,@c_rabatt decimal(18,8) = NULL OUTPUT + ,@c_rabatt1 decimal(18,8) = NULL OUTPUT + ,@c_rabatt2 decimal(18,8) = NULL OUTPUT + ,@c_rabatt3 decimal(18,8) = NULL OUTPUT + ,@c_RabattGrundAntal decimal(17,6) = NULL OUTPUT + ,@c_rabattval money = NULL OUTPUT + ,@c_rabattval1 money = NULL OUTPUT + ,@c_rabattval2 money = NULL OUTPUT + ,@c_rabattval3 money = NULL OUTPUT + ,@c_RegDat DateTime = NULL OUTPUT + ,@c_ReplicateRecord smallint = NULL OUTPUT + ,@c_ReservdelsOrder Jeeves_Boolean = NULL OUTPUT + ,@c_RestBehKod smallint = NULL OUTPUT + ,@c_RowCreatedBy Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_RowCreatedDT DateTime = NULL OUTPUT + ,@c_RowCreatedUTCDT DateTime = NULL OUTPUT + ,@c_RowTranStampLast ztUniqueIdentifier = NULL OUTPUT + ,@c_RowUpdatedBy Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_RowUpdatedCols Jeeves_StrVarChar256 = NULL OUTPUT + ,@c_RowUpdatedDT DateTime = NULL OUTPUT + ,@c_RowUpdatedUTCDT DateTime = NULL OUTPUT + ,@c_RptUnitNo smallint = NULL OUTPUT + ,@c_SalesTaxHandling Jeeves_Boolean = NULL OUTPUT + ,@c_Saljare Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_SamInKopMark Jeeves_Boolean = NULL OUTPUT + ,@c_SamLevKod Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_SamPlockas Jeeves_Boolean = NULL OUTPUT + ,@c_SamPlockListeNr int = NULL OUTPUT + ,@c_SamPlockLopNr smallint = NULL OUTPUT + ,@c_SerieNrBokas Jeeves_Boolean = NULL OUTPUT + ,@c_ServiceLevelCode Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_ShipmPlanAlphaid Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_ShuffledFromBackOrderNo smallint = NULL OUTPUT + ,@c_ShuffledFromOrderNo Jeeves_SONo = NULL OUTPUT + ,@c_ShuffledFromOrdLnNo smallint = NULL OUTPUT + ,@c_ShuffledFromOrdSubLnNo smallint = NULL OUTPUT + ,@c_ShuffledOrderRow Jeeves_Boolean = NULL OUTPUT + ,@c_ShuffledToBackOrderNo smallint = NULL OUTPUT + ,@c_ShuffledToOrderNo Jeeves_SONo = NULL OUTPUT + ,@c_ShuffledToOrdLnNo smallint = NULL OUTPUT + ,@c_ShuffledToOrdSubLnNo smallint = NULL OUTPUT + ,@c_spid int = NULL OUTPUT + ,@c_SprakKod smallint = NULL OUTPUT + ,@c_SQLCmd2EnterTrg int = NULL OUTPUT + ,@c_SqlStmtStartedDT DateTime = NULL OUTPUT + ,@c_SrDummyUniqueId ztUniqueIdentifier = NULL OUTPUT + ,@c_StafflingsKod Jeeves_Boolean = NULL OUTPUT + ,@c_StatusKodNyttOE smallint = NULL OUTPUT + ,@c_StockReplenishment Jeeves_Boolean = NULL OUTPUT + ,@c_StrDateTimeBIA Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_StrDateTimeOrpo Jeeves_StrVarChar64 = NULL OUTPUT + ,@c_StrukturRevision Jeeves_StrVarChar10 = NULL OUTPUT + ,@c_SumKalkVardeIngDet money = NULL OUTPUT + ,@c_SumKalkVardeIngDetMtrl money = NULL OUTPUT + ,@c_SumUppbokKostFranIngTO money = NULL OUTPUT + ,@c_SumVardeIngDet money = NULL OUTPUT + ,@c_SumVbVardeIngDet money = NULL OUTPUT + ,@c_SurChOfRow smallint = NULL OUTPUT + ,@c_TaxCode smallint = NULL OUTPUT + ,@c_TextVatCode Jeeves_StrVarChar4 = NULL OUTPUT + ,@c_TillLagPlats Jeeves_StrVarChar20 = NULL OUTPUT + ,@c_TillValArtikelSkapad Jeeves_Boolean = NULL OUTPUT + ,@c_TillValArtToArtNr Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_TillValArtToOrdRadNr int = NULL OUTPUT + ,@c_TimeZoneCode smallint = NULL OUTPUT + ,@c_TotOrdLevAntal decimal(17,6) = NULL OUTPUT + ,@c_TransitLeverans Jeeves_Boolean = NULL OUTPUT + ,@c_Turordning Jeeves_StrVarChar20 = NULL OUTPUT + ,@c_UrsprOrderAntal decimal(17,6) = NULL OUTPUT + ,@c_UtplocksKod Jeeves_Boolean = NULL OUTPUT + ,@c_UtskrDokLovAntal decimal(17,6) = NULL OUTPUT + ,@c_UtskrDokLovLevDat DateTime = NULL OUTPUT + ,@c_UtskrDokLovPris money = NULL OUTPUT + ,@c_UtskrDokLovSkaGoras Jeeves_Boolean = NULL OUTPUT + ,@c_UtskrDokLovUtskrDT DateTime = NULL OUTPUT + ,@c_UtskrFoljesedel Jeeves_Boolean = NULL OUTPUT + ,@c_UtskrPlocklista Jeeves_Boolean = NULL OUTPUT + ,@c_ValKlausul smallint = NULL OUTPUT + ,@c_ValKod Jeeves_StrVarChar3 = NULL OUTPUT + ,@c_ValKurs decimal(18,8) = NULL OUTPUT + ,@c_VariantGruppH Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_VariantGruppT Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_VariantGruppV Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_VariantGruppX Jeeves_StrVarChar32 = NULL OUTPUT + ,@c_VaruGruppKod Jeeves_StrVarChar8 = NULL OUTPUT + ,@c_VaruProv Jeeves_StrVarChar = NULL OUTPUT + ,@c_VAT_Type smallint = NULL OUTPUT + ,@c_VATCode2 smallint = NULL OUTPUT + ,@c_VATCode3 smallint = NULL OUTPUT + ,@c_Vb_InPris decimal(22,8) = NULL OUTPUT + ,@c_Vb_InPris_Mtrl money = NULL OUTPUT + ,@c_vb_NettoPris money = NULL OUTPUT + ,@c_vb_PkgToDetCalcDiff money = NULL OUTPUT + ,@c_vb_pris money = NULL OUTPUT + ,@c_vb_PrisFast money = NULL OUTPUT + ,@c_Vb_PrisInklMoms money = NULL OUTPUT + ,@c_Vb_RadVardeExklMoms money = NULL OUTPUT + ,@c_Vb_RadVardeInklMoms money = NULL OUTPUT + ,@c_VbArtKalkBerSum money = NULL OUTPUT + ,@c_vbKalkPris decimal(22,8) = NULL OUTPUT + ,@c_VbOrdRabattSum money = NULL OUTPUT + ,@c_VbOrdRabattSumNetto money = NULL OUTPUT + ,@c_VbOrdRadSum money = NULL OUTPUT + ,@c_VbOrdRadSumNetto money = NULL OUTPUT + ,@c_VbPrisER money = NULL OUTPUT + ,@c_VolymRabatt decimal(18,8) = NULL OUTPUT + ,@DebugMsg Jeeves_StrVarChar10 = NULL --OUTPUT + ,@c_Logg_Exec_Time_String Jeeves_StrVarChar4000 = NULL OUTPUT + ,@c_Integer_NULL integer = NULL + ,@c_Varchar_NULL Jeeves_StrVarChar2048 = NULL + ,@c_Date_NULL DateTime = NULL + ,@c_AdjustMinutes2GetLocalTime integer = NULL + ,@c_zLanguage integer = NULL + +-- +-- + +as + +declare @Enter_TranCount integer +set @Enter_TranCount = @@TranCount + +set @c_Logg_Exec_Time_String=case when @c_Logg_Exec_Time_String is not null then @c_Logg_Exec_Time_String else '' end + + char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Enter orp, opt='+cast(@@Options as varchar(11)) +declare + @Jeeves_Init_Insert_Enter DateTime, + @Jeeves_Init_Insert_PreIns DateTime, + @Jeeves_Init_Insert_PostIns DateTime +set @Jeeves_Init_Insert_Enter = GetDate() + +/*BEGIN_SQLServerOnly*/ +set rowcount 0; +set nocount on; -- @@Options=512 + + +declare @Set_Options integer = 0; +-- +-- + +if @Set_Options = 0 begin -- DBLib + if @@Options & 16 = 16 set ansi_padding OFF; + --set FORCEPLAN OFF; + if @@Options & 4096 = 4096 set concat_null_yields_null OFF; + if @@Options & 8 = 8 set ansi_warnings OFF; + ---------set ansi_nulls OFF; + ---------set QUOTED_IDENTIFIER OFF; + if @@Options & 1024 = 1024 set ANSI_NULL_DFLT_ON OFF; + if @@Options & 2048 = 2048 set ANSI_NULL_DFLT_OFF OFF; + if @@Options & 64 = 64 set arithabort OFF; + if @@Options & 8192 = 8192 set numeric_roundabort OFF; +end; -- if @Set_Options = 0 begin + +if @Set_Options = 1 begin -- Filtered index (ODBC) + if @@Options & 32 = 0 set ansi_nulls ON; -- 32 ANSI_NULLS Controls NULL handling when using equality operators. + if @@Options & 16 = 0 set ansi_padding ON; -- 16 ANSI_PADDING Controls padding of fixed-length variables. + if @@Options & 8 = 0 set ansi_warnings ON; -- 8 ANSI_WARNINGS Controls truncation and NULL in aggregate warnings. + if @@Options & 64 = 0 set arithabort ON; -- 64 ARITHABORT Terminates a query when an overflow or divide-by-zero error occurs during query execution. + if @@Options & 4096 = 0 set concat_null_yields_null ON; -- 4096 CONCAT_NULL_YIELDS_NULL Returns NULL when concatenating a NULL value with a string. + if @@Options & 8192 = 8192 set numeric_roundabort OFF; -- OFF! OFF! 8192 NUMERIC_ROUNDABORT Generates an error when a loss of precision occurs in an expression. + if @@Options & 256 = 0 set QUOTED_IDENTIFIER ON; -- 256 QUOTED_IDENTIFIER Differentiates between single and double quotation marks when evaluating an expression. + --set FORCEPLAN OFF; + if @@Options & 1024 = 1024 set ANSI_NULL_DFLT_ON OFF; -- 1024 ANSI_NULL_DFLT_ON Alters the session's behavior to use ANSI compatibility for nullability. New columns defined without explicit nullability are defined to allow nulls. + if @@Options & 2048 = 2048 set ANSI_NULL_DFLT_OFF OFF; -- 2048 ANSI_NULL_DFLT_OFF Alters the session's behavior not to use ANSI compatibility for nullability. New columns defined without explicit nullability do not allow nulls. +end; -- if @Set_Options = 1 begin +/*END_SQLServerOnly*/ + +set @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', opt='+cast(@@Options as varchar(11)) + +if @c_ForetagKod is NULL + and @c_OrderNr is NULL + and @c_OrdRadNr is NULL + and @c_OrdRadNrStrPos is NULL + and @c_OrdRestNr is NULL + and @c_OrderNrAlfa is NULL + Return (0) -- Just warming up the procedure?! + + +----------------------------------MOD ORP----------------------------- + +/* +if not exists ( select 1 from ar with (ReadUnCommitted) where + ar.ForetagKod = @c_ForetagKod and + ar.ArtNr = @c_ArtNr + ) +begin + EXECUTE JEEVES_Copy_Sr_Op + @c_ForetagKod, --ForetagKod, + @c_ArtNr, --NewItem, + 'frame_53', --sItemNo, + 'x', + 'x', + 'x' +end +*/ +declare @c_IntrnCoNo smallint = @c_ForetagKod; + +declare + @catch_ERROR_NUMBER integer, + @catch_ERROR_MESSAGE Jeeves_StrVarChar4000; +begin try + +declare @xxx_PrimaryKeyValue Jeeves_StrVarChar2048 +set @xxx_PrimaryKeyValue = '<%.orp>; key =' + +char(13)+char(10)+char(9)+'<%OrderNr> = ' + coalesce( convert( varchar(21), @c_OrderNr ), 'NULL' ) + +char(13)+char(10)+char(9)+'<%OrdRadNr> = ' + coalesce( convert( varchar(21), @c_OrdRadNr ), 'NULL' ) + +char(13)+char(10)+char(9)+'<%OrdRadNrStrPos> = ' + coalesce( convert( varchar(21), @c_OrdRadNrStrPos ), 'NULL' ) + +char(13)+char(10)+char(9)+'<%OrdRestNr> = ' + coalesce( convert( varchar(21), @c_OrdRestNr ), 'NULL' ) +if @@TranCount = 0 BEGIN TRAN + +declare + @x integer + ,@dbe integer + ,@dbc integer + ,@dbp integer = @@ProcId + ,@Procedure_Name SysName = object_Name( @@ProcId ) + ,@NewLine Jeeves_StrVarChar2 = nchar(13)+nchar(10) + ,@NewLineTab Jeeves_StrVarChar3 = nchar(13)+nchar(10)+nchar(9) + ,@sy1_Currency Jeeves_StrVarChar4 + ,@sy1_CurrencyDecimals smallint + ,@sy1_AdjustMinutes2GetLocalTime integer + ,@sy2_AdjustMinutes2GetLocalTime integer + ,@AM2GLT integer + ,@sy1_TimeZoneCode smallint + ,@sy2_TimeZoneCode smallint + ,@wr Jeeves_StrVarChar4000; +declare + @PgmId Jeeves_StrVarChar512 = @Procedure_Name + @NewLine; + +-- +-- + + +Declare + @orp_AddArtInAktiv Jeeves_Boolean + , @orp_AddToMO Jeeves_MONo + , @orp_AddToPO Jeeves_PONo + , @orp_Aktiv smallint + , @orp_AltEnhetKod Jeeves_StrVarChar10 + , @orp_AltOpPrior smallint + , @orp_AnmodanMark Jeeves_Boolean + , @orp_AnskaffningKop Jeeves_Boolean + , @orp_AnskaffningMotBehov Jeeves_Boolean + , @orp_AnskaffningTillv Jeeves_Boolean + , @orp_AntalAttLev decimal(17,6) + , @orp_AntalAttLevAltEnh decimal(17,6) + , @orp_AntalPaPlocklista decimal(17,6) + , @orp_AntalUnderPlock decimal(17,6) + , @orp_AntDec smallint + , @orp_AoNr Jeeves_MONo + , @orp_AoNrAlfa Jeeves_StrVarChar128 + , @orp_AoPos int + , @orp_AoStartDat DateTime + , @orp_ArkVersion int + , @orp_ArrivalAtCustomerDate DateTime + , @orp_ars_LagPlats Jeeves_StrVarChar20 + , @orp_ArtBeskr Jeeves_StrVarChar64 + , @orp_ArtCirkaPris money + , @orp_ArtikelVariant Jeeves_StrVarChar32 + , @orp_ArtKalkBer money + , @orp_ArtKalkBerA money + , @orp_ArtKalkBerB money + , @orp_ArtKalkBerC money + , @orp_ArtKalkBerMtrl money + , @orp_ArtKalkBerStart money + , @orp_ArtKalkBerSum money + , @orp_ArtKalkBudg money + , @orp_ArtKalkPer smallint + , @orp_ArtKalkPris money + , @orp_ArtKalkprisE money + , @orp_ArtKalkprisO money + , @orp_ArtKalkprisOFast money + , @orp_ArtKalkprisOMtrl money + , @orp_ArtKod smallint + , @orp_ArtKundRabKod Jeeves_Boolean + , @orp_ArtLevPrior smallint + , @orp_ArtNr Jeeves_StrVarChar32 + , @orp_ArtNrAltArt Jeeves_StrVarChar32 + , @orp_ArtNrEAN Jeeves_StrVarChar32 + , @orp_ArtNrKund Jeeves_StrVarChar32 + , @orp_ArtNrLev Jeeves_StrVarChar32 + , @orp_ArtNrRegMall Jeeves_StrVarChar32 + , @orp_ArtOmvFaktor ZtPurQty2Stock + , @orp_ArtPackSeparat Jeeves_Boolean + , @orp_ArtProdKlass Jeeves_StrVarChar4 + , @orp_ArtProdKonto Jeeves_StrVarChar8 + , @orp_ArtRevId Jeeves_StrVarChar10 + , @orp_ArtRitnNr Jeeves_StrVarChar32 + , @orp_ArtSerieNr Jeeves_StrVarChar32 + , @orp_ArtSerieNrFrom Jeeves_StrVarChar32 + , @orp_ArtSerieNrTom Jeeves_StrVarChar32 + , @orp_AtagandeGrad smallint + , @orp_ATPQueryId int + , @orp_AutDelivOU_MO smallint + , @orp_AutoCreated Jeeves_Boolean + , @orp_AutoFrislappas Jeeves_Boolean + , @orp_AutoOrderLine smallint + , @orp_AutoRegel Jeeves_StrVarChar4 + , @orp_AutStockBookingRule smallint + , @orp_BAntalAvi float + , @orp_BatchBokas Jeeves_Boolean + , @orp_BatchId Jeeves_StrVarChar32 + , @orp_Bestallas Jeeves_Boolean + , @orp_BestAnt decimal(17,6) + , @orp_BestAntExtQty decimal(17,6) + , @orp_BestInPris money + , @orp_BestNr Jeeves_PONo + , @orp_BestRadNr int + , @orp_BestRestNr smallint + , @orp_BFigNr Jeeves_StrVarChar6 + , @orp_BokatAntal decimal(17,6) + , @orp_BookQtyMO decimal(17,6) + , @orp_BookQtyPO decimal(17,6) + , @orp_BristKontrolleradStatus smallint + , @orp_BristStatusLagerUtlev smallint + , @orp_BristStatusPlaneringBegLevDat smallint + , @orp_BristStatusPlaneringBerLevDat smallint + , @orp_BusinessUnit Jeeves_StrVarChar8 + , @orp_ClientSessionGUID_Str ztUniqueIdentifier + , @orp_CnfgrUniqueId Jeeves_SONo + , @orp_CodeFixedDeparture Jeeves_Boolean + , @orp_CreatedByDbObject Jeeves_StrVarChar64 + , @orp_DelBokningTillaten smallint + , @orp_DelivFromBusinessUnit Jeeves_StrVarChar8 + , @orp_DelivToBusinessUnit Jeeves_StrVarChar8 + , @orp_DelivToPOBackorderNo smallint + , @orp_DelivToPOLnNo smallint + , @orp_DelivToPONo int + , @orp_DelLevTillaten smallint + , @orp_DirektLeverans Jeeves_Boolean + , @orp_DirektUttag Jeeves_Boolean + , @orp_DiscountOrderLine smallint + , @orp_DoIndirectUpdate varchar(1) + , @orp_Edit Jeeves_StrVarCharMax + , @orp_Editext Jeeves_StrVarCharMax + , @orp_EnhetsKod Jeeves_StrVarChar4 + , @orp_EstimatorOrder Jeeves_Boolean + , @orp_Exec_Time_Log_String Jeeves_StrVarChar512 + , @orp_ExecutionTime float + , @orp_ExternQty decimal(17,6) + , @orp_ExtOrderNr Jeeves_StrVarChar17 + , @orp_ExtOrdRadNr int + , @orp_ExtOrdTyp smallint + , @orp_FaktDat DateTime + , @orp_FaktDatKorr DateTime + , @orp_FaktDatOrg DateTime + , @orp_FaktNr Jeeves_InvNo + , @orp_FaktNrKorr Jeeves_InvNo + , @orp_FaktNrOrg Jeeves_InvNo + , @orp_FaktorDelLevPkt decimal(18,8) + , @orp_FfhNr int + , @orp_FfhRadNr smallint + , @orp_FlodesGrupp Jeeves_StrVarChar5 + , @orp_FoljesedelsRef Jeeves_StrVarChar17 + , @orp_ForbrukningsMaterial Jeeves_Boolean + , @orp_ForetagKod smallint + , @orp_FPris money + , @orp_FPrisFast money + , @orp_FPrisInternt money + , @orp_FPrisInterntEnlRegel money + , @orp_FsgArtOmvFaktor float + , @orp_FsgPrisPer float + , @orp_FtgNr Jeeves_StrVarChar20 + , @orp_GodsMarke Jeeves_StrVarChar64 + , @orp_GroupPoWoOn Jeeves_StrVarChar10 + , @orp_Handel3Part Jeeves_Boolean + , @orp_ICTAdjmtFactor decimal(18,8) + , @orp_ICTArtKalkPer smallint + , @orp_ICTCodeFixedDeparture Jeeves_Boolean + , @orp_ICTCreditOrderInfo Jeeves_StrVarChar128 + , @orp_ICTDelivFromBackOrderNo Jeeves_SONo + , @orp_ICTDelivFromOrderNo Jeeves_SONo + , @orp_ICTDelivFromOrdLnNo int + , @orp_ICTDelivFromOrdSubLnNo int + , @orp_ICTDelivToBackOrderNo Jeeves_SONo + , @orp_ICTDelivToOrderNo Jeeves_SONo + , @orp_ICTDelivToOrdLnNo int + , @orp_ICTDelivToOrdSubLnNo int + , @orp_ICTDelivToPOBackorderNo Jeeves_SONo + , @orp_ICTDelivToPOLnNo int + , @orp_ICTDelivToPONo Jeeves_PONo + , @orp_ICTDispatchMethod smallint + , @orp_ICTOrdBerednDat DateTime + , @orp_ICTOrdBerLevDat DateTime + , @orp_ICTOrdBerLevTid ztTime + , @orp_ICTOrdLevNr smallint + , @orp_ICTOrdLnStatus smallint + , @orp_ICTOrdResrvStat smallint + , @orp_ICTPackageCode Jeeves_Boolean + , @orp_ICTPriceType smallint + , @orp_ICTRuleNumber smallint + , @orp_ICTTransportTid smallint + , @orp_IdForOrderShuffle Jeeves_StrVarChar20 + , @orp_IndividRef Jeeves_StrVarChar64 + , @orp_IndividRef_AB Jeeves_StrVarChar64 + , @orp_IndividRef_AC Jeeves_StrVarChar64 + , @orp_IndividRef_AD Jeeves_StrVarChar64 + , @orp_IndividRef_AE Jeeves_StrVarChar64 + , @orp_IndividRef_AF Jeeves_StrVarChar64 + , @orp_IndividRef_VV Jeeves_StrVarChar64 + , @orp_InkAvt int + , @orp_Ins_DT_MilliSecond DateTime + , @orp_IntrnCoNoOrigin smallint + , @orp_IntStatTransTyp smallint + , @orp_InValKurs decimal(18,8) + , @orp_InValuta Jeeves_StrVarChar3 + , @orp_InventoryLocWMS Jeeves_Boolean + , @orp_Jeeves_Init_Insert_Enter DateTime + , @orp_Jeeves_Init_Insert_PreIns DateTime + , @orp_K4 Jeeves_StrVarChar8 + , @orp_K5 Jeeves_StrVarChar8 + , @orp_K6 Jeeves_StrVarChar8 + , @orp_K7 Jeeves_StrVarChar8 + , @orp_KalkylPrisFaktura Jeeves_StrVarChar + , @orp_kampnr int + , @orp_KanbanSignal Jeeves_StrVarChar64 + , @orp_KBarAvsandandeEnhet Jeeves_StrVarChar8 + , @orp_KodEjFakturera Jeeves_Boolean + , @orp_KodEJUtskrFA Jeeves_Boolean + , @orp_KodEJUtskrFS Jeeves_Boolean + , @orp_KodEJUtskrOE Jeeves_Boolean + , @orp_KodExtTextToOrder Jeeves_Boolean + , @orp_KodLagerOmBokning Jeeves_Boolean + , @orp_KonfigArtNr Jeeves_ItemNo + , @orp_KopieradFranFaktNr Jeeves_InvNo + , @orp_KopieradFranOrderNr Jeeves_SONo + , @orp_KopieradTillOrderNr Jeeves_SONo + , @orp_KorId int + , @orp_KostBar Jeeves_StrVarChar8 + , @orp_KostStalleKod Jeeves_StrVarChar8 + , @orp_KostStalleKodIntFsg Jeeves_StrVarChar8 + , @orp_KreditOrder Jeeves_Boolean + , @orp_KstAvsandandeEnhet Jeeves_StrVarChar8 + , @orp_KundBestNr Jeeves_StrVarChar32 + , @orp_KundIntOrderNr Jeeves_StrVarChar64 + , @orp_KundIntOrdRadNr int + , @orp_KundKategoriKod smallint + , @orp_KundPrisInklMoms Jeeves_Boolean + , @orp_KundRabatt decimal(18,8) + , @orp_LagerBokas Jeeves_Boolean + , @orp_LagerFlyttning Jeeves_Boolean + , @orp_LagerHanteringTyp smallint + , @orp_LagPlats Jeeves_StrVarChar20 + , @orp_LagStalle Jeeves_StrVarChar8 + , @orp_LagStalleLevOrder Jeeves_StrVarChar8 + , @orp_LagStalleOULager Jeeves_StrVarChar8 + , @orp_LeadTimeMatrixBookingFlag Jeeves_Boolean + , @orp_LedTid_orp_2_bp_ti smallint + , @orp_LevAntalAltEnhSparrat decimal(17,6) + , @orp_LevAntalSparrat decimal(17,6) + , @orp_LevNr Jeeves_StrVarChar20 + , @orp_LevRabattProc1 decimal(18,8) + , @orp_LevsArtBeskr Jeeves_StrVarChar256 + , @orp_LevSattKod smallint + , @orp_LevTid ztTime + , @orp_ManReAvstDT DateTime + , @orp_ManReAvstPerDen DateTime + , @orp_ManReAvstPersSign Jeeves_StrVarChar32 + , @orp_MarkDelLevPkt Jeeves_Boolean + , @orp_MarkOrderUniktKalkP Jeeves_Boolean + , @orp_MarkOrderUniktLager Jeeves_Boolean + , @orp_MarkUpArtKalkPrisO float + , @orp_MomsKod smallint + , @orp_MRP_InventoryTransferFlag Jeeves_Boolean + , @orp_MtrlVerklKost money + , @orp_MtrlVerklKostJustering money + , @orp_MtrlVerklKostMtrl money + , @orp_NettoEjRabKod Jeeves_Boolean + , @orp_NettoPris money + , @orp_No_Trigger_Exec smallint + , @orp_NotInvoiceOrderLine Jeeves_Boolean + , @orp_OffNr Jeeves_StrVarChar10 + , @orp_OffRadNr smallint + , @orp_OingSkapad Jeeves_Boolean + , @orp_OkAttPlockaSattDatum DateTime + , @orp_OkAttPlockaStatus smallint + , @orp_ole1 Jeeves_StrVarChar256 + , @orp_ole2 Jeeves_StrVarChar256 + , @orp_OneOffSalesCode Jeeves_Boolean + , @orp_OrdAntal decimal(17,6) + , @orp_OrdAntalAltEnh decimal(17,6) + , @orp_OrdAntalB float + , @orp_OrdAntalC float + , @orp_OrdArtBeskr Jeeves_StrVarChar256 + , @orp_OrdBegLevDat DateTime + , @orp_OrdBerednDat DateTime + , @orp_OrdBerLevDat DateTime + , @orp_OrdBerLevDatRest DateTime + , @orp_OrdBerLevTid ztTime + , @orp_OrdBokningsStatus smallint + , @orp_OrdDatum DateTime + , @orp_OrderBeloppIntFsg money + , @orp_OrderBeloppIntKop money + , @orp_OrderFranOffert Jeeves_Boolean + , @orp_OrderKod smallint + , @orp_OrderKopplAntal decimal(17,6) + , @orp_OrderKopplKod smallint + , @orp_OrderKostnadIntFsg money + , @orp_OrderKostnadIntKop money + , @orp_OrderLineFromOrderB smallint + , @orp_OrderNr Jeeves_SONo + , @orp_OrderNrAlfa Jeeves_StrVarChar64 + , @orp_OrderNrKoppl Jeeves_SONo + , @orp_OrderNrKorr Jeeves_SONo + , @orp_OrderNrOffert Jeeves_SONo + , @orp_OrderNrOrg Jeeves_SONo + , @orp_OrderNrServ Jeeves_SONo + , @orp_OrderRadFaktKostnad Jeeves_Boolean + , @orp_OrderRowFromEstimator Jeeves_Boolean + , @orp_OrderTBIntFsg money + , @orp_OrderTBIntKop money + , @orp_OrderTGIntFsg decimal(18,8) + , @orp_OrderTGIntKop decimal(18,8) + , @orp_OrderUniktLager decimal(17,6) + , @orp_OrdFoljesedelsNr int + , @orp_OrdFsNr smallint + , @orp_OrdLevAntal decimal(17,6) + , @orp_OrdLevAntalAltEnh decimal(17,6) + , @orp_OrdLevDat DateTime + , @orp_OrdLevDatOrg DateTime + , @orp_OrdLevNr smallint + , @orp_OrdLevPlats1 Jeeves_StrVarChar20 + , @orp_OrdLovLevDat DateTime + , @orp_OrdQtyOnFfh decimal(17,6) + , @orp_OrdRabatt decimal(18,8) + , @orp_OrdRadNr int + , @orp_OrdRadNrKoppl int + , @orp_OrdRadNrMall int + , @orp_OrdRadNrOffert int + , @orp_OrdRadNrOrg int + , @orp_OrdRadNrServ int + , @orp_OrdRadNrStrPos int + , @orp_OrdRadNrStrPosOffert int + , @orp_OrdRadNrStrPosOrg int + , @orp_OrdRadNrStrPosUrspr int + , @orp_OrdRadNrUrspr int + , @orp_OrdRadRab decimal(18,8) + , @orp_OrdRadSplitKod smallint + , @orp_OrdRadSt smallint + , @orp_OrdRadSum money + , @orp_OrdRestAnt decimal(17,6) + , @orp_OrdRestAntAltEnh decimal(17,6) + , @orp_OrdRestAntPack decimal(17,6) + , @orp_OrdRestNot Jeeves_Boolean + , @orp_OrdRestNr smallint + , @orp_OrdRestNrOrg smallint + , @orp_OrdStdAntal decimal(17,6) + , @orp_OrdTyp smallint + , @orp_OrdvRabKod smallint + , @orp_OrpRadText Jeeves_StrVarChar256 + , @orp_OrpRadTextBe Jeeves_Boolean + , @orp_OrpRadTextFa Jeeves_Boolean + , @orp_OrpRadTextFs Jeeves_Boolean + , @orp_OrpRadTextOe Jeeves_Boolean + , @orp_OrpRadTextPl Jeeves_Boolean + , @orp_OrpRadTextTo Jeeves_Boolean + , @orp_OrpStrDetUt smallint + , @orp_OrpStrPrisBer smallint + , @orp_PackageItemOnPickList Jeeves_Boolean + , @orp_PackageItemQty2Det Jeeves_Boolean + , @orp_PackageItemZero Jeeves_Boolean + , @orp_PackagingDate DateTime + , @orp_PaketArtikel Jeeves_Boolean + , @orp_PaketMultiMomsKod Jeeves_Boolean + , @orp_PaketUnderArbete Jeeves_Boolean + , @orp_pdmcount int + , @orp_PersSign Jeeves_StrVarChar32 + , @orp_PkgAndDetailOnPickList Jeeves_Boolean + , @orp_PkgItemDiscnt2Detail Jeeves_Boolean + , @orp_PktOrdRestNr smallint + , @orp_PktVbOrdRadSumNettoUrspr money + , @orp_PktVbOrdRadSumUrspr money + , @orp_PlockJnrOrder int + , @orp_PLUtskrDat DateTime + , @orp_PrelFaktVardeUtlev money + , @orp_PrisAdaco smallint + , @orp_PrisAndrDatum DateTime + , @orp_PrisHantTyp smallint + , @orp_PrisHantTypIntFsg smallint + , @orp_PrisJustOrder Jeeves_Boolean + , @orp_PrisJustOrderKost Jeeves_Boolean + , @orp_PrisLista int + , @orp_PrisTypP smallint + , @orp_PrjManufMilestone smallint + , @orp_ProdGr Jeeves_StrVarChar5 + , @orp_ProjCode Jeeves_StrVarChar10 + , @orp_ProspektId int + , @orp_PVmAssortQty decimal(17,6) + , @orp_PVMAssortQtyTot decimal(17,6) + , @orp_PVmAssortVariant Jeeves_Boolean + , @orp_PvmDispCheckDateAccept smallint + , @orp_PvmErrMessage Jeeves_StrVarCharMax + , @orp_PvmGridNo smallint + , @orp_PvmGridRepOrderBy smallint + , @orp_PvmOrdRadNrOrg int + , @orp_PvmOrdRadNrStrPosOrg int + , @orp_PvmOrdRestNrOrg smallint + , @orp_PvmPickPropQty decimal(17,6) + , @orp_PvmRowIsPvm smallint + , @orp_PVMSeasonId Jeeves_StrVarChar15 + , @orp_PvmWarningMessage Jeeves_StrVarCharMax + , @orp_q_ALFA_KonteraEO2Palagg Jeeves_Boolean + , @orp_q_ALFA_KonteraEOPalagg Jeeves_Boolean + , @orp_q_ALFA_KonteraGO2Palagg Jeeves_Boolean + , @orp_QQ_Ins_Trg_Start DateTime + , @orp_rabatt decimal(18,8) + , @orp_rabatt1 decimal(18,8) + , @orp_rabatt2 decimal(18,8) + , @orp_rabatt3 decimal(18,8) + , @orp_RabattGrundAntal decimal(17,6) + , @orp_rabattval money + , @orp_rabattval1 money + , @orp_rabattval2 money + , @orp_rabattval3 money + , @orp_RegDat DateTime + , @orp_ReplicateRecord smallint + , @orp_ReservdelsOrder Jeeves_Boolean + , @orp_RestBehKod smallint + , @orp_RowCreatedBy Jeeves_StrVarChar32 + , @orp_RowCreatedDT DateTime + , @orp_RowCreatedUTCDT DateTime + , @orp_RowTranStampLast ztUniqueIdentifier + , @orp_RowUpdatedBy Jeeves_StrVarChar32 + , @orp_RowUpdatedCols Jeeves_StrVarChar256 + , @orp_RowUpdatedDT DateTime + , @orp_RowUpdatedUTCDT DateTime + , @orp_RptUnitNo smallint + , @orp_SalesTaxHandling Jeeves_Boolean + , @orp_Saljare Jeeves_StrVarChar32 + , @orp_SamInKopMark Jeeves_Boolean + , @orp_SamLevKod Jeeves_StrVarChar4 + , @orp_SamPlockas Jeeves_Boolean + , @orp_SamPlockListeNr int + , @orp_SamPlockLopNr smallint + , @orp_SerieNrBokas Jeeves_Boolean + , @orp_ServiceLevelCode Jeeves_StrVarChar64 + , @orp_ShipmPlanAlphaid Jeeves_StrVarChar32 + , @orp_ShuffledFromBackOrderNo smallint + , @orp_ShuffledFromOrderNo Jeeves_SONo + , @orp_ShuffledFromOrdLnNo smallint + , @orp_ShuffledFromOrdSubLnNo smallint + , @orp_ShuffledOrderRow Jeeves_Boolean + , @orp_ShuffledToBackOrderNo smallint + , @orp_ShuffledToOrderNo Jeeves_SONo + , @orp_ShuffledToOrdLnNo smallint + , @orp_ShuffledToOrdSubLnNo smallint + , @orp_spid int + , @orp_SprakKod smallint + , @orp_SQLCmd2EnterTrg int + , @orp_SqlStmtStartedDT DateTime + , @orp_SrDummyUniqueId ztUniqueIdentifier + , @orp_StafflingsKod Jeeves_Boolean + , @orp_StatusKodNyttOE smallint + , @orp_StockReplenishment Jeeves_Boolean + , @orp_StrDateTimeBIA Jeeves_StrVarChar64 + , @orp_StrDateTimeOrpo Jeeves_StrVarChar64 + , @orp_StrukturRevision Jeeves_StrVarChar10 + , @orp_SumKalkVardeIngDet money + , @orp_SumKalkVardeIngDetMtrl money + , @orp_SumUppbokKostFranIngTO money + , @orp_SumVardeIngDet money + , @orp_SumVbVardeIngDet money + , @orp_SurChOfRow smallint + , @orp_TaxCode smallint + , @orp_TextVatCode Jeeves_StrVarChar4 + , @orp_TillLagPlats Jeeves_StrVarChar20 + , @orp_TillValArtikelSkapad Jeeves_Boolean + , @orp_TillValArtToArtNr Jeeves_StrVarChar32 + , @orp_TillValArtToOrdRadNr int + , @orp_TimeZoneCode smallint + , @orp_TotOrdLevAntal decimal(17,6) + , @orp_TransitLeverans Jeeves_Boolean + , @orp_Turordning Jeeves_StrVarChar20 + , @orp_UrsprOrderAntal decimal(17,6) + , @orp_UtplocksKod Jeeves_Boolean + , @orp_UtskrDokLovAntal decimal(17,6) + , @orp_UtskrDokLovLevDat DateTime + , @orp_UtskrDokLovPris money + , @orp_UtskrDokLovSkaGoras Jeeves_Boolean + , @orp_UtskrDokLovUtskrDT DateTime + , @orp_UtskrFoljesedel Jeeves_Boolean + , @orp_UtskrPlocklista Jeeves_Boolean + , @orp_ValKlausul smallint + , @orp_ValKod Jeeves_StrVarChar3 + , @orp_ValKurs decimal(18,8) + , @orp_VariantGruppH Jeeves_StrVarChar32 + , @orp_VariantGruppT Jeeves_StrVarChar32 + , @orp_VariantGruppV Jeeves_StrVarChar32 + , @orp_VariantGruppX Jeeves_StrVarChar32 + , @orp_VaruGruppKod Jeeves_StrVarChar8 + , @orp_VaruProv Jeeves_StrVarChar + , @orp_VAT_Type smallint + , @orp_VATCode2 smallint + , @orp_VATCode3 smallint + , @orp_Vb_InPris decimal(22,8) + , @orp_Vb_InPris_Mtrl money + , @orp_vb_NettoPris money + , @orp_vb_PkgToDetCalcDiff money + , @orp_vb_pris money + , @orp_vb_PrisFast money + , @orp_Vb_PrisInklMoms money + , @orp_Vb_RadVardeExklMoms money + , @orp_Vb_RadVardeInklMoms money + , @orp_VbArtKalkBerSum money + , @orp_vbKalkPris decimal(22,8) + , @orp_VbOrdRabattSum money + , @orp_VbOrdRabattSumNetto money + , @orp_VbOrdRadSum money + , @orp_VbOrdRadSumNetto money + , @orp_VbPrisER money + , @orp_VolymRabatt decimal(18,8) + +Select + @orp_AddArtInAktiv = COALESCE ( @c_AddArtInAktiv , @orp_AddArtInAktiv ) + , @orp_AddToMO = COALESCE ( @c_AddToMO , @orp_AddToMO ) + , @orp_AddToPO = COALESCE ( @c_AddToPO , @orp_AddToPO ) + , @orp_Aktiv = COALESCE ( @c_Aktiv , @orp_Aktiv ) + , @orp_AltEnhetKod = COALESCE ( @c_AltEnhetKod , @orp_AltEnhetKod ) + , @orp_AltOpPrior = COALESCE ( @c_AltOpPrior , @orp_AltOpPrior ) + , @orp_AnmodanMark = COALESCE ( @c_AnmodanMark , @orp_AnmodanMark ) + , @orp_AnskaffningKop = COALESCE ( @c_AnskaffningKop , @orp_AnskaffningKop ) + , @orp_AnskaffningMotBehov = COALESCE ( @c_AnskaffningMotBehov , @orp_AnskaffningMotBehov ) + , @orp_AnskaffningTillv = COALESCE ( @c_AnskaffningTillv , @orp_AnskaffningTillv ) + , @orp_AntalAttLev = COALESCE ( @c_AntalAttLev , @orp_AntalAttLev ) + , @orp_AntalAttLevAltEnh = COALESCE ( @c_AntalAttLevAltEnh , @orp_AntalAttLevAltEnh ) + , @orp_AntalPaPlocklista = COALESCE ( @c_AntalPaPlocklista , @orp_AntalPaPlocklista ) + , @orp_AntalUnderPlock = COALESCE ( @c_AntalUnderPlock , @orp_AntalUnderPlock ) + , @orp_AntDec = COALESCE ( @c_AntDec , @orp_AntDec ) + , @orp_AoNr = COALESCE ( @c_AoNr , @orp_AoNr ) + , @orp_AoNrAlfa = COALESCE ( @c_AoNrAlfa , @orp_AoNrAlfa ) + , @orp_AoPos = COALESCE ( @c_AoPos , @orp_AoPos ) + , @orp_AoStartDat = COALESCE ( @c_AoStartDat , @orp_AoStartDat ) + , @orp_ArkVersion = COALESCE ( @c_ArkVersion , @orp_ArkVersion ) + , @orp_ArrivalAtCustomerDate = COALESCE ( @c_ArrivalAtCustomerDate , @orp_ArrivalAtCustomerDate ) + , @orp_ars_LagPlats = COALESCE ( @c_ars_LagPlats , @orp_ars_LagPlats ) + , @orp_ArtBeskr = COALESCE ( @c_ArtBeskr , @orp_ArtBeskr ) + , @orp_ArtCirkaPris = COALESCE ( @c_ArtCirkaPris , @orp_ArtCirkaPris ) + , @orp_ArtikelVariant = COALESCE ( @c_ArtikelVariant , @orp_ArtikelVariant ) + , @orp_ArtKalkBer = COALESCE ( @c_ArtKalkBer , @orp_ArtKalkBer ) + , @orp_ArtKalkBerA = COALESCE ( @c_ArtKalkBerA , @orp_ArtKalkBerA ) + , @orp_ArtKalkBerB = COALESCE ( @c_ArtKalkBerB , @orp_ArtKalkBerB ) + , @orp_ArtKalkBerC = COALESCE ( @c_ArtKalkBerC , @orp_ArtKalkBerC ) + , @orp_ArtKalkBerMtrl = COALESCE ( @c_ArtKalkBerMtrl , @orp_ArtKalkBerMtrl ) + , @orp_ArtKalkBerStart = COALESCE ( @c_ArtKalkBerStart , @orp_ArtKalkBerStart ) + , @orp_ArtKalkBerSum = COALESCE ( @c_ArtKalkBerSum , @orp_ArtKalkBerSum ) + , @orp_ArtKalkBudg = COALESCE ( @c_ArtKalkBudg , @orp_ArtKalkBudg ) + , @orp_ArtKalkPer = COALESCE ( @c_ArtKalkPer , @orp_ArtKalkPer ) + , @orp_ArtKalkPris = COALESCE ( @c_ArtKalkPris , @orp_ArtKalkPris ) + , @orp_ArtKalkprisE = COALESCE ( @c_ArtKalkprisE , @orp_ArtKalkprisE ) + , @orp_ArtKalkprisO = COALESCE ( @c_ArtKalkprisO , @orp_ArtKalkprisO ) + , @orp_ArtKalkprisOFast = COALESCE ( @c_ArtKalkprisOFast , @orp_ArtKalkprisOFast ) + , @orp_ArtKalkprisOMtrl = COALESCE ( @c_ArtKalkprisOMtrl , @orp_ArtKalkprisOMtrl ) + , @orp_ArtKod = COALESCE ( @c_ArtKod , @orp_ArtKod ) + , @orp_ArtKundRabKod = COALESCE ( @c_ArtKundRabKod , @orp_ArtKundRabKod ) + , @orp_ArtLevPrior = COALESCE ( @c_ArtLevPrior , @orp_ArtLevPrior ) + , @orp_ArtNr = COALESCE ( @c_ArtNr , @orp_ArtNr ) + , @orp_ArtNrAltArt = COALESCE ( @c_ArtNrAltArt , @orp_ArtNrAltArt ) + , @orp_ArtNrEAN = COALESCE ( @c_ArtNrEAN , @orp_ArtNrEAN ) + , @orp_ArtNrKund = COALESCE ( @c_ArtNrKund , @orp_ArtNrKund ) + , @orp_ArtNrLev = COALESCE ( @c_ArtNrLev , @orp_ArtNrLev ) + , @orp_ArtNrRegMall = COALESCE ( @c_ArtNrRegMall , @orp_ArtNrRegMall ) + , @orp_ArtOmvFaktor = COALESCE ( @c_ArtOmvFaktor , @orp_ArtOmvFaktor ) + , @orp_ArtPackSeparat = COALESCE ( @c_ArtPackSeparat , @orp_ArtPackSeparat ) + , @orp_ArtProdKlass = COALESCE ( @c_ArtProdKlass , @orp_ArtProdKlass ) + , @orp_ArtProdKonto = COALESCE ( @c_ArtProdKonto , @orp_ArtProdKonto ) + , @orp_ArtRevId = COALESCE ( @c_ArtRevId , @orp_ArtRevId ) + , @orp_ArtRitnNr = COALESCE ( @c_ArtRitnNr , @orp_ArtRitnNr ) + , @orp_ArtSerieNr = COALESCE ( @c_ArtSerieNr , @orp_ArtSerieNr ) + , @orp_ArtSerieNrFrom = COALESCE ( @c_ArtSerieNrFrom , @orp_ArtSerieNrFrom ) + , @orp_ArtSerieNrTom = COALESCE ( @c_ArtSerieNrTom , @orp_ArtSerieNrTom ) + , @orp_AtagandeGrad = COALESCE ( @c_AtagandeGrad , @orp_AtagandeGrad ) + , @orp_ATPQueryId = COALESCE ( @c_ATPQueryId , @orp_ATPQueryId ) + , @orp_AutDelivOU_MO = COALESCE ( @c_AutDelivOU_MO , @orp_AutDelivOU_MO ) + , @orp_AutoCreated = COALESCE ( @c_AutoCreated , @orp_AutoCreated ) + , @orp_AutoFrislappas = COALESCE ( @c_AutoFrislappas , @orp_AutoFrislappas ) + , @orp_AutoOrderLine = COALESCE ( @c_AutoOrderLine , @orp_AutoOrderLine ) + , @orp_AutoRegel = COALESCE ( @c_AutoRegel , @orp_AutoRegel ) + , @orp_AutStockBookingRule = COALESCE ( @c_AutStockBookingRule , @orp_AutStockBookingRule ) + , @orp_BAntalAvi = COALESCE ( @c_BAntalAvi , @orp_BAntalAvi ) + , @orp_BatchBokas = COALESCE ( @c_BatchBokas , @orp_BatchBokas ) + , @orp_BatchId = COALESCE ( @c_BatchId , @orp_BatchId ) + , @orp_Bestallas = COALESCE ( @c_Bestallas , @orp_Bestallas ) + , @orp_BestAnt = COALESCE ( @c_BestAnt , @orp_BestAnt ) + , @orp_BestAntExtQty = COALESCE ( @c_BestAntExtQty , @orp_BestAntExtQty ) + , @orp_BestInPris = COALESCE ( @c_BestInPris , @orp_BestInPris ) + , @orp_BestNr = COALESCE ( @c_BestNr , @orp_BestNr ) + , @orp_BestRadNr = COALESCE ( @c_BestRadNr , @orp_BestRadNr ) + , @orp_BestRestNr = COALESCE ( @c_BestRestNr , @orp_BestRestNr , 0 ) + , @orp_BFigNr = COALESCE ( @c_BFigNr , @orp_BFigNr ) + , @orp_BokatAntal = COALESCE ( @c_BokatAntal , @orp_BokatAntal ) + , @orp_BookQtyMO = COALESCE ( @c_BookQtyMO , @orp_BookQtyMO ) + , @orp_BookQtyPO = COALESCE ( @c_BookQtyPO , @orp_BookQtyPO ) + , @orp_BristKontrolleradStatus = COALESCE ( @c_BristKontrolleradStatus , @orp_BristKontrolleradStatus ) + , @orp_BristStatusLagerUtlev = COALESCE ( @c_BristStatusLagerUtlev , @orp_BristStatusLagerUtlev ) + , @orp_BristStatusPlaneringBegLevDat = COALESCE ( @c_BristStatusPlaneringBegLevDat , @orp_BristStatusPlaneringBegLevDat ) + , @orp_BristStatusPlaneringBerLevDat = COALESCE ( @c_BristStatusPlaneringBerLevDat , @orp_BristStatusPlaneringBerLevDat ) + , @orp_BusinessUnit = COALESCE ( @c_BusinessUnit , @orp_BusinessUnit ) + , @orp_ClientSessionGUID_Str = COALESCE ( @c_ClientSessionGUID_Str , @orp_ClientSessionGUID_Str ) + , @orp_CnfgrUniqueId = COALESCE ( @c_CnfgrUniqueId , @orp_CnfgrUniqueId ) + , @orp_CodeFixedDeparture = COALESCE ( @c_CodeFixedDeparture , @orp_CodeFixedDeparture ) + , @orp_CreatedByDbObject = COALESCE ( @c_CreatedByDbObject , @orp_CreatedByDbObject ) + , @orp_DelBokningTillaten = COALESCE ( @c_DelBokningTillaten , @orp_DelBokningTillaten ) + , @orp_DelivFromBusinessUnit = COALESCE ( @c_DelivFromBusinessUnit , @orp_DelivFromBusinessUnit ) + , @orp_DelivToBusinessUnit = COALESCE ( @c_DelivToBusinessUnit , @orp_DelivToBusinessUnit ) + , @orp_DelivToPOBackorderNo = COALESCE ( @c_DelivToPOBackorderNo , @orp_DelivToPOBackorderNo ) + , @orp_DelivToPOLnNo = COALESCE ( @c_DelivToPOLnNo , @orp_DelivToPOLnNo ) + , @orp_DelivToPONo = COALESCE ( @c_DelivToPONo , @orp_DelivToPONo ) + , @orp_DelLevTillaten = COALESCE ( @c_DelLevTillaten , @orp_DelLevTillaten ) + , @orp_DirektLeverans = COALESCE ( @c_DirektLeverans , @orp_DirektLeverans ) + , @orp_DirektUttag = COALESCE ( @c_DirektUttag , @orp_DirektUttag ) + , @orp_DiscountOrderLine = COALESCE ( @c_DiscountOrderLine , @orp_DiscountOrderLine ) + , @orp_DoIndirectUpdate = COALESCE ( @c_DoIndirectUpdate , @orp_DoIndirectUpdate ) + , @orp_Edit = COALESCE ( @c_Edit , @orp_Edit ) + , @orp_Editext = COALESCE ( @c_Editext , @orp_Editext ) + , @orp_EnhetsKod = COALESCE ( @c_EnhetsKod , @orp_EnhetsKod ) + , @orp_EstimatorOrder = COALESCE ( @c_EstimatorOrder , @orp_EstimatorOrder ) + , @orp_Exec_Time_Log_String = COALESCE ( @c_Exec_Time_Log_String , @orp_Exec_Time_Log_String ) + , @orp_ExecutionTime = COALESCE ( @c_ExecutionTime , @orp_ExecutionTime ) + , @orp_ExternQty = COALESCE ( @c_ExternQty , @orp_ExternQty ) + , @orp_ExtOrderNr = COALESCE ( @c_ExtOrderNr , @orp_ExtOrderNr ) + , @orp_ExtOrdRadNr = COALESCE ( @c_ExtOrdRadNr , @orp_ExtOrdRadNr ) + , @orp_ExtOrdTyp = COALESCE ( @c_ExtOrdTyp , @orp_ExtOrdTyp ) + , @orp_FaktDat = COALESCE ( @c_FaktDat , @orp_FaktDat ) + , @orp_FaktDatKorr = COALESCE ( @c_FaktDatKorr , @orp_FaktDatKorr ) + , @orp_FaktDatOrg = COALESCE ( @c_FaktDatOrg , @orp_FaktDatOrg ) + , @orp_FaktNr = COALESCE ( @c_FaktNr , @orp_FaktNr ) + , @orp_FaktNrKorr = COALESCE ( @c_FaktNrKorr , @orp_FaktNrKorr ) + , @orp_FaktNrOrg = COALESCE ( @c_FaktNrOrg , @orp_FaktNrOrg ) + , @orp_FaktorDelLevPkt = COALESCE ( @c_FaktorDelLevPkt , @orp_FaktorDelLevPkt ) + , @orp_FfhNr = COALESCE ( @c_FfhNr , @orp_FfhNr ) + , @orp_FfhRadNr = COALESCE ( @c_FfhRadNr , @orp_FfhRadNr ) + , @orp_FlodesGrupp = COALESCE ( @c_FlodesGrupp , @orp_FlodesGrupp ) + , @orp_FoljesedelsRef = COALESCE ( @c_FoljesedelsRef , @orp_FoljesedelsRef ) + , @orp_ForbrukningsMaterial = COALESCE ( @c_ForbrukningsMaterial , @orp_ForbrukningsMaterial ) + , @orp_ForetagKod = COALESCE ( @c_ForetagKod , @orp_ForetagKod ) + , @orp_FPris = COALESCE ( @c_FPris , @orp_FPris ) + , @orp_FPrisFast = COALESCE ( @c_FPrisFast , @orp_FPrisFast ) + , @orp_FPrisInternt = COALESCE ( @c_FPrisInternt , @orp_FPrisInternt ) + , @orp_FPrisInterntEnlRegel = COALESCE ( @c_FPrisInterntEnlRegel , @orp_FPrisInterntEnlRegel ) + , @orp_FsgArtOmvFaktor = COALESCE ( @c_FsgArtOmvFaktor , @orp_FsgArtOmvFaktor ) + , @orp_FsgPrisPer = COALESCE ( @c_FsgPrisPer , @orp_FsgPrisPer ) + , @orp_FtgNr = COALESCE ( @c_FtgNr , @orp_FtgNr ) + , @orp_GodsMarke = COALESCE ( @c_GodsMarke , @orp_GodsMarke ) + , @orp_GroupPoWoOn = COALESCE ( @c_GroupPoWoOn , @orp_GroupPoWoOn ) + , @orp_Handel3Part = COALESCE ( @c_Handel3Part , @orp_Handel3Part ) + , @orp_ICTAdjmtFactor = COALESCE ( @c_ICTAdjmtFactor , @orp_ICTAdjmtFactor ) + , @orp_ICTArtKalkPer = COALESCE ( @c_ICTArtKalkPer , @orp_ICTArtKalkPer ) + , @orp_ICTCodeFixedDeparture = COALESCE ( @c_ICTCodeFixedDeparture , @orp_ICTCodeFixedDeparture ) + , @orp_ICTCreditOrderInfo = COALESCE ( @c_ICTCreditOrderInfo , @orp_ICTCreditOrderInfo ) + , @orp_ICTDelivFromBackOrderNo = COALESCE ( @c_ICTDelivFromBackOrderNo , @orp_ICTDelivFromBackOrderNo ) + , @orp_ICTDelivFromOrderNo = COALESCE ( @c_ICTDelivFromOrderNo , @orp_ICTDelivFromOrderNo ) + , @orp_ICTDelivFromOrdLnNo = COALESCE ( @c_ICTDelivFromOrdLnNo , @orp_ICTDelivFromOrdLnNo ) + , @orp_ICTDelivFromOrdSubLnNo = COALESCE ( @c_ICTDelivFromOrdSubLnNo , @orp_ICTDelivFromOrdSubLnNo ) + , @orp_ICTDelivToBackOrderNo = COALESCE ( @c_ICTDelivToBackOrderNo , @orp_ICTDelivToBackOrderNo ) + , @orp_ICTDelivToOrderNo = COALESCE ( @c_ICTDelivToOrderNo , @orp_ICTDelivToOrderNo ) + , @orp_ICTDelivToOrdLnNo = COALESCE ( @c_ICTDelivToOrdLnNo , @orp_ICTDelivToOrdLnNo ) + , @orp_ICTDelivToOrdSubLnNo = COALESCE ( @c_ICTDelivToOrdSubLnNo , @orp_ICTDelivToOrdSubLnNo ) + , @orp_ICTDelivToPOBackorderNo = COALESCE ( @c_ICTDelivToPOBackorderNo , @orp_ICTDelivToPOBackorderNo ) + , @orp_ICTDelivToPOLnNo = COALESCE ( @c_ICTDelivToPOLnNo , @orp_ICTDelivToPOLnNo ) + , @orp_ICTDelivToPONo = COALESCE ( @c_ICTDelivToPONo , @orp_ICTDelivToPONo ) + , @orp_ICTDispatchMethod = COALESCE ( @c_ICTDispatchMethod , @orp_ICTDispatchMethod ) + , @orp_ICTOrdBerednDat = COALESCE ( @c_ICTOrdBerednDat , @orp_ICTOrdBerednDat ) + , @orp_ICTOrdBerLevDat = COALESCE ( @c_ICTOrdBerLevDat , @orp_ICTOrdBerLevDat ) + , @orp_ICTOrdBerLevTid = COALESCE ( @c_ICTOrdBerLevTid , @orp_ICTOrdBerLevTid ) + , @orp_ICTOrdLevNr = COALESCE ( @c_ICTOrdLevNr , @orp_ICTOrdLevNr ) + , @orp_ICTOrdLnStatus = COALESCE ( @c_ICTOrdLnStatus , @orp_ICTOrdLnStatus ) + , @orp_ICTOrdResrvStat = COALESCE ( @c_ICTOrdResrvStat , @orp_ICTOrdResrvStat ) + , @orp_ICTPackageCode = COALESCE ( @c_ICTPackageCode , @orp_ICTPackageCode ) + , @orp_ICTPriceType = COALESCE ( @c_ICTPriceType , @orp_ICTPriceType ) + , @orp_ICTRuleNumber = COALESCE ( @c_ICTRuleNumber , @orp_ICTRuleNumber ) + , @orp_ICTTransportTid = COALESCE ( @c_ICTTransportTid , @orp_ICTTransportTid ) + , @orp_IdForOrderShuffle = COALESCE ( @c_IdForOrderShuffle , @orp_IdForOrderShuffle ) + , @orp_IndividRef = COALESCE ( @c_IndividRef , @orp_IndividRef ) + , @orp_IndividRef_AB = COALESCE ( @c_IndividRef_AB , @orp_IndividRef_AB ) + , @orp_IndividRef_AC = COALESCE ( @c_IndividRef_AC , @orp_IndividRef_AC ) + , @orp_IndividRef_AD = COALESCE ( @c_IndividRef_AD , @orp_IndividRef_AD ) + , @orp_IndividRef_AE = COALESCE ( @c_IndividRef_AE , @orp_IndividRef_AE ) + , @orp_IndividRef_AF = COALESCE ( @c_IndividRef_AF , @orp_IndividRef_AF ) + , @orp_IndividRef_VV = COALESCE ( @c_IndividRef_VV , @orp_IndividRef_VV ) + , @orp_InkAvt = COALESCE ( @c_InkAvt , @orp_InkAvt ) + , @orp_Ins_DT_MilliSecond = COALESCE ( @c_Ins_DT_MilliSecond , @orp_Ins_DT_MilliSecond ) + , @orp_IntrnCoNoOrigin = COALESCE ( @c_IntrnCoNoOrigin , @orp_IntrnCoNoOrigin ) + , @orp_IntStatTransTyp = COALESCE ( @c_IntStatTransTyp , @orp_IntStatTransTyp ) + , @orp_InValKurs = COALESCE ( @c_InValKurs , @orp_InValKurs ) + , @orp_InValuta = COALESCE ( @c_InValuta , @orp_InValuta ) + , @orp_InventoryLocWMS = COALESCE ( @c_InventoryLocWMS , @orp_InventoryLocWMS ) + , @orp_Jeeves_Init_Insert_Enter = COALESCE ( @c_Jeeves_Init_Insert_Enter , @orp_Jeeves_Init_Insert_Enter ) + , @orp_Jeeves_Init_Insert_PreIns = COALESCE ( @c_Jeeves_Init_Insert_PreIns , @orp_Jeeves_Init_Insert_PreIns ) + , @orp_K4 = COALESCE ( @c_K4 , @orp_K4 ) + , @orp_K5 = COALESCE ( @c_K5 , @orp_K5 ) + , @orp_K6 = COALESCE ( @c_K6 , @orp_K6 ) + , @orp_K7 = COALESCE ( @c_K7 , @orp_K7 ) + , @orp_KalkylPrisFaktura = COALESCE ( @c_KalkylPrisFaktura , @orp_KalkylPrisFaktura ) + , @orp_kampnr = COALESCE ( @c_kampnr , @orp_kampnr ) + , @orp_KanbanSignal = COALESCE ( @c_KanbanSignal , @orp_KanbanSignal ) + , @orp_KBarAvsandandeEnhet = COALESCE ( @c_KBarAvsandandeEnhet , @orp_KBarAvsandandeEnhet ) + , @orp_KodEjFakturera = COALESCE ( @c_KodEjFakturera , @orp_KodEjFakturera ) + , @orp_KodEJUtskrFA = COALESCE ( @c_KodEJUtskrFA , @orp_KodEJUtskrFA ) + , @orp_KodEJUtskrFS = COALESCE ( @c_KodEJUtskrFS , @orp_KodEJUtskrFS ) + , @orp_KodEJUtskrOE = COALESCE ( @c_KodEJUtskrOE , @orp_KodEJUtskrOE ) + , @orp_KodExtTextToOrder = COALESCE ( @c_KodExtTextToOrder , @orp_KodExtTextToOrder ) + , @orp_KodLagerOmBokning = COALESCE ( @c_KodLagerOmBokning , @orp_KodLagerOmBokning ) + , @orp_KonfigArtNr = COALESCE ( @c_KonfigArtNr , @orp_KonfigArtNr ) + , @orp_KopieradFranFaktNr = COALESCE ( @c_KopieradFranFaktNr , @orp_KopieradFranFaktNr ) + , @orp_KopieradFranOrderNr = COALESCE ( @c_KopieradFranOrderNr , @orp_KopieradFranOrderNr ) + , @orp_KopieradTillOrderNr = COALESCE ( @c_KopieradTillOrderNr , @orp_KopieradTillOrderNr ) + , @orp_KorId = COALESCE ( @c_KorId , @orp_KorId ) + , @orp_KostBar = COALESCE ( @c_KostBar , @orp_KostBar ) + , @orp_KostStalleKod = COALESCE ( @c_KostStalleKod , @orp_KostStalleKod ) + , @orp_KostStalleKodIntFsg = COALESCE ( @c_KostStalleKodIntFsg , @orp_KostStalleKodIntFsg ) + , @orp_KreditOrder = COALESCE ( @c_KreditOrder , @orp_KreditOrder ) + , @orp_KstAvsandandeEnhet = COALESCE ( @c_KstAvsandandeEnhet , @orp_KstAvsandandeEnhet ) + , @orp_KundBestNr = COALESCE ( @c_KundBestNr , @orp_KundBestNr ) + , @orp_KundIntOrderNr = COALESCE ( @c_KundIntOrderNr , @orp_KundIntOrderNr ) + , @orp_KundIntOrdRadNr = COALESCE ( @c_KundIntOrdRadNr , @orp_KundIntOrdRadNr ) + , @orp_KundKategoriKod = COALESCE ( @c_KundKategoriKod , @orp_KundKategoriKod ) + , @orp_KundPrisInklMoms = COALESCE ( @c_KundPrisInklMoms , @orp_KundPrisInklMoms ) + , @orp_KundRabatt = COALESCE ( @c_KundRabatt , @orp_KundRabatt ) + , @orp_LagerBokas = COALESCE ( @c_LagerBokas , @orp_LagerBokas ) + , @orp_LagerFlyttning = COALESCE ( @c_LagerFlyttning , @orp_LagerFlyttning ) + , @orp_LagerHanteringTyp = COALESCE ( @c_LagerHanteringTyp , @orp_LagerHanteringTyp ) + , @orp_LagPlats = COALESCE ( @c_LagPlats , @orp_LagPlats ) + , @orp_LagStalle = COALESCE ( @c_LagStalle , @orp_LagStalle ) + , @orp_LagStalleLevOrder = COALESCE ( @c_LagStalleLevOrder , @orp_LagStalleLevOrder ) + , @orp_LagStalleOULager = COALESCE ( @c_LagStalleOULager , @orp_LagStalleOULager ) + , @orp_LeadTimeMatrixBookingFlag = COALESCE ( @c_LeadTimeMatrixBookingFlag , @orp_LeadTimeMatrixBookingFlag ) + , @orp_LedTid_orp_2_bp_ti = COALESCE ( @c_LedTid_orp_2_bp_ti , @orp_LedTid_orp_2_bp_ti ) + , @orp_LevAntalAltEnhSparrat = COALESCE ( @c_LevAntalAltEnhSparrat , @orp_LevAntalAltEnhSparrat ) + , @orp_LevAntalSparrat = COALESCE ( @c_LevAntalSparrat , @orp_LevAntalSparrat ) + , @orp_LevNr = COALESCE ( @c_LevNr , @orp_LevNr ) + , @orp_LevRabattProc1 = COALESCE ( @c_LevRabattProc1 , @orp_LevRabattProc1 ) + , @orp_LevsArtBeskr = COALESCE ( @c_LevsArtBeskr , @orp_LevsArtBeskr ) + , @orp_LevSattKod = COALESCE ( @c_LevSattKod , @orp_LevSattKod ) + , @orp_LevTid = COALESCE ( @c_LevTid , @orp_LevTid ) + , @orp_ManReAvstDT = COALESCE ( @c_ManReAvstDT , @orp_ManReAvstDT ) + , @orp_ManReAvstPerDen = COALESCE ( @c_ManReAvstPerDen , @orp_ManReAvstPerDen ) + , @orp_ManReAvstPersSign = COALESCE ( @c_ManReAvstPersSign , @orp_ManReAvstPersSign ) + , @orp_MarkDelLevPkt = COALESCE ( @c_MarkDelLevPkt , @orp_MarkDelLevPkt ) + , @orp_MarkOrderUniktKalkP = COALESCE ( @c_MarkOrderUniktKalkP , @orp_MarkOrderUniktKalkP ) + , @orp_MarkOrderUniktLager = COALESCE ( @c_MarkOrderUniktLager , @orp_MarkOrderUniktLager ) + , @orp_MarkUpArtKalkPrisO = COALESCE ( @c_MarkUpArtKalkPrisO , @orp_MarkUpArtKalkPrisO ) + , @orp_MomsKod = COALESCE ( @c_MomsKod , @orp_MomsKod ) + , @orp_MRP_InventoryTransferFlag = COALESCE ( @c_MRP_InventoryTransferFlag , @orp_MRP_InventoryTransferFlag ) + , @orp_MtrlVerklKost = COALESCE ( @c_MtrlVerklKost , @orp_MtrlVerklKost ) + , @orp_MtrlVerklKostJustering = COALESCE ( @c_MtrlVerklKostJustering , @orp_MtrlVerklKostJustering ) + , @orp_MtrlVerklKostMtrl = COALESCE ( @c_MtrlVerklKostMtrl , @orp_MtrlVerklKostMtrl ) + , @orp_NettoEjRabKod = COALESCE ( @c_NettoEjRabKod , @orp_NettoEjRabKod ) + , @orp_NettoPris = COALESCE ( @c_NettoPris , @orp_NettoPris ) + , @orp_No_Trigger_Exec = COALESCE ( @c_No_Trigger_Exec , @orp_No_Trigger_Exec ) + , @orp_NotInvoiceOrderLine = COALESCE ( @c_NotInvoiceOrderLine , @orp_NotInvoiceOrderLine ) + , @orp_OffNr = COALESCE ( @c_OffNr , @orp_OffNr ) + , @orp_OffRadNr = COALESCE ( @c_OffRadNr , @orp_OffRadNr ) + , @orp_OingSkapad = COALESCE ( @c_OingSkapad , @orp_OingSkapad ) + , @orp_OkAttPlockaSattDatum = COALESCE ( @c_OkAttPlockaSattDatum , @orp_OkAttPlockaSattDatum ) + , @orp_OkAttPlockaStatus = COALESCE ( @c_OkAttPlockaStatus , @orp_OkAttPlockaStatus ) + , @orp_ole1 = COALESCE ( @c_ole1 , @orp_ole1 ) + , @orp_ole2 = COALESCE ( @c_ole2 , @orp_ole2 ) + , @orp_OneOffSalesCode = COALESCE ( @c_OneOffSalesCode , @orp_OneOffSalesCode ) + , @orp_OrdAntal = COALESCE ( @c_OrdAntal , @orp_OrdAntal ) + , @orp_OrdAntalAltEnh = COALESCE ( @c_OrdAntalAltEnh , @orp_OrdAntalAltEnh ) + , @orp_OrdAntalB = COALESCE ( @c_OrdAntalB , @orp_OrdAntalB ) + , @orp_OrdAntalC = COALESCE ( @c_OrdAntalC , @orp_OrdAntalC ) + , @orp_OrdArtBeskr = COALESCE ( @c_OrdArtBeskr , @orp_OrdArtBeskr ) + , @orp_OrdBegLevDat = COALESCE ( @c_OrdBegLevDat , @orp_OrdBegLevDat ) + , @orp_OrdBerednDat = COALESCE ( @c_OrdBerednDat , @orp_OrdBerednDat ) + , @orp_OrdBerLevDat = COALESCE ( @c_OrdBerLevDat , @orp_OrdBerLevDat ) + , @orp_OrdBerLevDatRest = COALESCE ( @c_OrdBerLevDatRest , @orp_OrdBerLevDatRest ) + , @orp_OrdBerLevTid = COALESCE ( @c_OrdBerLevTid , @orp_OrdBerLevTid ) + , @orp_OrdBokningsStatus = COALESCE ( @c_OrdBokningsStatus , @orp_OrdBokningsStatus ) + , @orp_OrdDatum = COALESCE ( @c_OrdDatum , @orp_OrdDatum ) + , @orp_OrderBeloppIntFsg = COALESCE ( @c_OrderBeloppIntFsg , @orp_OrderBeloppIntFsg ) + , @orp_OrderBeloppIntKop = COALESCE ( @c_OrderBeloppIntKop , @orp_OrderBeloppIntKop ) + , @orp_OrderFranOffert = COALESCE ( @c_OrderFranOffert , @orp_OrderFranOffert ) + , @orp_OrderKod = COALESCE ( @c_OrderKod , @orp_OrderKod ) + , @orp_OrderKopplAntal = COALESCE ( @c_OrderKopplAntal , @orp_OrderKopplAntal ) + , @orp_OrderKopplKod = COALESCE ( @c_OrderKopplKod , @orp_OrderKopplKod ) + , @orp_OrderKostnadIntFsg = COALESCE ( @c_OrderKostnadIntFsg , @orp_OrderKostnadIntFsg ) + , @orp_OrderKostnadIntKop = COALESCE ( @c_OrderKostnadIntKop , @orp_OrderKostnadIntKop ) + , @orp_OrderLineFromOrderB = COALESCE ( @c_OrderLineFromOrderB , @orp_OrderLineFromOrderB ) + , @orp_OrderNr = COALESCE ( @c_OrderNr , @orp_OrderNr ) + , @orp_OrderNrAlfa = COALESCE ( @c_OrderNrAlfa , @orp_OrderNrAlfa ) + , @orp_OrderNrKoppl = COALESCE ( @c_OrderNrKoppl , @orp_OrderNrKoppl ) + , @orp_OrderNrKorr = COALESCE ( @c_OrderNrKorr , @orp_OrderNrKorr ) + , @orp_OrderNrOffert = COALESCE ( @c_OrderNrOffert , @orp_OrderNrOffert ) + , @orp_OrderNrOrg = COALESCE ( @c_OrderNrOrg , @orp_OrderNrOrg ) + , @orp_OrderNrServ = COALESCE ( @c_OrderNrServ , @orp_OrderNrServ ) + , @orp_OrderRadFaktKostnad = COALESCE ( @c_OrderRadFaktKostnad , @orp_OrderRadFaktKostnad ) + , @orp_OrderRowFromEstimator = COALESCE ( @c_OrderRowFromEstimator , @orp_OrderRowFromEstimator ) + , @orp_OrderTBIntFsg = COALESCE ( @c_OrderTBIntFsg , @orp_OrderTBIntFsg ) + , @orp_OrderTBIntKop = COALESCE ( @c_OrderTBIntKop , @orp_OrderTBIntKop ) + , @orp_OrderTGIntFsg = COALESCE ( @c_OrderTGIntFsg , @orp_OrderTGIntFsg ) + , @orp_OrderTGIntKop = COALESCE ( @c_OrderTGIntKop , @orp_OrderTGIntKop ) + , @orp_OrderUniktLager = COALESCE ( @c_OrderUniktLager , @orp_OrderUniktLager ) + , @orp_OrdFoljesedelsNr = COALESCE ( @c_OrdFoljesedelsNr , @orp_OrdFoljesedelsNr ) + , @orp_OrdFsNr = COALESCE ( @c_OrdFsNr , @orp_OrdFsNr ) + , @orp_OrdLevAntal = COALESCE ( @c_OrdLevAntal , @orp_OrdLevAntal ) + , @orp_OrdLevAntalAltEnh = COALESCE ( @c_OrdLevAntalAltEnh , @orp_OrdLevAntalAltEnh ) + , @orp_OrdLevDat = COALESCE ( @c_OrdLevDat , @orp_OrdLevDat ) + , @orp_OrdLevDatOrg = COALESCE ( @c_OrdLevDatOrg , @orp_OrdLevDatOrg ) + , @orp_OrdLevNr = COALESCE ( @c_OrdLevNr , @orp_OrdLevNr ) + , @orp_OrdLevPlats1 = COALESCE ( @c_OrdLevPlats1 , @orp_OrdLevPlats1 ) + , @orp_OrdLovLevDat = COALESCE ( @c_OrdLovLevDat , @orp_OrdLovLevDat ) + , @orp_OrdQtyOnFfh = COALESCE ( @c_OrdQtyOnFfh , @orp_OrdQtyOnFfh ) + , @orp_OrdRabatt = COALESCE ( @c_OrdRabatt , @orp_OrdRabatt ) + , @orp_OrdRadNr = COALESCE ( @c_OrdRadNr , @orp_OrdRadNr ) + , @orp_OrdRadNrKoppl = COALESCE ( @c_OrdRadNrKoppl , @orp_OrdRadNrKoppl ) + , @orp_OrdRadNrMall = COALESCE ( @c_OrdRadNrMall , @orp_OrdRadNrMall ) + , @orp_OrdRadNrOffert = COALESCE ( @c_OrdRadNrOffert , @orp_OrdRadNrOffert ) + , @orp_OrdRadNrOrg = COALESCE ( @c_OrdRadNrOrg , @orp_OrdRadNrOrg ) + , @orp_OrdRadNrServ = COALESCE ( @c_OrdRadNrServ , @orp_OrdRadNrServ ) + , @orp_OrdRadNrStrPos = COALESCE ( @c_OrdRadNrStrPos , @orp_OrdRadNrStrPos ) + , @orp_OrdRadNrStrPosOffert = COALESCE ( @c_OrdRadNrStrPosOffert , @orp_OrdRadNrStrPosOffert ) + , @orp_OrdRadNrStrPosOrg = COALESCE ( @c_OrdRadNrStrPosOrg , @orp_OrdRadNrStrPosOrg ) + , @orp_OrdRadNrStrPosUrspr = COALESCE ( @c_OrdRadNrStrPosUrspr , @orp_OrdRadNrStrPosUrspr ) + , @orp_OrdRadNrUrspr = COALESCE ( @c_OrdRadNrUrspr , @orp_OrdRadNrUrspr ) + , @orp_OrdRadRab = COALESCE ( @c_OrdRadRab , @orp_OrdRadRab ) + , @orp_OrdRadSplitKod = COALESCE ( @c_OrdRadSplitKod , @orp_OrdRadSplitKod ) + , @orp_OrdRadSt = COALESCE ( @c_OrdRadSt , @orp_OrdRadSt ) + , @orp_OrdRadSum = COALESCE ( @c_OrdRadSum , @orp_OrdRadSum ) + , @orp_OrdRestAnt = COALESCE ( @c_OrdRestAnt , @orp_OrdRestAnt ) + , @orp_OrdRestAntAltEnh = COALESCE ( @c_OrdRestAntAltEnh , @orp_OrdRestAntAltEnh ) + , @orp_OrdRestAntPack = COALESCE ( @c_OrdRestAntPack , @orp_OrdRestAntPack ) + , @orp_OrdRestNot = COALESCE ( @c_OrdRestNot , @orp_OrdRestNot ) + , @orp_OrdRestNr = COALESCE ( @c_OrdRestNr , @orp_OrdRestNr , 0 ) + , @orp_OrdRestNrOrg = COALESCE ( @c_OrdRestNrOrg , @orp_OrdRestNrOrg ) + , @orp_OrdStdAntal = COALESCE ( @c_OrdStdAntal , @orp_OrdStdAntal ) + , @orp_OrdTyp = COALESCE ( @c_OrdTyp , @orp_OrdTyp ) + , @orp_OrdvRabKod = COALESCE ( @c_OrdvRabKod , @orp_OrdvRabKod ) + , @orp_OrpRadText = COALESCE ( @c_OrpRadText , @orp_OrpRadText ) + , @orp_OrpRadTextBe = COALESCE ( @c_OrpRadTextBe , @orp_OrpRadTextBe ) + , @orp_OrpRadTextFa = COALESCE ( @c_OrpRadTextFa , @orp_OrpRadTextFa ) + , @orp_OrpRadTextFs = COALESCE ( @c_OrpRadTextFs , @orp_OrpRadTextFs ) + , @orp_OrpRadTextOe = COALESCE ( @c_OrpRadTextOe , @orp_OrpRadTextOe ) + , @orp_OrpRadTextPl = COALESCE ( @c_OrpRadTextPl , @orp_OrpRadTextPl ) + , @orp_OrpRadTextTo = COALESCE ( @c_OrpRadTextTo , @orp_OrpRadTextTo ) + , @orp_OrpStrDetUt = COALESCE ( @c_OrpStrDetUt , @orp_OrpStrDetUt ) + , @orp_OrpStrPrisBer = COALESCE ( @c_OrpStrPrisBer , @orp_OrpStrPrisBer ) + , @orp_PackageItemOnPickList = COALESCE ( @c_PackageItemOnPickList , @orp_PackageItemOnPickList ) + , @orp_PackageItemQty2Det = COALESCE ( @c_PackageItemQty2Det , @orp_PackageItemQty2Det ) + , @orp_PackageItemZero = COALESCE ( @c_PackageItemZero , @orp_PackageItemZero ) + , @orp_PackagingDate = COALESCE ( @c_PackagingDate , @orp_PackagingDate ) + , @orp_PaketArtikel = COALESCE ( @c_PaketArtikel , @orp_PaketArtikel ) + , @orp_PaketMultiMomsKod = COALESCE ( @c_PaketMultiMomsKod , @orp_PaketMultiMomsKod ) + , @orp_PaketUnderArbete = COALESCE ( @c_PaketUnderArbete , @orp_PaketUnderArbete ) + , @orp_pdmcount = COALESCE ( @c_pdmcount , @orp_pdmcount ) + , @orp_PersSign = COALESCE ( @c_PersSign , @orp_PersSign ) + , @orp_PkgAndDetailOnPickList = COALESCE ( @c_PkgAndDetailOnPickList , @orp_PkgAndDetailOnPickList ) + , @orp_PkgItemDiscnt2Detail = COALESCE ( @c_PkgItemDiscnt2Detail , @orp_PkgItemDiscnt2Detail ) + , @orp_PktOrdRestNr = COALESCE ( @c_PktOrdRestNr , @orp_PktOrdRestNr ) + , @orp_PktVbOrdRadSumNettoUrspr = COALESCE ( @c_PktVbOrdRadSumNettoUrspr , @orp_PktVbOrdRadSumNettoUrspr ) + , @orp_PktVbOrdRadSumUrspr = COALESCE ( @c_PktVbOrdRadSumUrspr , @orp_PktVbOrdRadSumUrspr ) + , @orp_PlockJnrOrder = COALESCE ( @c_PlockJnrOrder , @orp_PlockJnrOrder ) + , @orp_PLUtskrDat = COALESCE ( @c_PLUtskrDat , @orp_PLUtskrDat ) + , @orp_PrelFaktVardeUtlev = COALESCE ( @c_PrelFaktVardeUtlev , @orp_PrelFaktVardeUtlev ) + , @orp_PrisAdaco = COALESCE ( @c_PrisAdaco , @orp_PrisAdaco ) + , @orp_PrisAndrDatum = COALESCE ( @c_PrisAndrDatum , @orp_PrisAndrDatum ) + , @orp_PrisHantTyp = COALESCE ( @c_PrisHantTyp , @orp_PrisHantTyp ) + , @orp_PrisHantTypIntFsg = COALESCE ( @c_PrisHantTypIntFsg , @orp_PrisHantTypIntFsg ) + , @orp_PrisJustOrder = COALESCE ( @c_PrisJustOrder , @orp_PrisJustOrder ) + , @orp_PrisJustOrderKost = COALESCE ( @c_PrisJustOrderKost , @orp_PrisJustOrderKost ) + , @orp_PrisLista = COALESCE ( @c_PrisLista , @orp_PrisLista ) + , @orp_PrisTypP = COALESCE ( @c_PrisTypP , @orp_PrisTypP ) + , @orp_PrjManufMilestone = COALESCE ( @c_PrjManufMilestone , @orp_PrjManufMilestone ) + , @orp_ProdGr = COALESCE ( @c_ProdGr , @orp_ProdGr ) + , @orp_ProjCode = COALESCE ( @c_ProjCode , @orp_ProjCode ) + , @orp_ProspektId = COALESCE ( @c_ProspektId , @orp_ProspektId ) + , @orp_PVmAssortQty = COALESCE ( @c_PVmAssortQty , @orp_PVmAssortQty ) + , @orp_PVMAssortQtyTot = COALESCE ( @c_PVMAssortQtyTot , @orp_PVMAssortQtyTot ) + , @orp_PVmAssortVariant = COALESCE ( @c_PVmAssortVariant , @orp_PVmAssortVariant ) + , @orp_PvmDispCheckDateAccept = COALESCE ( @c_PvmDispCheckDateAccept , @orp_PvmDispCheckDateAccept ) + , @orp_PvmErrMessage = COALESCE ( @c_PvmErrMessage , @orp_PvmErrMessage ) + , @orp_PvmGridNo = COALESCE ( @c_PvmGridNo , @orp_PvmGridNo ) + , @orp_PvmGridRepOrderBy = COALESCE ( @c_PvmGridRepOrderBy , @orp_PvmGridRepOrderBy ) + , @orp_PvmOrdRadNrOrg = COALESCE ( @c_PvmOrdRadNrOrg , @orp_PvmOrdRadNrOrg ) + , @orp_PvmOrdRadNrStrPosOrg = COALESCE ( @c_PvmOrdRadNrStrPosOrg , @orp_PvmOrdRadNrStrPosOrg ) + , @orp_PvmOrdRestNrOrg = COALESCE ( @c_PvmOrdRestNrOrg , @orp_PvmOrdRestNrOrg ) + , @orp_PvmPickPropQty = COALESCE ( @c_PvmPickPropQty , @orp_PvmPickPropQty ) + , @orp_PvmRowIsPvm = COALESCE ( @c_PvmRowIsPvm , @orp_PvmRowIsPvm ) + , @orp_PVMSeasonId = COALESCE ( @c_PVMSeasonId , @orp_PVMSeasonId ) + , @orp_PvmWarningMessage = COALESCE ( @c_PvmWarningMessage , @orp_PvmWarningMessage ) + , @orp_q_ALFA_KonteraEO2Palagg = COALESCE ( @c_q_ALFA_KonteraEO2Palagg , @orp_q_ALFA_KonteraEO2Palagg ) + , @orp_q_ALFA_KonteraEOPalagg = COALESCE ( @c_q_ALFA_KonteraEOPalagg , @orp_q_ALFA_KonteraEOPalagg ) + , @orp_q_ALFA_KonteraGO2Palagg = COALESCE ( @c_q_ALFA_KonteraGO2Palagg , @orp_q_ALFA_KonteraGO2Palagg ) + , @orp_QQ_Ins_Trg_Start = COALESCE ( @c_QQ_Ins_Trg_Start , @orp_QQ_Ins_Trg_Start ) + , @orp_rabatt = COALESCE ( @c_rabatt , @orp_rabatt ) + , @orp_rabatt1 = COALESCE ( @c_rabatt1 , @orp_rabatt1 ) + , @orp_rabatt2 = COALESCE ( @c_rabatt2 , @orp_rabatt2 ) + , @orp_rabatt3 = COALESCE ( @c_rabatt3 , @orp_rabatt3 ) + , @orp_RabattGrundAntal = COALESCE ( @c_RabattGrundAntal , @orp_RabattGrundAntal ) + , @orp_rabattval = COALESCE ( @c_rabattval , @orp_rabattval ) + , @orp_rabattval1 = COALESCE ( @c_rabattval1 , @orp_rabattval1 ) + , @orp_rabattval2 = COALESCE ( @c_rabattval2 , @orp_rabattval2 ) + , @orp_rabattval3 = COALESCE ( @c_rabattval3 , @orp_rabattval3 ) + , @orp_RegDat = COALESCE ( @c_RegDat , @orp_RegDat ) + , @orp_ReplicateRecord = COALESCE ( @c_ReplicateRecord , @orp_ReplicateRecord ) + , @orp_ReservdelsOrder = COALESCE ( @c_ReservdelsOrder , @orp_ReservdelsOrder ) + , @orp_RestBehKod = COALESCE ( @c_RestBehKod , @orp_RestBehKod ) + , @orp_RowCreatedBy = COALESCE ( @c_RowCreatedBy , @orp_RowCreatedBy ) + , @orp_RowCreatedDT = COALESCE ( @c_RowCreatedDT , @orp_RowCreatedDT ) + , @orp_RowCreatedUTCDT = COALESCE ( @c_RowCreatedUTCDT , @orp_RowCreatedUTCDT ) + , @orp_RowTranStampLast = COALESCE ( @c_RowTranStampLast , @orp_RowTranStampLast ) + , @orp_RowUpdatedBy = COALESCE ( @c_RowUpdatedBy , @orp_RowUpdatedBy ) + , @orp_RowUpdatedCols = COALESCE ( @c_RowUpdatedCols , @orp_RowUpdatedCols ) + , @orp_RowUpdatedDT = COALESCE ( @c_RowUpdatedDT , @orp_RowUpdatedDT ) + , @orp_RowUpdatedUTCDT = COALESCE ( @c_RowUpdatedUTCDT , @orp_RowUpdatedUTCDT ) + , @orp_RptUnitNo = COALESCE ( @c_RptUnitNo , @orp_RptUnitNo ) + , @orp_SalesTaxHandling = COALESCE ( @c_SalesTaxHandling , @orp_SalesTaxHandling ) + , @orp_Saljare = COALESCE ( @c_Saljare , @orp_Saljare ) + , @orp_SamInKopMark = COALESCE ( @c_SamInKopMark , @orp_SamInKopMark ) + , @orp_SamLevKod = COALESCE ( @c_SamLevKod , @orp_SamLevKod ) + , @orp_SamPlockas = COALESCE ( @c_SamPlockas , @orp_SamPlockas ) + , @orp_SamPlockListeNr = COALESCE ( @c_SamPlockListeNr , @orp_SamPlockListeNr ) + , @orp_SamPlockLopNr = COALESCE ( @c_SamPlockLopNr , @orp_SamPlockLopNr ) + , @orp_SerieNrBokas = COALESCE ( @c_SerieNrBokas , @orp_SerieNrBokas ) + , @orp_ServiceLevelCode = COALESCE ( @c_ServiceLevelCode , @orp_ServiceLevelCode ) + , @orp_ShipmPlanAlphaid = COALESCE ( @c_ShipmPlanAlphaid , @orp_ShipmPlanAlphaid ) + , @orp_ShuffledFromBackOrderNo = COALESCE ( @c_ShuffledFromBackOrderNo , @orp_ShuffledFromBackOrderNo ) + , @orp_ShuffledFromOrderNo = COALESCE ( @c_ShuffledFromOrderNo , @orp_ShuffledFromOrderNo ) + , @orp_ShuffledFromOrdLnNo = COALESCE ( @c_ShuffledFromOrdLnNo , @orp_ShuffledFromOrdLnNo ) + , @orp_ShuffledFromOrdSubLnNo = COALESCE ( @c_ShuffledFromOrdSubLnNo , @orp_ShuffledFromOrdSubLnNo ) + , @orp_ShuffledOrderRow = COALESCE ( @c_ShuffledOrderRow , @orp_ShuffledOrderRow ) + , @orp_ShuffledToBackOrderNo = COALESCE ( @c_ShuffledToBackOrderNo , @orp_ShuffledToBackOrderNo ) + , @orp_ShuffledToOrderNo = COALESCE ( @c_ShuffledToOrderNo , @orp_ShuffledToOrderNo ) + , @orp_ShuffledToOrdLnNo = COALESCE ( @c_ShuffledToOrdLnNo , @orp_ShuffledToOrdLnNo ) + , @orp_ShuffledToOrdSubLnNo = COALESCE ( @c_ShuffledToOrdSubLnNo , @orp_ShuffledToOrdSubLnNo ) + , @orp_spid = COALESCE ( @c_spid , @orp_spid ) + , @orp_SprakKod = COALESCE ( @c_SprakKod , @orp_SprakKod ) + , @orp_SQLCmd2EnterTrg = COALESCE ( @c_SQLCmd2EnterTrg , @orp_SQLCmd2EnterTrg ) + , @orp_SqlStmtStartedDT = COALESCE ( @c_SqlStmtStartedDT , @orp_SqlStmtStartedDT ) + , @orp_SrDummyUniqueId = COALESCE ( @c_SrDummyUniqueId , @orp_SrDummyUniqueId ) + , @orp_StafflingsKod = COALESCE ( @c_StafflingsKod , @orp_StafflingsKod ) + , @orp_StatusKodNyttOE = COALESCE ( @c_StatusKodNyttOE , @orp_StatusKodNyttOE ) + , @orp_StockReplenishment = COALESCE ( @c_StockReplenishment , @orp_StockReplenishment ) + , @orp_StrDateTimeBIA = COALESCE ( @c_StrDateTimeBIA , @orp_StrDateTimeBIA ) + , @orp_StrDateTimeOrpo = COALESCE ( @c_StrDateTimeOrpo , @orp_StrDateTimeOrpo ) + , @orp_StrukturRevision = COALESCE ( @c_StrukturRevision , @orp_StrukturRevision ) + , @orp_SumKalkVardeIngDet = COALESCE ( @c_SumKalkVardeIngDet , @orp_SumKalkVardeIngDet ) + , @orp_SumKalkVardeIngDetMtrl = COALESCE ( @c_SumKalkVardeIngDetMtrl , @orp_SumKalkVardeIngDetMtrl ) + , @orp_SumUppbokKostFranIngTO = COALESCE ( @c_SumUppbokKostFranIngTO , @orp_SumUppbokKostFranIngTO ) + , @orp_SumVardeIngDet = COALESCE ( @c_SumVardeIngDet , @orp_SumVardeIngDet ) + , @orp_SumVbVardeIngDet = COALESCE ( @c_SumVbVardeIngDet , @orp_SumVbVardeIngDet ) + , @orp_SurChOfRow = COALESCE ( @c_SurChOfRow , @orp_SurChOfRow ) + , @orp_TaxCode = COALESCE ( @c_TaxCode , @orp_TaxCode ) + , @orp_TextVatCode = COALESCE ( @c_TextVatCode , @orp_TextVatCode ) + , @orp_TillLagPlats = COALESCE ( @c_TillLagPlats , @orp_TillLagPlats ) + , @orp_TillValArtikelSkapad = COALESCE ( @c_TillValArtikelSkapad , @orp_TillValArtikelSkapad ) + , @orp_TillValArtToArtNr = COALESCE ( @c_TillValArtToArtNr , @orp_TillValArtToArtNr ) + , @orp_TillValArtToOrdRadNr = COALESCE ( @c_TillValArtToOrdRadNr , @orp_TillValArtToOrdRadNr ) + , @orp_TimeZoneCode = COALESCE ( @c_TimeZoneCode , @orp_TimeZoneCode ) + , @orp_TotOrdLevAntal = COALESCE ( @c_TotOrdLevAntal , @orp_TotOrdLevAntal ) + , @orp_TransitLeverans = COALESCE ( @c_TransitLeverans , @orp_TransitLeverans ) + , @orp_Turordning = COALESCE ( @c_Turordning , @orp_Turordning ) + , @orp_UrsprOrderAntal = COALESCE ( @c_UrsprOrderAntal , @orp_UrsprOrderAntal ) + , @orp_UtplocksKod = COALESCE ( @c_UtplocksKod , @orp_UtplocksKod ) + , @orp_UtskrDokLovAntal = COALESCE ( @c_UtskrDokLovAntal , @orp_UtskrDokLovAntal ) + , @orp_UtskrDokLovLevDat = COALESCE ( @c_UtskrDokLovLevDat , @orp_UtskrDokLovLevDat ) + , @orp_UtskrDokLovPris = COALESCE ( @c_UtskrDokLovPris , @orp_UtskrDokLovPris ) + , @orp_UtskrDokLovSkaGoras = COALESCE ( @c_UtskrDokLovSkaGoras , @orp_UtskrDokLovSkaGoras ) + , @orp_UtskrDokLovUtskrDT = COALESCE ( @c_UtskrDokLovUtskrDT , @orp_UtskrDokLovUtskrDT ) + , @orp_UtskrFoljesedel = COALESCE ( @c_UtskrFoljesedel , @orp_UtskrFoljesedel ) + , @orp_UtskrPlocklista = COALESCE ( @c_UtskrPlocklista , @orp_UtskrPlocklista ) + , @orp_ValKlausul = COALESCE ( @c_ValKlausul , @orp_ValKlausul ) + , @orp_ValKod = COALESCE ( @c_ValKod , @orp_ValKod ) + , @orp_ValKurs = COALESCE ( @c_ValKurs , @orp_ValKurs ) + , @orp_VariantGruppH = COALESCE ( @c_VariantGruppH , @orp_VariantGruppH ) + , @orp_VariantGruppT = COALESCE ( @c_VariantGruppT , @orp_VariantGruppT ) + , @orp_VariantGruppV = COALESCE ( @c_VariantGruppV , @orp_VariantGruppV ) + , @orp_VariantGruppX = COALESCE ( @c_VariantGruppX , @orp_VariantGruppX ) + , @orp_VaruGruppKod = COALESCE ( @c_VaruGruppKod , @orp_VaruGruppKod ) + , @orp_VaruProv = COALESCE ( @c_VaruProv , @orp_VaruProv ) + , @orp_VAT_Type = COALESCE ( @c_VAT_Type , @orp_VAT_Type ) + , @orp_VATCode2 = COALESCE ( @c_VATCode2 , @orp_VATCode2 ) + , @orp_VATCode3 = COALESCE ( @c_VATCode3 , @orp_VATCode3 ) + , @orp_Vb_InPris = COALESCE ( @c_Vb_InPris , @orp_Vb_InPris ) + , @orp_Vb_InPris_Mtrl = COALESCE ( @c_Vb_InPris_Mtrl , @orp_Vb_InPris_Mtrl ) + , @orp_vb_NettoPris = COALESCE ( @c_vb_NettoPris , @orp_vb_NettoPris ) + , @orp_vb_PkgToDetCalcDiff = COALESCE ( @c_vb_PkgToDetCalcDiff , @orp_vb_PkgToDetCalcDiff ) + , @orp_vb_pris = COALESCE ( @c_vb_pris , @orp_vb_pris ) + , @orp_vb_PrisFast = COALESCE ( @c_vb_PrisFast , @orp_vb_PrisFast ) + , @orp_Vb_PrisInklMoms = COALESCE ( @c_Vb_PrisInklMoms , @orp_Vb_PrisInklMoms ) + , @orp_Vb_RadVardeExklMoms = COALESCE ( @c_Vb_RadVardeExklMoms , @orp_Vb_RadVardeExklMoms ) + , @orp_Vb_RadVardeInklMoms = COALESCE ( @c_Vb_RadVardeInklMoms , @orp_Vb_RadVardeInklMoms ) + , @orp_VbArtKalkBerSum = COALESCE ( @c_VbArtKalkBerSum , @orp_VbArtKalkBerSum ) + , @orp_vbKalkPris = COALESCE ( @c_vbKalkPris , @orp_vbKalkPris ) + , @orp_VbOrdRabattSum = COALESCE ( @c_VbOrdRabattSum , @orp_VbOrdRabattSum ) + , @orp_VbOrdRabattSumNetto = COALESCE ( @c_VbOrdRabattSumNetto , @orp_VbOrdRabattSumNetto ) + , @orp_VbOrdRadSum = COALESCE ( @c_VbOrdRadSum , @orp_VbOrdRadSum ) + , @orp_VbOrdRadSumNetto = COALESCE ( @c_VbOrdRadSumNetto , @orp_VbOrdRadSumNetto ) + , @orp_VbPrisER = COALESCE ( @c_VbPrisER , @orp_VbPrisER ) + , @orp_VolymRabatt = COALESCE ( @c_VolymRabatt , @orp_VolymRabatt ) + +select @orp_ForetagKod = @c_ForetagKod +select @orp_PersSign = @c_PersSign +select @orp_FtgNr = @c_FtgNr +select @orp_ArtNr = @c_ArtNr +select @orp_LagStalle = @c_LagStalle + +if @orp_BusinessUnit is not NULL and + @orp_DelivToBusinessUnit is NOT NULL and + @orp_ICTCreditOrderInfo is not NULL and + LEN(@orp_ICTCreditOrderInfo) > 1 +BEGIN + + declare + @PosNr int, + @Wrk_ICTCreditOrderInfo Jeeves_StrVarChar128, + @Orig_OrderNr JEEVES_SONo, + @Orig_OrdRestNr smallint, + @Orig_OrdRadNr int, + @Orig_OrdRadNrStrPos int, + @Orig_LagStalle Jeeves_StrVarChar8 + + SET @Wrk_ICTCreditOrderInfo = @orp_ICTCreditOrderInfo + + select @PosNr = CHARINDEX(',',@Wrk_ICTCreditOrderInfo) + + if @PosNr > 1 select @Orig_OrderNr = SUBSTRING(@Wrk_ICTCreditOrderInfo,1,@PosNr-1) + if @PosNr > 1 select @Wrk_ICTCreditOrderInfo = STUFF(@Wrk_ICTCreditOrderInfo,1,@PosNr,NULL) + + select @PosNr = CHARINDEX(',',@Wrk_ICTCreditOrderInfo) + if @PosNr > 1 select @Orig_OrdRestNr = SUBSTRING(@Wrk_ICTCreditOrderInfo,1,@PosNr-1) + + if @PosNr > 1 select @Wrk_ICTCreditOrderInfo = STUFF(@Wrk_ICTCreditOrderInfo,1,@PosNr,NULL) + select @PosNr = CHARINDEX(',',@Wrk_ICTCreditOrderInfo) + if @PosNr > 1 select @Orig_OrdRadNr = SUBSTRING(@Wrk_ICTCreditOrderInfo,1,@PosNr-1) + + if @PosNr > 1 select @Wrk_ICTCreditOrderInfo = STUFF(@Wrk_ICTCreditOrderInfo,1,@PosNr,NULL) + select @PosNr = CHARINDEX(',',@Wrk_ICTCreditOrderInfo) + if @PosNr > 1 select @orig_OrdRadNrStrPos = SUBSTRING(@Wrk_ICTCreditOrderInfo,1,@PosNr-1) + + if @Orig_OrderNr is not NULL and + @Orig_OrdRestNr is not NULL and + @Orig_OrdRadNr is not NULL and + @Orig_OrdRadNrStrPos is not NULL + begin + + select + @Orig_LagStalle = LagStalle + from orp with (ReadUnCommitted) where + ForetagKod = @orp_ForetagKod and + OrderNr = @Orig_OrderNr and + OrdRestNr = @Orig_OrdRestNr and + OrdRadNr = @Orig_OrdRadNr and + OrdRadNrStrPos = @Orig_OrdRadNrStrPos + + SET @c_LagStalle = COALESCE(@Orig_LagStalle,@c_LagStalle) + + end + +END + +if @orp_BusinessUnit is not NULL and + @orp_DelivToBusinessUnit is NOT NULL +BEGIN + + declare + @ar_OrdTyp smallint + + select + @ar_OrdTyp = OrdTyp + from ar with (ReadUnCommitted) where + ar.ForetagKod = @orp_ForetagKod and + ar.ArtNr = @orp_ArtNr + + if @ar_OrdTyp is not NULL SET @c_OrdTyp = @ar_OrdTyp + +END + +-- @ztrm_Connection=NULL 0 +select + @sy1_AdjustMinutes2GetLocalTime = COALESCE( sy1.AdjustMinutes2GetLocalTime, 0 ) + ,@sy1_TimeZoneCode = sy1.TimeZoneCode + ,@sy1_CurrencyDecimals = COALESCE( sy1.CurrencyDecimals, 0 ) + ,@sy1_Currency = sy1.ValKod + -- + -- + from [sy1] with (ReadUnCommitted) where [sy1].[ForetagKod] = @c_ForetagKod; +if @@RowCount<>1 or @@Error<>0 begin + print 'Jeeves_Init_Insert_orp; SY1; Invalid my_own_companycode <'+ISNULL(convert(varchar,@c_ForetagKod),'NULL')+'>'; + while @@TranCount > @Enter_TranCount ROLLBACK TRANSACTION; + while @@TranCount < @Enter_TranCount BEGIN TRANSACTION; + return -101; +end; + +-- Sy1Orp02 0 + + +-- ASSIGN from SY2 Sy1Orp02 + +select + @orp_RowCreatedBy = COALESCE( @c_RowCreatedBy, [sy2].[PersSign], @orp_RowCreatedBy ) -- 130 + ,@orp_PersSign = COALESCE( @c_PersSign, [sy2].[PersSign], @orp_PersSign ) -- 120 + ,@sy2_AdjustMinutes2GetLocalTime = COALESCE ( sy2.AdjustMinutes2GetLocalTime, 0 ) + ,@sy2_TimeZoneCode = sy2.TimeZoneCode + -- + -- + from [sy2] with (ReadUnCommitted) where [PersSign] = @c_PersSign; +if @@RowCount<>1 or @@Error<>0 begin + print 'Jeeves_Init_Insert_orp; SY2; invalid my_own_Signature <'+ISNULL(@c_PersSign,'NULL')+'>'; + while @@TranCount > @Enter_TranCount ROLLBACK TRANSACTION; + while @@TranCount < @Enter_TranCount BEGIN TRANSACTION; + return -102; +end; + +if @c_AdjustMinutes2GetLocalTime is not null + select @AM2GLT = @c_AdjustMinutes2GetLocalTime +else + select @AM2GLT = coalesce( @sy1_AdjustMinutes2GetLocalTime, 0 ) + coalesce( @sy2_AdjustMinutes2GetLocalTime, 0 ) + +declare + @LocalDateAndTime DateTime, + @UTCDateAndTime DateTime, + @use_when_StrDateTime DateTime, + @use_when_DefStrDateTime Jeeves_StrDateTime, + @use_when_DefDummyUniqueId Jeeves_DummyUniqueId = left( cast( SysDateTime() as varchar(40) ) + '/' + cast( @@Spid as varchar(10) ), 38 ); +select + @LocalDateAndTime = DateAdd( MINUTE, @AM2GLT, GetDate() ), + @UTCDateAndTime = GetUTCDate(); +if @sy1_TimeZoneCode >= 0 or @sy2_TimeZoneCode >= 0 or @c_TimeZoneCode >= 0 begin + select + @LocalDateAndTime = dbo.Jeeves_FN_GetLocalDateTime( GetDate(), @c_ForetagKod, @c_PersSign, @c_TimeZoneCode ); + select + @use_when_StrDateTime = @UTCDateAndTime, + @use_when_DefStrDateTime = convert( char(8), @UTCDateAndTime, 112 ) + ' ' + convert( varchar(12), @UTCDateAndTime, 114 ); +end else begin + select + @use_when_StrDateTime = @LocalDateAndTime, + @use_when_DefStrDateTime = convert( char(8), @LocalDateAndTime, 112 ) + ' ' + convert( varchar(12), @LocalDateAndTime, 114 ); +end; + +if @sy1_CurrencyDecimals is null or @sy1_CurrencyDecimals < 0 or @sy1_CurrencyDecimals > 4 + select @sy1_CurrencyDecimals = 2 + + +-- ASSIGN from SY1 Sy1Orp02 + +select + @orp_RegDat = COALESCE ( @c_RegDat , convert( varchar(8), @LocalDateAndTime, 112 ) ) -- 110 + +if @orp_OrderNr is NULL begin + if @orp_OrderNrAlfa is not NULL begin + select + @orp_OrderNr = [oh].[OrderNr] + from [oh] where [oh].[OrderNrAlfa] = @orp_OrderNrAlfa + end + if @orp_OrderNr is NULL and @orp_FtgNr is not NULL begin + exec @x = Jeeves_Init_Insert_oh + @c_ForetagKod = @c_ForetagKod, + @c_PersSign = @c_PersSign, + @c_FtgNr = @c_FtgNr, + @c_Saljare = @c_Saljare, + @c_OrderNr = @orp_OrderNr OUTPUT, + @c_OrderNrAlfa = @c_OrderNrAlfa, + @c_Logg_Exec_Time_String = @c_Logg_Exec_Time_String OUTPUT + select @dbe=@@Error + if @x<>0 or @dbe<>0 begin + while @@TranCount > @Enter_TranCount ROLLBACK TRAN + while @@TranCount < @Enter_TranCount BEGIN TRAN + print 'Jeeves_Init_Insert_orp, returned from Jeeves_Init_Insert_oh with error = ' + convert(varchar,@dbe) + '/' +convert(varchar,@x) + return -100 + end + if @DebugMsg is not NULL print 'New SO with id '+ISNULL(convert(varchar,@orp_OrderNr),'NULL') + select @c_OrderNr=@orp_OrderNr + end +end + + + +-- ASSIGN from ..... OradIOrd + +select + @orp_OneOffSalesCode = COALESCE( @c_OneOffSalesCode, '0' ) -- 82 + ,@orp_NettoEjRabKod = COALESCE( @c_NettoEjRabKod, '0' ) -- 75 + ,@orp_OrdRestNot = COALESCE( @c_OrdRestNot, '0' ) -- 50 + ,@orp_ArtKundRabKod = COALESCE( @c_ArtKundRabKod, '1' ) -- 80 + ,@orp_OrpRadTextFa = COALESCE( @c_OrpRadTextFa, '1' ) -- 70 + ,@orp_OrpRadTextPl = COALESCE( @c_OrpRadTextPl, '1' ) -- 65 + ,@orp_OrpRadTextFs = COALESCE( @c_OrpRadTextFs, '1' ) -- 60 + ,@orp_OrpRadTextOe = COALESCE( @c_OrpRadTextOe, '1' ) -- 55 + ,@orp_PrisHantTyp = COALESCE( @c_PrisHantTyp, 0/*numeric constant?*/ ) -- 85 + ,@orp_OrdRestNr = COALESCE( @c_OrdRestNr, 0/*numeric constant?*/ ) -- 20 + ,@orp_AnmodanMark = COALESCE( @c_AnmodanMark, [oh].[AnmodanMark], @orp_AnmodanMark ) -- 95 + ,@orp_AutoFrislappas = COALESCE( @c_AutoFrislappas, [oh].[AutoFrislappas], @orp_AutoFrislappas ) -- 10 + ,@orp_Businessunit = COALESCE( @c_Businessunit, [oh].[Businessunit], @orp_Businessunit ) -- 300 + ,@orp_CodeFixedDeparture = COALESCE( @c_CodeFixedDeparture, [oh].[CodeFixedDeparture], @orp_CodeFixedDeparture ) -- 0 + ,@orp_DelBokningTillaten = COALESCE( @c_DelBokningTillaten, [oh].[DelBokningTillaten], @orp_DelBokningTillaten ) -- 10 + ,@orp_DelLevTillaten = COALESCE( @c_DelLevTillaten, [oh].[DelLevTillaten], @orp_DelLevTillaten ) -- 10 + ,@orp_DirektLeverans = COALESCE( @c_DirektLeverans, [oh].[DirektLeverans], @orp_DirektLeverans ) -- 112 + ,@orp_DirektUttag = COALESCE( @c_DirektUttag, [oh].[DirektUttag], @orp_DirektUttag ) -- 116 + ,@orp_FtgNr = COALESCE( @c_FtgNr, [oh].[FtgNr], @orp_FtgNr ) -- 0 + ,@orp_K4 = COALESCE( @c_K4, [oh].[K4], @orp_K4 ) -- 314 + ,@orp_K5 = COALESCE( @c_K5, [oh].[K5], @orp_K5 ) -- 316 + ,@orp_K6 = COALESCE( @c_K6, [oh].[K6], @orp_K6 ) -- 318 + ,@orp_K7 = COALESCE( @c_K7, [oh].[K7], @orp_K7 ) -- 320 + ,@orp_KalkylPrisFaktura = COALESCE( @c_KalkylPrisFaktura, [oh].[KalkylPrisFaktura], @orp_KalkylPrisFaktura ) -- 115 + ,@orp_kampnr = COALESCE( @c_kampnr, [oh].[kampnr], @orp_kampnr ) -- 360 + ,@orp_KostBar = COALESCE( @c_KostBar, [oh].[KostBar], @orp_KostBar ) -- 312 + ,@orp_KostStalleKod = COALESCE( @c_KostStalleKod, [oh].[KostStalleKod], @orp_KostStalleKod ) -- 310 + ,@orp_KreditOrder = COALESCE( @c_KreditOrder, [oh].[KreditOrder], @orp_KreditOrder ) -- 111 + ,@orp_KundKategoriKod = COALESCE( @c_KundKategoriKod, [oh].[KundKategoriKod], @orp_KundKategoriKod ) -- 0 + ,@orp_KundPrisInklMoms = COALESCE( @c_KundPrisInklMoms, [oh].[KundPrisInklMoms], @orp_KundPrisInklMoms ) -- 322 + ,@orp_LagerFlyttning = COALESCE( @c_LagerFlyttning, [oh].[LagerFlyttning], @orp_LagerFlyttning ) -- 330 + ,@orp_LevSattKod = COALESCE( @c_LevSattKod, [oh].[LevSattKod], @orp_LevSattKod ) -- 0 + ,@orp_MarkOrderUniktLager = COALESCE( @c_MarkOrderUniktLager, [oh].[MarkOrderUniktLager], @orp_MarkOrderUniktLager ) -- 114 + ,@orp_MomsKod = COALESCE( @c_MomsKod, [oh].[MomsKod], @orp_MomsKod ) -- 0 + ,@orp_OffNr = COALESCE( @c_OffNr, [oh].[OffNr], @orp_OffNr ) -- 0 + ,@orp_OrdBegLevDat = COALESCE( @c_OrdBegLevDat, [oh].[OrdBegLevDat], @orp_OrdBegLevDat ) -- 0 + ,@orp_OrdBerLevTid = COALESCE( @c_OrdBerLevTid, [oh].[OrdBerLevTid], @orp_OrdBerLevTid ) -- 0 + ,@orp_OrdDatum = COALESCE( @c_OrdDatum, [oh].[OrdDatum], @orp_OrdDatum ) -- 0 + ,@orp_OrderNrAlfa = COALESCE( @c_OrderNrAlfa, [oh].[OrderNrAlfa], @orp_OrderNrAlfa ) -- 10 + ,@orp_OrdLevNr = COALESCE( @c_OrdLevNr, [oh].[OrdLevNr], @orp_OrdLevNr ) -- 100 + ,@orp_OrdLevPlats1 = COALESCE( @c_OrdLevPlats1, [oh].[OrdLevPlats1], @orp_OrdLevPlats1 ) -- 0 + ,@orp_OrdLovLevDat = COALESCE( @c_OrdLovLevDat, [oh].[OrdLovLevDat], @orp_OrdLovLevDat ) -- 0 + ,@orp_OrdRadNr = COALESCE( @c_OrdRadNr, @orp_OrdRadNr/*unknown ufu? */ ) -- 30 + ,@orp_PrisJustOrder = COALESCE( @c_PrisJustOrder, [oh].[PrisJustOrder], @orp_PrisJustOrder ) -- 111 + ,@orp_PrisLista = COALESCE( @c_PrisLista, [oh].[PrisLista], @orp_PrisLista ) -- 0 + ,@orp_ProjCode = COALESCE( @c_ProjCode, [oh].[ProjCode], @orp_ProjCode ) -- 0 + ,@orp_prospektid = COALESCE( @c_prospektid, [oh].[prospektid], @orp_prospektid ) -- 350 + ,@orp_RestBehKod = COALESCE( @c_RestBehKod, [oh].[RestBehKod], @orp_RestBehKod ) -- 45 + ,@orp_SalesTaxHandling = COALESCE( @c_SalesTaxHandling, [oh].[SalesTaxHandling], @orp_SalesTaxHandling ) -- 324 + ,@orp_Saljare = COALESCE( @c_Saljare, [oh].[Saljare], @orp_Saljare ) -- 900 + ,@orp_SamInkopMark = COALESCE( @c_SamInkopMark, [oh].[SamInkopMark], @orp_SamInkopMark ) -- 90 + ,@orp_SprakKod = COALESCE( @c_SprakKod, [oh].[SprakKod], @orp_SprakKod ) -- 0 + ,@orp_TaxCode = COALESCE( @c_TaxCode, [oh].[TaxCode], @orp_TaxCode ) -- 326 + ,@orp_TransitLeverans = COALESCE( @c_TransitLeverans, [oh].[TransitLeverans], @orp_TransitLeverans ) -- 113 + ,@orp_LagStalle = COALESCE( @c_LagStalle, @orp_LagStalle/*unknown ufu? */ ) -- 0 + ,@orp_OrdTyp = COALESCE( @c_OrdTyp, [oh].[OrdTyp], @orp_OrdTyp ) -- 111 + ,@orp_OrdBerednDat = COALESCE( @c_OrdBerednDat, @orp_OrdBerednDat/*unknown ufu? */ ) -- 2 + ,@orp_OrdBerLevDat = COALESCE( @c_OrdBerLevDat, @orp_OrdBerLevDat/*unknown ufu? */ ) -- 0 + ,@orp_OrderRowFromEstimator = COALESCE( @c_OrderRowFromEstimator, @orp_OrderRowFromEstimator/*unknown ufu? */ ) -- 400 + ,@orp_OrderFranOffert = COALESCE( @c_OrderFranOffert, @orp_OrderFranOffert/*unknown ufu? */ ) -- 340 + ,@orp_ValKod = COALESCE( @c_ValKod, [oh].[ValKod], @orp_ValKod ) -- 0 + ,@orp_ValKurs = COALESCE( @c_ValKurs, [oh].[ValKurs], @orp_ValKurs ) -- 0 + ,@orp_VaruProv = COALESCE( @c_VaruProv, [oh].[VaruProv], @orp_VaruProv ) -- 117 + -- + -- + from [oh] with (ReadUnCommitted) where + @orp_ForetagKod = [oh].[ForetagKod] -- -1 + and @orp_OrderNr = [oh].[OrderNr] -- 10 +select @dbe = @@Error, @dbc = @@RowCount; +--if @@RowCount<>1 or @@Error<>0 begin +-- print 'Jeeves_Init_Insert_orp; '+'invalid key to upper table, connection = <'+ISNULL('OradIOrd','NULL')+'>' +-- while @@TranCount > @Enter_TranCount ROLLBACK TRAN +-- while @@TranCount < @Enter_TranCount BEGIN TRAN +-- return -104 +--end + +-- +-- + + +declare + @jvss_SALES127 Jeeves_Boolean, + @jvss_SALES129 smallint, + @jvss_SALES007 smallint, + @MaxRadNr int + +select + @jvss_SALES127 = jvss.JeevesParamBoolean + from jvss with (ReadUnCommitted) where + jvss.ForetagKod = @orp_ForetagKod and + jvss.JeevesParamName = 'SALES127' +if @@RowCount=0 or @jvss_SALES127 is NULL select @jvss_SALES127 = '0' + +select + @jvss_SALES129 = jvss.JeevesParamNumeric + from jvss with (ReadUnCommitted) where + jvss.ForetagKod = @orp_ForetagKod and + jvss.JeevesParamName = 'SALES129' +if @@RowCount=0 or @jvss_SALES129 is NULL select @jvss_SALES129 = 10 + +select @MaxRadNr = 999999999 +select + @jvss_SALES007 = jvss.JeevesParamNumeric + from jvss with (ReadUnCommitted) where + jvss.ForetagKod = @orp_ForetagKod and + jvss.JeevesParamName = 'ORDERADD001' +if @jvss_SALES007 is NOT NULL and @jvss_SALES007 <> 0 select @MaxRadNr = 9500 + +if @jvss_SALES127 = '1' and @jvss_SALES129 < 10 select @jvss_SALES129 = 10 + +if @orp_OrdRadNr is NULL or @orp_OrdRadNr = 0 begin + select @orp_OrdRadNr = MAX( OrdRadNr ) from orp where ForetagKod=@c_ForetagKod and OrderNr=@c_OrderNr and CONVERT(int,OrdRadNr) < @MaxRadNr + select @orp_OrdRadNr = ISNULL( @orp_OrdRadNr, 0) + if @orp_OrdRadNr = 0 + select @orp_OrdRadNr=@jvss_SALES129 + else + select @orp_OrdRadNr = ((@orp_OrdRadNr/@jvss_SALES129)*@jvss_SALES129)+@jvss_SALES129 + select @c_OrdRadNr = @orp_OrdRadNr +end + +if @orp_OrdRadNrStrPos is NULL + select @orp_OrdRadNrStrPos=0,@c_OrdRadNrStrPos=0 + +---------------------------------------- +if @c_OrdRestNr is null + select @c_OrdRestNr = 0 + +--print 'aa 1' +if exists ( select 1 from orp with (ReadUnCommitted) where + orp.ForetagKod = @c_ForetagKod and + orp.OrderNr = @c_OrderNr and + orp.OrdRestNr = @c_OrdRestNr and + orp.OrdRadNr = @c_OrdRadNr and + orp.OrdRadNrStrPos = @c_OrdRadNrStrPos + ) +begin + --print 'aa 2' + if exists ( select 1 from orp with (ReadUnCommitted) where + orp.ForetagKod = @c_ForetagKod and + orp.OrderNr = @c_OrderNr and + orp.OrdRestNr = @c_OrdRestNr and + orp.OrdRadNr = @c_OrdRadNr and + orp.OrdRadNrStrPos = 0 and + orp.PaketArtikel = '1' and + orp.ArtNr <> @c_ArtNr + ) + begin + --print 'aa 3' + select @c_OrdRadNrStrPos = max( orp.OrdRadNrStrPos ) + from orp with (ReadUnCommitted) where + orp.ForetagKod = @c_ForetagKod and + orp.OrderNr = @c_OrderNr and + orp.OrdRestNr = @c_OrdRestNr and + orp.OrdRadNr = @c_OrdRadNr and + orp.OrdRadNrStrPos > 0 + select @c_OrdRadNrStrPos = coalesce( @c_OrdRadNrStrPos, 0 ) + 10 + select @orp_OrdRadNrStrPos = @c_OrdRadNrStrPos + end +end +---------------------------------------- + +declare + @oh_OrdTyp smallint, + @oh_LagStalle JEEVES_StrVarChar8 + +if @orp_OrdTyp is NULL or + @orp_LagStalle is NULL +begin + select + @oh_ordTyp = OrdTyp, + @oh_LagStalle = LagStalle + from oh with (ReadUnCommitted) where + oh.ForetagKod = @orp_ForetagKod and + oh.OrderNr = @orp_OrderNr + if @orp_OrdTyp is NULL SET @orp_OrdTyp = @oh_OrdTyp + if @orp_LagStalle is NULL SET @orp_LagStalle = @oh_LagStalle +end + + + +-- ASSIGN from vkar Sequence=NULL + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign OrpVkar01' +if + @orp_ForetagKod is not NULL -- -1 + and @orp_FtgNr is not NULL -- 10 + and @orp_ArtNrKund is not NULL -- 20 +begin + select + @orp_ArtNr = COALESCE( @c_ArtNr, [vkar].[ArtNr], @orp_ArtNr ) -- 30 ztstring +-- +-- + from [vkar] with (ReadUnCommitted) where + @orp_ForetagKod = [vkar].[ForetagKod] -- -1 + and @orp_FtgNr = [vkar].[FtgNr] -- 10 + and @orp_ArtNrKund = [vkar].[ArtNrKund] -- 20 + +end + + +-- ASSIGN from xb Sequence=NULL + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign orpxb01' +if + @orp_ForetagKod is not NULL -- -1 + and @orp_LagStalle is not NULL -- 10 +begin + select + @orp_DelivFromBusinessUnit = COALESCE( @c_DelivFromBusinessUnit, [xb].[DelivFromBusinessUnit], @orp_DelivFromBusinessUnit ) -- 20 ztString + ,@orp_InventoryLocWMS = COALESCE( @c_InventoryLocWMS, [xb].[InventoryLocWMS], @orp_InventoryLocWMS ) -- 30 ztBoolean + ,@orp_LagStalleLevOrder = COALESCE( @c_LagStalleLevOrder, [xb].[LagStalleLevOrder], @orp_LagStalleLevOrder ) -- 110 ztString + ,@orp_RptUnitNo = COALESCE( @c_RptUnitNo, [xb].[RptUnitNo], @orp_RptUnitNo ) -- 120 ztInteger +-- +-- + from [xb] with (ReadUnCommitted) where + @orp_ForetagKod = [xb].[ForetagKod] -- -1 + and @orp_LagStalle = [xb].[LagStalle] -- 10 + +end + + +-- ASSIGN from X6 0 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign orpX601' +if + @orp_ForetagKod is not NULL -- -1 + and @orp_OrdTyp is not NULL -- 10 +begin + select + @orp_AutoFrislappas = COALESCE( @c_AutoFrislappas, [X6].[AutoFrislappas], @orp_AutoFrislappas ) -- 168 ztBoolean + ,@orp_AutoRegel = COALESCE( @c_AutoRegel, [X6].[AutoRegel], @orp_AutoRegel ) -- 310 ztstring + ,@orp_Bestallas = COALESCE( @c_Bestallas, [X6].[Bestallas], @orp_Bestallas ) -- 110 ztBoolean + ,@orp_DirektLeverans = COALESCE( @c_DirektLeverans, [X6].[DirektLeverans], @orp_DirektLeverans ) -- 60 ztBoolean + ,@orp_DirektUttag = COALESCE( @c_DirektUttag, [x6].[DirektUttag], @orp_DirektUttag ) -- 120 ztBoolean + ,@orp_IntStatTransTyp = COALESCE( @c_IntStatTransTyp, [X6].[IntStatTransTyp], @orp_IntStatTransTyp ) -- 530 ztInteger + ,@orp_KalkylPrisFaktura = COALESCE( @c_KalkylPrisFaktura, [X6].[KalkylPrisFaktura], @orp_KalkylPrisFaktura ) -- 490 ztString + ,@orp_KreditOrder = COALESCE( @c_KreditOrder, [x6].[KreditOrder], @orp_KreditOrder ) -- 130 ztBoolean + ,@orp_LagerFlyttning = COALESCE( @c_LagerFlyttning, [X6].[LagerFlyttning], @orp_LagerFlyttning ) -- 500 ztBoolean + ,@orp_LagerHanteringTyp = COALESCE( @c_LagerHanteringTyp, [X6].[LagerHanteringTyp], @orp_LagerHanteringTyp ) -- 520 ztInteger + ,@orp_MarkOrderUniktLager = COALESCE( @c_MarkOrderUniktLager, [X6].[MarkOrderUniktLager], @orp_MarkOrderUniktLager ) -- 65 ztBoolean + ,@orp_OrderKopplKod = COALESCE( @c_OrderKopplKod, [X6].[OrderKopplKod], @orp_OrderKopplKod ) -- 510 ztInteger + ,@orp_PrisJustOrder = COALESCE( @c_PrisJustOrder, [x6].[PrisJustOrder], @orp_PrisJustOrder ) -- 140 ztBoolean + ,@orp_PrisJustOrderKost = COALESCE( @c_PrisJustOrderKost, [X6].[PrisJustOrderKost], @orp_PrisJustOrderKost ) -- 145 ztBoolean + ,@orp_Stockreplenishment = COALESCE( @c_Stockreplenishment, [X6].[Stockreplenishment], @orp_Stockreplenishment ) -- 540 ztBoolean + ,@orp_TransitLeverans = COALESCE( @c_TransitLeverans, [X6].[TransitLeverans], @orp_TransitLeverans ) -- 70 ztBoolean + ,@orp_VaruProv = COALESCE( @c_VaruProv, [X6].[VaruProv], @orp_VaruProv ) -- 480 ztString +-- +-- + from [X6] with (ReadUnCommitted) where + @orp_ForetagKod = [X6].[ForetagKod] -- -1 + and @orp_OrdTyp = [X6].[OrdTyp] -- 10 + +end + + +-- ASSIGN from ar 1 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign OrpAr01' +if + @orp_ForetagKod is not NULL -- 5 + and @orp_ArtNr is not NULL -- 8 +begin + select + @orp_AnmodanMark = COALESCE( @c_AnmodanMark, [ar].[AnmodanMark], @orp_AnmodanMark ) -- 10 ztBoolean + ,@orp_AnskaffningKop = COALESCE( @c_AnskaffningKop, [ar].[AnskaffningKop], @orp_AnskaffningKop ) -- 10 ztBoolean + ,@orp_AnskaffningMotBehov = COALESCE( @c_AnskaffningMotBehov, [ar].[AnskaffningMotBehov], @orp_AnskaffningMotBehov ) -- 10 ztBoolean + ,@orp_AnskaffningTillv = COALESCE( @c_AnskaffningTillv, [ar].[AnskaffningTillv], @orp_AnskaffningTillv ) -- 10 ztBoolean + ,@orp_ArtCirkaPris = COALESCE( @c_ArtCirkaPris, [ar].[ArtCirkaPris], @orp_ArtCirkaPris ) -- 350 ZtSalesPrice + ,@orp_ArtKalkBer = COALESCE( @c_ArtKalkBer, [ar].[ArtKalkBer], @orp_ArtKalkBer ) -- 10 ZtBaseCurrAmount + ,@orp_ArtKalkBerB = COALESCE( @c_ArtKalkBerB, [ar].[ArtKalkBerB], @orp_ArtKalkBerB ) -- 10 ZtBaseCurrAmount + ,@orp_ArtKalkBerC = COALESCE( @c_ArtKalkBerC, [ar].[ArtKalkBerC], @orp_ArtKalkBerC ) -- 10 ZtBaseCurrAmount + ,@orp_ArtKalkBerMtrl = COALESCE( @c_ArtKalkBerMtrl, [ar].[ArtKalkBerMtrl], @orp_ArtKalkBerMtrl ) -- 10 ZtBaseCurrAmount + ,@orp_ArtKalkBudg = COALESCE( @c_ArtKalkBudg, [ar].[ArtKalkBudg], @orp_ArtKalkBudg ) -- 10 ZtBaseCurrAmount + ,@orp_ArtKalkPer = COALESCE( @c_ArtKalkPer, [ar].[ArtKalkPer], @orp_ArtKalkPer ) -- 10 ztInteger + ,@orp_ArtKalkPris = COALESCE( @c_ArtKalkPris, [ar].[ArtKalkPris], @orp_ArtKalkPris ) -- 10 ZtBaseCurrAmount + ,@orp_ArtKalkPrisE = COALESCE( @c_ArtKalkPrisE, [ar].[ArtKalkBer], @orp_ArtKalkPrisE ) -- 10 ZtBaseCurrAmount + ,@orp_ArtKalkPrisO = COALESCE( @c_ArtKalkPrisO, [ar].[ArtKalkBer], @orp_ArtKalkPrisO ) -- 10 ZtBaseCurrAmount + ,@orp_ArtKalkPrisOMtrl = COALESCE( @c_ArtKalkPrisOMtrl, [ar].[ArtKalkBerMtrl], @orp_ArtKalkPrisOMtrl ) -- 10 ZtBaseCurrAmount + ,@orp_ArtKundRabKod = COALESCE( @c_ArtKundRabKod, [ar].[ArtKundRabKod], @orp_ArtKundRabKod ) -- 125 ztBoolean + ,@orp_ArtPackSeparat = COALESCE( @c_ArtPackSeparat, [ar].[ArtPackSeparat], @orp_ArtPackSeparat ) -- 10 ztBoolean + ,@orp_ArtProdKlass = COALESCE( @c_ArtProdKlass, [ar].[ArtProdKlass], @orp_ArtProdKlass ) -- 10 ztstring + ,@orp_ArtProdKonto = COALESCE( @c_ArtProdKonto, [ar].[ArtProdKonto], @orp_ArtProdKonto ) -- 123 ztstring + ,@orp_ArtRevId = COALESCE( @c_ArtRevId, [ar].[ArtRevId], @orp_ArtRevId ) -- 210 ztString + ,@orp_ArtRitnNr = COALESCE( @c_ArtRitnNr, [ar].[ArtRitnNr], @orp_ArtRitnNr ) -- 212 ztstring + ,@orp_BatchBokas = COALESCE( @c_BatchBokas, [ar].[BatchBokas], @orp_BatchBokas ) -- 120 ztBoolean + ,@orp_DelBokningTillaten = COALESCE( @c_DelBokningTillaten, [ar].[DelBokningTillaten], @orp_DelBokningTillaten ) -- 162 ztInteger + ,@orp_DelLevTillaten = COALESCE( @c_DelLevTillaten, [ar].[DelLevTillaten], @orp_DelLevTillaten ) -- 164 ztInteger + ,@orp_ForbrukningsMaterial = COALESCE( @c_ForbrukningsMaterial, [ar].[ForbrukningsMaterial], @orp_ForbrukningsMaterial ) -- 142 ztBoolean + ,@orp_FsgArtOmvFaktor = COALESCE( @c_FsgArtOmvFaktor, [ar].[FsgArtOmvFaktor], @orp_FsgArtOmvFaktor ) -- 112 ztFloat + ,@orp_FsgPrisPer = COALESCE( @c_FsgPrisPer, [ar].[FsgPrisPer], @orp_FsgPrisPer ) -- 111 ztFloat + ,@orp_LagerBokas = COALESCE( @c_LagerBokas, [ar].[LagerBokas], @orp_LagerBokas ) -- 110 ztBoolean + ,@orp_LevNr = COALESCE( @c_LevNr, [ar].[LevNr], @orp_LevNr ) -- 360 ztCompanyNo + ,@orp_MomsKod = COALESCE( @c_MomsKod, [ar].[MomsKod], @orp_MomsKod ) -- 333 ztInteger + ,@orp_OrdVRabKod = COALESCE( @c_OrdVRabKod, [ar].[OrdVRabKod], @orp_OrdVRabKod ) -- 10 ztInteger + ,@orp_OrpStrPrisBer = COALESCE( @c_OrpStrPrisBer, [ar].[OrpStrPrisBer], @orp_OrpStrPrisBer ) -- 10 ztInteger + ,@orp_PackageItemQty2Det = COALESCE( @c_PackageItemQty2Det, [ar].[PackageItemQty2Det], @orp_PackageItemQty2Det ) -- 10 ztBoolean + ,@orp_PaketArtikel = COALESCE( @c_PaketArtikel, [ar].[PaketArtikel], @orp_PaketArtikel ) -- 135 ztBoolean + ,@orp_PkgItemDiscnt2Detail = COALESCE( @c_PkgItemDiscnt2Detail, [ar].[PkgItemDiscnt2Detail], @orp_PkgItemDiscnt2Detail ) -- 10 ztBoolean + ,@orp_ProdGr = COALESCE( @c_ProdGr, [ar].[ProdGr], @orp_ProdGr ) -- 166 ztString + ,@orp_PVMAssortQty = COALESCE( @c_PVMAssortQty, [ar].[PVMAssortQty], @orp_PVMAssortQty ) -- 410 ZtQty + ,@orp_PVMAssortVariant = COALESCE( @c_PVMAssortVariant, [ar].[PVMAssortVariant], @orp_PVMAssortVariant ) -- 400 ztBoolean + ,@orp_SamInkopMark = COALESCE( @c_SamInkopMark, [ar].[SamInkopMark], @orp_SamInkopMark ) -- 10 ztBoolean + ,@orp_SamLevKod = COALESCE( @c_SamLevKod, [ar].[SamLevKod], @orp_SamLevKod ) -- 160 ztString + ,@orp_SerieNrBokas = COALESCE( @c_SerieNrBokas, [ar].[SerieNrBokas], @orp_SerieNrBokas ) -- 130 ztBoolean + ,@orp_UtskrFoljesedel = COALESCE( @c_UtskrFoljesedel, [ar].[UtskrFoljesedel], @orp_UtskrFoljesedel ) -- 145 ztBoolean + ,@orp_UtskrPlocklista = COALESCE( @c_UtskrPlocklista, [ar].[UtskrPlocklista], @orp_UtskrPlocklista ) -- 140 ztBoolean + ,@orp_VaruGruppKod = COALESCE( @c_VaruGruppKod, [ar].[VaruGruppKod], @orp_VaruGruppKod ) -- 150 ztstring +-- +-- + from [ar] with (ReadUnCommitted) where + @orp_ForetagKod = [ar].[ForetagKod] -- 5 + and @orp_ArtNr = [ar].[ArtNr] -- 8 + +end + + +-- ASSIGN from kuar 1 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign OrpKuar01' +if + @orp_ForetagKod is not NULL -- -1 + and @orp_FtgNr is not NULL -- 10 + and @orp_ArtNr is not NULL -- 20 +begin + select + @orp_ArtNrKund = COALESCE( @c_ArtNrKund, [kuar].[ArtNrKund], @orp_ArtNrKund ) -- 30 ztString +-- +-- + from [kuar] with (ReadUnCommitted) where + @orp_ForetagKod = [kuar].[ForetagKod] -- -1 + and @orp_FtgNr = [kuar].[FtgNr] -- 10 + and @orp_ArtNr = [kuar].[ArtNr] -- 20 + +end + + +-- ASSIGN from X1 2 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign orpX101' +if + @orp_ForetagKod is not NULL -- -1 + and @orp_MomsKod is not NULL -- 10 +begin + select + @orp_SalesTaxHandling = COALESCE( @c_SalesTaxHandling, [X1].[SalesTaxHandling], @orp_SalesTaxHandling ) -- 20 ztBoolean + ,@orp_TaxCode = COALESCE( @c_TaxCode, [X1].[TaxCode], @orp_TaxCode ) -- 30 ztInteger +-- +-- + from [X1] with (ReadUnCommitted) where + @orp_ForetagKod = [X1].[ForetagKod] -- -1 + and @orp_MomsKod = [X1].[MomsKod] -- 10 + +end + + +-- ASSIGN from ars 4 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign orpars01' +if + @orp_ForetagKod is not NULL -- -1 + and @orp_LagStalle is not NULL -- 10 + and @orp_ArtNr is not NULL -- 20 +begin + select + @orp_AnmodanMark = COALESCE( @c_AnmodanMark, [ars].[AnmodanMark], @orp_AnmodanMark ) -- 580 ztBoolean + ,@orp_AnskaffningKop = COALESCE( @c_AnskaffningKop, [ars].[AnskaffningKop], @orp_AnskaffningKop ) -- 510 ztBoolean + ,@orp_AnskaffningMotBehov = COALESCE( @c_AnskaffningMotBehov, [ars].[AnskaffningMotBehov], @orp_AnskaffningMotBehov ) -- 530 ztBoolean + ,@orp_AnskaffningTillv = COALESCE( @c_AnskaffningTillv, [ars].[AnskaffningTillv], @orp_AnskaffningTillv ) -- 520 ztBoolean + ,@orp_ars_LagPlats = COALESCE( @c_ars_LagPlats, [ars].[LagPlats], @orp_ars_LagPlats ) -- 150 ztBinLocation + ,@orp_ArtKalkBer = COALESCE( @c_ArtKalkBer, [ars].[ArtKalkBer], @orp_ArtKalkBer ) -- 200 ZtBaseCurrAmount + ,@orp_ArtKalkBerMtrl = COALESCE( @c_ArtKalkBerMtrl, [ars].[ArtKalkBerMtrl], @orp_ArtKalkBerMtrl ) -- 205 ZtBaseCurrAmount + ,@orp_ArtKalkBudg = COALESCE( @c_ArtKalkBudg, [ars].[ArtKalkBudg], @orp_ArtKalkBudg ) -- 220 ZtBaseCurrAmount + ,@orp_ArtKalkPer = COALESCE( @c_ArtKalkPer, [ars].[ArtKalkPer], @orp_ArtKalkPer ) -- 210 ztInteger + ,@orp_ArtKalkPris = COALESCE( @c_ArtKalkPris, [ars].[ArtKalkPris], @orp_ArtKalkPris ) -- 260 ZtBaseCurrAmount + ,@orp_ArtKalkPrisE = COALESCE( @c_ArtKalkPrisE, [ars].[ArtKalkBer], @orp_ArtKalkPrisE ) -- 230 ZtBaseCurrAmount + ,@orp_ArtKalkPrisO = COALESCE( @c_ArtKalkPrisO, [ars].[ArtKalkBer], @orp_ArtKalkPrisO ) -- 240 ZtBaseCurrAmount + ,@orp_ArtKalkPrisOMtrl = COALESCE( @c_ArtKalkPrisOMtrl, [ars].[ArtKalkBerMtrl], @orp_ArtKalkPrisOMtrl ) -- 250 ZtBaseCurrAmount +-- +-- + from [ars] with (ReadUnCommitted) where + @orp_ForetagKod = [ars].[ForetagKod] -- -1 + and @orp_LagStalle = [ars].[LagStalle] -- 10 + and @orp_ArtNr = [ars].[ArtNr] -- 20 + +end + + +-- ASSIGN from ofp 5 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign orpofp01' +if + @orp_ForetagKod is not NULL -- -1 + and @orp_ArtNr is not NULL -- 10 + and @orp_OffNr is not NULL -- 20 + and @orp_OffRadNr is not NULL -- 25 + and @orp_ValKod is not NULL -- 30 +begin + select + @orp_ArtKalkPrisOFast = COALESCE( @c_ArtKalkPrisOFast, [ofp].[ArtKalkPrisOFast], @orp_ArtKalkPrisOFast ) -- 130 ZtBaseCurrAmount + ,@orp_OrdAntal = COALESCE( @c_OrdAntal, [ofp].[OrdStdAntal], @orp_OrdAntal ) -- 40 ZtQty +-- +-- + from [ofp] with (ReadUnCommitted) where + @orp_ForetagKod = [ofp].[ForetagKod] -- -1 + and @orp_ArtNr = [ofp].[ArtNr] -- 10 + and @orp_OffNr = [ofp].[OffNr] -- 20 + and @orp_OffRadNr = [ofp].[OrdRadNr] -- 25 + and @orp_ValKod = [ofp].[ValKod] -- 30 + +end + + +-- ASSIGN from al 7 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign orpal01' +if + @orp_ForetagKod is not NULL -- -1 + and @orp_artnr is not NULL -- 10 + and @orp_LevNr is not NULL -- 20 + and @orp_inkavt is not NULL -- 30 + and @orp_ArtLevPrior is not NULL -- 40 +begin + select + @orp_ArtBeskr = COALESCE( @c_ArtBeskr, [al].[ArtBeskr], @orp_ArtBeskr ) -- 120 ztstring + ,@orp_ArtNrLev = COALESCE( @c_ArtNrLev, [al].[ArtNrLev], @orp_ArtNrLev ) -- 115 ztstring + ,@orp_levsartbeskr = COALESCE( @c_levsartbeskr, [al].[levsartbeskr], @orp_levsartbeskr ) -- 110 ztString +-- +-- + from [al] with (ReadUnCommitted) where + @orp_ForetagKod = [al].[ForetagKod] -- -1 + and @orp_artnr = [al].[artnr] -- 10 + and @orp_LevNr = [al].[FtgNr] -- 20 + and @orp_inkavt = [al].[inkavt] -- 30 + and @orp_ArtLevPrior = [al].[ArtLevPrior] -- 40 + +end + + +-- ASSIGN from sr 99 + +select @c_Logg_Exec_Time_String=@c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre assign OrpSr01' +if + @orp_ForetagKod is not NULL -- -1 + and @orp_KonfigArtNr is not NULL -- 10 + and @orp_ArtNr is not NULL -- 20 + and @orp_SrDummyUniqueId is not NULL -- 30 +begin + select + @orp_ArtikelVariant = COALESCE( @c_ArtikelVariant, [sr].[ArtikelVariant], @orp_ArtikelVariant ) -- 130 ztString + ,@orp_BAntalAvi = COALESCE( @c_BAntalAvi, [sr].[BAntalAvi], @orp_BAntalAvi ) -- 200 ztFloat + ,@orp_PackageItemQty2Det = COALESCE( @c_PackageItemQty2Det, [sr].[PackageItemQty2Det], @orp_PackageItemQty2Det ) -- 150 ztBoolean +-- +-- + from [sr] with (ReadUnCommitted) where + @orp_ForetagKod = [sr].[ForetagKod] -- -1 + and @orp_KonfigArtNr = [sr].[ArtNr] -- 10 + and @orp_ArtNr = [sr].[BArtnrStrukt] -- 20 + and @orp_SrDummyUniqueId = [sr].[SrDummyUniqueId] -- 30 + +end + +-- Order row (orp) automatically created from a manual entered Picked order detail (oru) +if @orp_AutoCreated = '1' +begin + if @orp_OffNr is not NULL and + @orp_OffRadNr is NULL + begin + SET @orp_OffNr = NULL + end +end + + +if @orp_OrpStrPrisBer is NULL begin -- L=05 + select @orp_OrpStrPrisBer=OrpStrPrisBer from sy1 with (ReadUnCommitted) where ForetagKod = @orp_ForetagKod +end + +if @orp_KodLagerOmBokning is NULL begin -- L=06 + select @orp_KodLagerOmBokning=KodLagerOmBokning from sy1 with (ReadUnCommitted) where ForetagKod = @orp_ForetagKod +end + +if @orp_ValKod is NULL begin -- L=07 + select @orp_ValKod=ValKod from sy1 with (ReadUnCommitted) where ForetagKod = @orp_ForetagKod +end + +if @orp_InValuta is NULL begin -- L=09 + select @orp_InValuta=ValKod from sy1 with (ReadUnCommitted) where ForetagKod = @orp_ForetagKod +end + +if ISNULL(@orp_ValKurs,0) = 0 begin -- L=14 + select @orp_ValKurs=ValKurs from xx with (ReadUnCommitted) where ForetagKod = @orp_ForetagKod and ValKod = @orp_ValKod +end + +if ISNULL( @orp_InValKurs, 0 ) = 0 and @orp_InValuta is not null begin -- L=24 + select @orp_InValKurs=ValKurs from xx with (ReadUnCommitted) where ForetagKod = @orp_ForetagKod and ValKod = @orp_InValuta +end + +if ISNULL(@orp_InValKurs,0) = 0 begin -- L=34 + select @orp_InValKurs=ValKurs from xx with (ReadUnCommitted) where ForetagKod = @orp_ForetagKod and ValKod = @orp_ValKod +end + +declare + @w_Vb_Pris money, + @w_PrisEnlListaInklMoms money, + @w_FPrisInternt money, + @w_VolymRabatt DECIMAL(8,3), + @w_KundRabatt DECIMAL(8,3), + @w_Rabatt1 DECIMAL(8,3), + @w_Rabatt2 DECIMAL(8,3), + @w_Rabatt3 DECIMAL(8,3), + @w_PrisLista smallint, + @w_ArtCirkaPris money, + @w_FsgArtOmvFaktor float, + @w_FsgPrisPer float, + @w_InValuta varchar(3), + @w_InValKurs DECIMAL(18,8), + @w_VbKalkPris money, + @w_PrisTypP smallint, + @w_LevNr nvarchar(20), + @w_Vb_InPris JEEVES_PurPrice, + @w_BestInPris JEEVES_PurPrice, + @w_ArtOmvFaktor ZtPurQty2Stock, + @w_StafflingsKod Jeeves_Boolean, + @w_OrdvRabKod smallint, + @w_NettoEjRabKod Jeeves_Boolean, + @w_LevRabattProc1 DECIMAL(18,8), + @w_InkAvt int, + @w_ArtLevPrior smallint, + @InkPrisPer DECIMAL(16,8), + @InkArtOmvFaktor DECIMAL(16,8), + @StockQty2SuppQty DECIMAL(16,8), + @In_Pris_OutPut JEEVES_PurPrice, + @KundEjRabKod_OutPut Jeeves_Boolean, + @LevRabatt2 float, + @LevRabatt3 float, + @PrisTyp_Output smallint, + @Fr_FtgNamn varchar(60), + @sy1_kpb_OutPut Jeeves_Boolean, + @sy1_PrislistaStaffling smallint, + @ar_ArtRabKlass int, + @ar_AntDec int, + @ar_EnhetsKod varchar(16), + @ar_LevNr varchar(20), + @ar_InkAvt int, + @ar_ArtLevPrior smallint, + @ar_AutoFrislappas JEEVES_Boolean, + @ar_ArtProdKonto JEEVES_StrVarChar8, + @ArtHuvudAvt JEEVES_Boolean, + @kus_RabKlass int, + @kus_PrisListaKundSpec smallint, + @kus_TradeKalkMarkup float, + @kus_TradeFsgMarkup float, + @kus_KundPrisInklMoms Jeeves_Boolean, + @kus_KundKategoriKod smallint, + @oh_KundRabattKod0 Jeeves_Boolean, + @oh_KundRabattKod1 Jeeves_Boolean, + @oh_KundRabattKod2 Jeeves_Boolean, + @oh_LandsKod varchar(10), + @oh_LevSattKod smallint, + @oh_PersSign varchar(30), + @sy1_TradingAtOrder Jeeves_Boolean, + @sy1_PrisListaInklMoms char(1), + @jvss_SALES048 smallint, + @jvss_SALES170 Jeeves_Boolean, + @jvss_SALES190 smallint, + @Urk_Date datetime, + @RedovisnAr smallint, + @Period smallint, + @w_orp_OrdTyp smallint, + + @x2f_TransportorsKod nvarchar(20), + @x2f_KalenderNr smallint, + @x2f_InternLedTid smallint, + @Svar_FastLevDag varchar(10), + @Svar_BerednDag varchar(10), + + @xb_KostStalleKod JEEVES_StrVarChar8, + @xb_KostBar JEEVES_StrVarChar8, + @xb_K4 JEEVES_StrVarChar8, + @xb_K5 JEEVES_StrVarChar8, + @xb_K6 JEEVES_StrVarChar8, + @xb_K7 JEEVES_StrVarChar8, + + @x6_CodeFixedDeparture JEEVES_Boolean, + @xb_CodeFixedDeparture JEEVES_Boolean, + @CodeFixedDeparture JEEVES_Boolean, + @new_CodeFixedDeparture JEEVES_Boolean, + @new_OrdBerLevDat datetime, + @new_OrdBerednDat datetime, + @new_OrdBerLevTid datetime, + @new_OrdLevNr smallint, + @DepartureDate Jeeves_StrVarChar10, + @DepartureTime Jeeves_StrVarChar10, + @DepartureUniqueId smallint, + + @arpk_KostStalleKodIntFsg JEEVES_StrVarChar8 + +select @jvss_SALES048 = dbo.Jeeves_FN_GetParam( @orp_ForetagKod, 'SALES048', 'N', '0' ) +if @jvss_SALES048 is NULL or @jvss_SALES048 < 0 or @jvss_SALES048 > 3 select @jvss_SALES048 = 0 + +select @jvss_SALES170 = dbo.Jeeves_FN_GetParam( @orp_ForetagKod, 'SALES170', 'B', '0' ) +if @jvss_SALES170 is NULL select @jvss_SALES170 = '0' + +select @jvss_SALES190 = dbo.Jeeves_FN_GetParam( @orp_ForetagKod, 'SALES190', 'N', '0' ) +if @jvss_SALES190 is NULL or @jvss_SALES190 < 0 or @jvss_SALES190 > 3 select @jvss_SALES190 = 0 + + execute @dbc = CalcPeriod + @orp_OrdDatum, + @dbp, + @RedovisnAr OUTPUT, + @Period OUTPUT, + @Urk_Date OUTPUT, + @orp_ForetagKod + set @dbe = @@Error; + if @dbe <> 0 or @dbc <> 0 print @Procedure_Name + '; Error calling procedure CalcPeriod'; + +select + @ArtHuvudAvt = '0' + +select + @ar_ArtRabKlass = ar.ArtRabKlass, + @ar_AntDec = ar.AntDec, + @ar_EnhetsKod = ar.EnhetsKod, + @ar_LevNr = ar.LevNr, + @ar_InkAvt = ar.InkAvt, + @ar_ArtLevPrior = ar.ArtLevPrior, + @ar_AutoFrislappas = ar.AutoFrislappas, + @ar_ArtProdKonto = ar.ArtProdKonto + from ar with (ReadUnCommitted) where ArtNr = @orp_ArtNr and ForetagKod = @orp_ForetagKod + +select + @sy1_PrislistaStaffling = sy1.PrislistaStaffling, + @sy1_TradingAtOrder = sy1.TradingAtOrder, + @sy1_PrisListaInklMoms = sy1.PrisListaInklMoms, + @kus_RabKlass = kus.RabKlass, + @kus_KundKategoriKod = kus.KundKategoriKod, + @kus_PrisListaKundSpec = kus.PrisListaKundSpec, + @kus_KundPrisInklMoms = kus.KundPrisInklMoms, + @kus_TradeKalkMarkup = ISNULL(kus.TradeKalkMarkup,sy1.TradeKalkMarkup), + @kus_TradeFsgMarkup = ISNULL(kus.TradeFsgMarkup,sy1.TradeFsgMarkup) + from kus with (ReadUnCommitted), sy1 with (ReadUnCommitted) where kus.FtgNr = @orp_FtgNr and kus.ForetagKod = @orp_ForetagKod and sy1.ForetagKod = @orp_ForetagKod + +if @jvss_SALES048=1 or @jvss_SALES048=3 or @jvss_SALES190=1 or @jvss_SALES190=3 +begin + select + @xb_KostStalleKod = KostStalleKod, + @xb_KostBar = KostBar, + @xb_K4 = K4, + @xb_K5 = K5, + @xb_K6 = K6, + @xb_K7 = K7 + from xb with (ReadUnCommitted) where + ForetagKod = @orp_ForetagKod and + LagStalle = @orp_LagStalle + if @jvss_SALES190=3 + begin + select + @arpk_KostStalleKodIntFsg = KostStalleKodIntFsg + from arpk with (ReadUnCommitted) where + ForetagKod = @orp_ForetagKod and + ArtProdKonto = @ar_ArtProdKonto + end + if @jvss_SALES048=1 + begin + if @jvss_SALES190<>1 and @jvss_SALES190<>3 + begin + if @orp_KostStalleKod is NULL SET @orp_KostStalleKod = @xb_KostStalleKod + end + if @orp_KostBar is NULL SET @orp_KostBar = @xb_KostBar + if @orp_K4 is NULL SET @orp_K4 = @xb_K4 + if @orp_K5 is NULL SET @orp_K5 = @xb_K5 + if @orp_K6 is NULL SET @orp_K6 = @xb_K6 + if @orp_K7 is NULL SET @orp_K7 = @xb_K7 + end + if @jvss_SALES048=3 + begin + if @jvss_SALES190<>1 and @jvss_SALES190<>3 + begin + if @orp_KostStalleKod is NULL and @xb_KostStalleKod is not NULL SET @orp_KostStalleKod = @xb_KostStalleKod + end + if @orp_KostBar is NULL and @xb_KostBar is not NULL SET @orp_KostBar = @xb_KostBar + if @orp_K4 is NULL and @xb_K4 is not NULL SET @orp_K4 = @xb_K4 + if @orp_K5 is NULL and @xb_K5 is not NULL SET @orp_K5 = @xb_K5 + if @orp_K6 is NULL and @xb_K6 is not NULL SET @orp_K6 = @xb_K6 + if @orp_K7 is NULL and @xb_K7 is not NULL SET @orp_K7 = @xb_K7 + end + if @jvss_SALES190=1 + begin + if @orp_KostStalleKodIntFsg is NULL SET @orp_KostStalleKodIntFsg = @xb_KostStalleKod + end + if @jvss_SALES190=3 + begin + if @orp_KostStalleKodIntFsg is NULL SET @orp_KostStalleKodIntFsg = @arpk_KostStalleKodIntFsg + end +end + +-- +-- + +if @c_LevNr is NULL and @ar_LevNr is not NULL begin + select + @orp_LevNr = @ar_LevNr, + @orp_InkAvt = @ar_InkAvt, + @orp_ArtLevPrior = @ar_ArtLevPrior, + @ArtHuvudAvt = '1' +end + +if @ar_AutoFrislappas = '1' begin + select @orp_AutoFrislappas = @ar_AutoFrislappas +end + +if @orp_LagerFlyttning = '0' +begin + if @orp_AnskaffningMotBehov = '1' + begin + select @orp_Bestallas = '1' + end +end +else +begin + if @c_Bestallas is NULL select @orp_Bestallas = '1' +end + +select + @orp_OrdRadSt = coalesce( @orp_OrdRadSt, oh.OrdStat ), + @oh_KundRabattKod0 = oh.KundRabattKod0, + @oh_KundRabattKod1 = KundRabattKod1, + @oh_KundRabattKod2 = KundRabattKod2, + @oh_LandsKod = LandsKod, + @oh_LevSattKod = LevSattKod, + @oh_PersSign = ISNULL(PersSign,@c_PersSign) + from oh with (ReadUnCommitted) where OrderNr = @orp_OrderNr and ForetagKod = @orp_ForetagKod + + +execute @x = Jeeves_orp_produkt_pris + @c_Foretagkod = @orp_ForetagKod, + @ArtNr = @orp_ArtNr, + @OrdAntal = @orp_OrdAntal, + @ValKurs = @orp_ValKurs, + @ValKod = @orp_ValKod, + @PrisLista = @orp_PrisLista, + @OrdDatum = @orp_OrdDatum, + @ArtProdKlass = @orp_ArtProdKlass, + @OffNr = @orp_OffNr, + @OffRadNr = @orp_OffRadNr, + @ArtRabKlass = @ar_ArtRabKlass, + @RabKlass = @kus_RabKlass, + @OrdvRabKod = @orp_OrdvRabKod, + @ArtKundRabKod = @orp_ArtKundRabKod, + @KundRabattKod0 = @oh_KundRabattKod0, + @KundRabattKod1 = @oh_KundRabattKod1, + @KundRabattKod2 = @oh_KundRabattKod2, + @KundRabatt = @orp_KundRabatt, + @In_InkAvt = @orp_InkAvt, + @In_LevNr = @orp_LevNr, + @In_ArtLevPrior = @orp_ArtLevPrior, + @In_ArtHuvudAvt = @ArtHuvudAvt,--@orp_ArtHuvudAvt, + @In_TradeKalkMarkup = @kus_TradeKalkMarkup, + @In_TradeFsgMarkup = @kus_TradeFsgMarkup, + @In_Vb_Inpris = @orp_Vb_InPris, + @in_FtgNr = @orp_FtgNr, + @in_PrisListaStaffling = @sy1_PrisListaStaffling, + @in_OrdBerLevDat = @orp_OrdBerLevDat, + @in_PrisListaKundSpec = @kus_PrisListaKundSpec, + @in_AltEnhetKod = @orp_AltEnhetKod, + @in_SALES170 = @jvss_SALES170, + @in_SALES190 = @jvss_SALES190, + @In_KundKategoriKod = @kus_KundKategoriKod, + @In_RedovisnAr = @RedovisnAr, + @In_KostStalleKod = @orp_KostStalleKod, + @In_KostStalleKodIntFsg = @orp_KostStalleKodIntFsg, + @In_LagStalle = @orp_LagStalle, + @Logg = NULL, + @O_InValuta = @w_InValuta output, + @O_Svar_Pris_Valuta = @w_Vb_Pris output, + @O_Svar_In_ValutaKurs = @w_InValKurs output, + @O_Svar_VolymRabatt = @w_VolymRabatt output, + @O_Svar_KundRabatt = @w_KundRabatt output, + @O_Svar_Rabatt1 = @w_Rabatt1 output, + @O_Svar_Rabatt2 = @w_Rabatt2 output, + @O_Svar_Rabatt3 = @w_Rabatt3 output, + @O_Svar_Kalk_Valuta = @w_VbKalkPris output, --VbKalkPris + --@PrisTyp_OutPut = @PrisTyp_OutPut output, + @O_Svar_PrisTyp = @w_PrisTypP output, + @O_ar_LevNr = @w_LevNr output, + @O_ar_Vb_InPris = @w_Vb_InPris output, + @O_al_BestInPris = @w_BestInPris output, + @O_al_ArtOmvFaktor = @w_ArtOmvFaktor output, + @O_StafflingsKod = @w_StafflingsKod output, + @O_OrdvRabKod = @w_OrdvRabKod output, + @O_NettoEjRabKod = @w_NettoEjRabKod output, + @O_sy1_kpb = @sy1_kpb_OutPut output, + @O_Svar_PrisAndrDatum = @orp_PrisAndrDatum output, + @O_Svar_In_Pris = @w_BestInPris output, + @O_Svar_OrdTyp = @w_orp_OrdTyp output, + --@O_Svar_OrdBerLevDat = @orp_OrdBerLevDat output, + @O_Svar_LevRabatt1 = @w_LevRabattProc1 output, + @O_Svar_LevRabatt2 = @LevRabatt2 output, + @O_Svar_LevRabatt3 = @LevRabatt3 output, + @O_Svar_InkPrisPer = @InkPrisPer output, + @O_Svar_InkArtOmvFaktor = @InkArtOmvFaktor output, + @O_Svar_ArtOmvFaktor = @w_ArtOmvFaktor output, + @O_Svar_StockQty2SuppQty = @StockQty2SuppQty output, + @O_Fr_FtgNamn = @Fr_FtgNamn output, + @O_ar_InkAvt = @w_InkAvt output, + @O_ar_ArtLevPrior = @w_ArtLevPrior output, + @O_Svar_KundEjRabKod = @KundEjRabKod_Output output, + @O_Svar_PrisLista = @w_PrisLista output, + @O_Svar_CirkaPris_Valuta = @w_ArtCirkaPris output, + @O_Svar_FsgArtOmvFaktor = @w_FsgArtOmvFaktor output, + @O_Svar_FsgPrisPer = @w_FsgPrisPer output, + @O_Svar_PrisEnlListaInklMoms = @w_PrisEnlListaInklMoms output, + @O_Svar_FPrisInternt = @w_FPrisInternt output + +if @c_vb_InPris is not null and @c_vb_InPris <> 0 select @orp_vb_InPris = @c_vb_InPris +if @orp_VbPrisER is NULL select @orp_VbPrisER = @w_Vb_Pris + +if @c_PrisLista is NULL and @w_PrisLista is NULL select @orp_PrisLista = NULL + +if @orp_Vb_Pris is NULL +begin + select @orp_Vb_Pris = @w_Vb_Pris +end +else +begin + if @c_PrisHantTyp is NULL select @orp_PrisHantTyp = 1 -- Manual price + if @c_PrisTypP is NULL select @orp_PrisTypP = 9 -- Manually +end + +if @orp_FPrisInterntEnlRegel is NULL select @orp_FPrisInterntEnlRegel = @w_FPrisInternt +if @orp_FPrisInternt is NULL select @orp_FPrisInternt = @w_FPrisInternt +if @orp_FPrisInternt is not NULL select @orp_PrisHantTypIntFsg = 0 + +if @orp_VolymRabatt is NULL +begin + select @orp_VolymRabatt = @w_VolymRabatt +end +else +begin + if @orp_VolymRabatt <> @w_VolymRabatt + begin + if @c_PrisHantTyp is NULL and @orp_PrisHantTyp = 0 -- Automatic price + select @orp_PrisHantTyp = 2 -- Manual discount + if @c_PrisHantTyp is NULL and @orp_PrisHantTyp = 1 -- Manual price + select @orp_PrisHantTyp = 3 -- Manual price and discount + end +end + +if @orp_KundRabatt is NULL +begin + select @orp_KundRabatt = @w_KundRabatt +end +else +begin + if @orp_KundRabatt <> @w_KundRabatt + begin + if @c_PrisHantTyp is NULL and @orp_PrisHantTyp = 0 -- Automatic price + select @orp_PrisHantTyp = 2 -- Manual discount + if @c_PrisHantTyp is NULL and @orp_PrisHantTyp = 1 -- Manual price + select @orp_PrisHantTyp = 3 -- Manual price and discount + end +end + +if @orp_Rabatt1 is NULL +begin + select @orp_Rabatt1 = @w_Rabatt1 +end +else +begin + if @orp_Rabatt1 <> @w_Rabatt1 + begin + if @c_PrisHantTyp is NULL and @orp_PrisHantTyp = 0 -- Automatic price + select @orp_PrisHantTyp = 2 -- Manual discount + if @c_PrisHantTyp is NULL and @orp_PrisHantTyp = 1 -- Manual price + select @orp_PrisHantTyp = 3 -- Manual price and discount + end +end + +if @orp_Rabatt2 is NULL +begin + select @orp_Rabatt2 = @w_Rabatt2 +end +else +begin + if @orp_Rabatt2 <> @w_Rabatt2 + begin + if @c_PrisHantTyp is NULL and @orp_PrisHantTyp = 0 -- Automatic price + select @orp_PrisHantTyp = 2 -- Manual discount + if @c_PrisHantTyp is NULL and @orp_PrisHantTyp = 1 -- Manual price + select @orp_PrisHantTyp = 3 -- Manual price and discount + end +end + +if @orp_Rabatt3 is NULL +begin + select @orp_Rabatt3 = @w_Rabatt3 +end +else +begin + if @orp_Rabatt3 <> @w_Rabatt3 + begin + if @c_PrisHantTyp is NULL and @orp_PrisHantTyp = 0 -- Automatic price + select @orp_PrisHantTyp = 2 -- Manual discount + if @c_PrisHantTyp is NULL and @orp_PrisHantTyp = 1 -- Manual price + select @orp_PrisHantTyp = 3 -- Manual price and discount + end +end + +if @orp_PrisLista is NULL select @orp_PrisLista = @w_PrisLista +if @c_PrisLista is NULL and @w_PrisLista is not NULL select @orp_PrisLista = @w_PrisLista + +if @orp_ArtCirkaPris is NULL select @orp_ArtCirkaPris = @w_ArtCirkaPris +if @c_ArtCirkaPris is NULL and @w_ArtCirkaPris is not NULL select @orp_ArtCirkaPris = @w_ArtCirkaPris +if @orp_FsgArtOmvFaktor is NULL select @orp_FsgArtOmvFaktor = @w_FsgArtOmvFaktor +if @c_FsgArtOmvFaktor is NULL and @w_FsgArtOmvFaktor is not NULL select @orp_FsgArtOmvFaktor = @w_FsgArtOmvFaktor +if @orp_FsgPrisPer is NULL select @orp_FsgPrisPer = @w_FsgPrisPer +if @c_FsgPrisPer is NULL and @w_FsgPrisPer is not NULL select @orp_FsgPrisPer = @w_FsgPrisPer +if @c_InValuta is NULL and @w_InValuta is not NULL select @orp_InValuta = @w_InValuta +if @c_InValKurs is NULL and @w_InValKurs is not NULL select @orp_InValKurs = @w_InValKurs +if @orp_VbKalkPris is NULL select @orp_VbKalkPris = @w_VbKalkPris +if @orp_PrisTypP is NULL select @orp_PrisTypP = @w_PrisTypP +if @orp_Vb_InPris is NULL select @orp_Vb_InPris = @w_Vb_InPris +if @orp_BestInPris is NULL select @orp_BestInPris = @w_BestInPris +if @orp_ArtOmvFaktor is NULL select @orp_ArtOmvFaktor = @w_ArtOmvFaktor +if @orp_StafflingsKod is NULL select @orp_StafflingsKod = @w_StafflingsKod +if @orp_OrdvRabKod is NULL select @orp_OrdvRabKod = @w_OrdvRabKod +if @c_OrdvRabKod is NULL and @w_OrdvRabKod is not NULL select @orp_OrdvRabKod = @w_OrdvRabKod +if @orp_NettoEjRabKod is NULL select @orp_NettoEjRabKod = @w_NettoEjRabKod +if @orp_LevRabattProc1 is NULL select @orp_LevRabattProc1 = @w_LevRabattProc1 + +if @c_LevNr is NULL begin + + select + @orp_LevNr = @w_LevNr, + @orp_InkAvt = @w_InkAvt, + @orp_ArtLevPrior = @w_ArtLevPrior + + select + @orp_ArtNrLev = ArtNrLev, + @orp_LevsArtBeskr = LevsArtBeskr + from al with (ReadUnCommitted) where + al.ForetagKod = @orp_ForetagKod and + al.ArtNr = @orp_ArtNr and + al.InkAvt = @orp_InkAvt and + al.ArtLevPrior = @orp_ArtLevPrior and + al.FtgNr = @orp_LevNr + +end +else +begin + + if @orp_LevNr is NULL select @orp_LevNr = @w_LevNr + if @orp_InkAvt is NULL select @orp_InkAvt = @w_InkAvt + if @orp_ArtLevPrior is NULL select @orp_ArtLevPrior = @w_ArtLevPrior + +end + +if @orp_EnhetsKod is NULL select @orp_EnhetsKod = @ar_EnhetsKod +if @orp_EnhetsKod is NULL select @orp_EnhetsKod = [ar].[EnhetsKod] from [ar] where [ar].[ForetagKod] = @orp_ForetagKod and [ar].[ArtNr] = @orp_ArtNr +if @orp_AntDec is NULL select @orp_AntDec = @ar_AntDec +if @orp_AntDec is NULL select @orp_AntDec = [ar].[AntDec] from [ar] where [ar].[ForetagKod] = @orp_ForetagKod and [ar].[ArtNr] = @orp_ArtNr +if @sy1_TradingAtOrder='1' select @orp_OrdTyp=@w_orp_OrdTyp +if @orp_OrdBerLevDat is NULL select @orp_OrdBerLevDat = convert( varchar(8), @LocalDateAndTime, 112 ) +if @orp_OrdBerLevDat is NULL select @orp_OrdBerLevDat = convert( varchar(8), @LocalDateAndTime, 112 ) +if @orp_OrdAntal is NULL and ISNULL(@orp_OrdLevAntal,0) <> 0 select @orp_OrdAntal = ISNULL(@orp_OrdLevAntal,0) +if @orp_OrdAntal is NULL and ISNULL(@orp_OrdRestAnt,0) <> 0 select @orp_OrdAntal = ISNULL(@orp_OrdRestAnt,0) +if @orp_OrdAntal is NULL select @orp_OrdAntal = 1 +if @orp_OrdRestAnt is NULL select @orp_OrdRestAnt = @orp_OrdAntal +if @orp_OrdLevAntal is NULL select @orp_OrdLevAntal = @orp_OrdAntal - @orp_OrdRestAnt + +--Handle NULL RestAnt and LevAntal for AltEnh of orp aswell. Changed 191121 by Marcus Lindvall +if @orp_OrdRestAntAltEnh is NULL select @orp_OrdRestAntAltEnh = @orp_OrdAntalAltEnh +if @orp_OrdLevAntalAltEnh is NULL select @orp_OrdLevAntalAltEnh = @orp_OrdAntalAltEnh - @orp_OrdRestAntAltEnh + +if @orp_OrdRadNrUrspr is NULL select @orp_OrdRadNrUrspr = @orp_OrdRadNr +if @orp_OrdRadNrStrPosUrspr is NULL select @orp_OrdRadNrStrPosUrspr = @orp_OrdRadNrStrPos +if @orp_Vb_Pris <> 0 and coalesce( @orp_Vb_PrisInklMoms, 0 ) = 0 begin + if ISNULL(@sy1_PrisListaInklMoms,'0') NOT in ('1','3') and ISNULL(@kus_KundPrisInklMoms,'0') = '0' begin + select @orp_Vb_PrisInklMoms = ROUND( @orp_Vb_Pris * ( ( 100.0 + x1.MomsSats ) / 100.0 ), coalesce( sy1.CurrencyDecimals, 0 ) ) + from x1 with (ReadUnCommitted), sy1 with (ReadUnCommitted) where + sy1.ForetagKod = @orp_ForetagKod and + x1.ForetagKod = @orp_ForetagKod and + x1.MomsKod = coalesce( @orp_MomsKod, 0 ) + if coalesce( @orp_Vb_PrisInklMoms, 0 ) = 0 + select @orp_Vb_PrisInklMoms = @orp_Vb_Pris + end + else + begin + select @orp_Vb_PrisInklMoms = @orp_Vb_Pris + select @orp_Vb_Pris = ROUND( @orp_Vb_PrisInklMoms / ( ( 100.0 + x1.MomsSats ) / 100.0 ), coalesce( sy1.CurrencyDecimals, 0 ) ) + from x1 with (ReadUnCommitted), sy1 with (ReadUnCommitted) where + sy1.ForetagKod = @orp_ForetagKod and + x1.ForetagKod = @orp_ForetagKod and + x1.MomsKod = coalesce( @orp_MomsKod, 0 ) + if coalesce( @orp_Vb_Pris, 0 ) = 0 + select @orp_Vb_Pris = @orp_Vb_PrisInklMoms + end +end +if coalesce( @orp_VbOrdRadSum, 0 ) = 0 begin + select @orp_VbOrdRadSum = ROUND((( ( @orp_Vb_Pris * @orp_OrdAntal * @orp_FsgArtOmvFaktor) / @orp_FsgPrisPer ) + coalesce( @orp_Vb_PrisFast, 0 ) ) * + (( 100.0 - coalesce( @orp_OrdRabatt, 0 ) ) / 100.0 )* + (( 100.0 - coalesce( @orp_VolymRabatt, 0 ) ) / 100.0 )* + (( 100.0 - coalesce( @orp_KundRabatt, 0 ) ) / 100.0 )* + (( 100.0 - coalesce( @orp_Rabatt1, 0 ) ) / 100.0 )* + (( 100.0 - coalesce( @orp_Rabatt2, 0 ) ) / 100.0 )* + (( 100.0 - coalesce( @orp_Rabatt3, 0 ) ) / 100.0 ) + ,coalesce( sy1.CurrencyDecimals, 0 ) ) + from sy1 with (ReadUnCommitted) where + sy1.ForetagKod = @orp_ForetagKod +end +if coalesce( @orp_Vb_RadVardeInklMoms, 0 ) = 0 begin + select @orp_Vb_RadVardeInklMoms = ROUND((( ( @orp_Vb_PrisInklMoms * @orp_OrdAntal * @orp_FsgArtOmvFaktor) / @orp_FsgPrisPer ) + coalesce( @orp_Vb_PrisFast, 0 ) ) * + (( 100.0 - coalesce( @orp_OrdRabatt, 0 ) ) / 100.0 )* + (( 100.0 - coalesce( @orp_VolymRabatt, 0 ) ) / 100.0 )* + (( 100.0 - coalesce( @orp_KundRabatt, 0 ) ) / 100.0 )* + (( 100.0 - coalesce( @orp_Rabatt1, 0 ) ) / 100.0 )* + (( 100.0 - coalesce( @orp_Rabatt2, 0 ) ) / 100.0 )* + (( 100.0 - coalesce( @orp_Rabatt3, 0 ) ) / 100.0 ) + ,coalesce( sy1.CurrencyDecimals, 0 ) ) + from sy1 with (ReadUnCommitted) where + sy1.ForetagKod = @orp_ForetagKod +end + +declare + @x6_RestBehKod smallint, + @ar_RestBehKod smallint, + @sy1_RestBehKod smallint, + @Set_Ar_RestBehKod smallint, + @sy1_ArtBeskr_2_Orp JEEVES_Boolean, + @jvss_SALES273 JEEVES_Boolean, + @ar_ArtBeskr JEEVES_StrVarChar64, + @ar_ArtBeskr2 JEEVES_StrVarChar256, + @arb_ArtBeskr JEEVES_StrVarChar64, + @arb_ArtBeskr2 JEEVES_StrVarChar256 + +select + @jvss_SALES273 = jvss.JeevesParamBoolean + from jvss with (ReadUnCommitted) where + jvss.ForetagKod = @orp_ForetagKod and + jvss.JeevesParamName = 'SALES273' +if @@RowCount=0 or @jvss_SALES273 is NULL select @jvss_SALES273 = '0' + +select + @sy1_RestBehKod = RestBehKod, + @sy1_ArtBeskr_2_Orp = ArtBeskr_2_Orp + from sy1 with (ReadUnCommitted) where ForetagKod = @orp_ForetagKod + +select + @x6_RestBehKod = RestBehKod, + @x6_CodeFixedDeparture = ISNULL(CodeFixedDeparture,'0') + from x6 with (ReadUnCommitted) where OrdTyp = @orp_OrdTyp and ForetagKod = @orp_ForetagKod + +select + @xb_CodeFixedDeparture = ISNULL(CodeFixedDeparture,'0') + from xb with (ReadUnCommitted) where LagStalle = @orp_LagStalle and ForetagKod = @orp_ForetagKod + +select + @ar_RestBehKod = RestBehKod + from ar with (ReadUnCommitted) where ArtNr = @orp_ArtNr and ForetagKod = @orp_ForetagKod + +select @Set_Ar_RestBehKod = 0 +if (@ar_RestBehKod is not NULL) and (@ar_RestBehKod <> @orp_RestBehKod) +begin + + select @Set_Ar_RestBehKod = 1 + + if @orp_RestBehKod is not NULL + begin + if ((@orp_RestBehKod=1) and (@ar_RestBehKod<1)) OR ((@orp_RestBehKod=2) and (@ar_RestBehKod<2)) + begin + select @Set_Ar_RestBehKod = 0 + end + end + + if @x6_RestBehKod is not NULL + begin + if ((@x6_RestBehKod=1) and (@ar_RestBehKod<1)) OR ((@x6_RestBehKod=2) and (@ar_RestBehKod<2)) + begin + select @Set_Ar_RestBehKod = 0 + end + end + + if @Set_Ar_RestBehKod = 1 + begin + select @orp_RestBehKod = @ar_RestBehKod + end + +end + +if ISNULL(@sy1_ArtBeskr_2_Orp,'0') = '1' +begin + if @orp_ArtBeskr is NULL or @orp_OrdArtBeskr is NULL + begin + select + @ar_ArtBeskr = ArtBeskr, + @ar_ArtBeskr2 = ArtBeskr2 + from ar with (ReadUnCommitted) where ArtNr = @orp_ArtNr and ForetagKod = @orp_ForetagKod + select + @arb_ArtBeskr = ArtBeskr, + @arb_ArtBeskr2 = ArtBeskr2 + from arb with (ReadUnCommitted) where ArtNr = @orp_ArtNr and SprakKod = @orp_SprakKod and ForetagKod = @orp_ForetagKod + if @orp_ArtBeskr is NULL + begin + select @orp_ArtBeskr = @ar_ArtBeskr + if @arb_ArtBeskr is NOT NULL and @jvss_SALES273 = '1' select @orp_ArtBeskr = @arb_ArtBeskr + end + if @orp_OrdArtBeskr is NULL + begin + select @orp_OrdArtBeskr = @ar_ArtBeskr2 + if @arb_ArtBeskr2 is NOT NULL and @jvss_SALES273 = '1' select @orp_OrdArtBeskr = @arb_ArtBeskr2 + end + end +end + +If @c_Integer_NULL is not NULL Begin + if @orp_AddToMO = @c_Integer_NULL set @orp_AddToMO = NULL; + if @orp_AddToPO = @c_Integer_NULL set @orp_AddToPO = NULL; + if @orp_Aktiv = @c_Integer_NULL set @orp_Aktiv = NULL; + if @orp_AltOpPrior = @c_Integer_NULL set @orp_AltOpPrior = NULL; + if @orp_AntDec = @c_Integer_NULL set @orp_AntDec = NULL; + if @orp_AoNr = @c_Integer_NULL set @orp_AoNr = NULL; + if @orp_AoPos = @c_Integer_NULL set @orp_AoPos = NULL; + if @orp_ArkVersion = @c_Integer_NULL set @orp_ArkVersion = NULL; + if @orp_ArtKalkPer = @c_Integer_NULL set @orp_ArtKalkPer = NULL; + if @orp_ArtKod = @c_Integer_NULL set @orp_ArtKod = NULL; + if @orp_ArtLevPrior = @c_Integer_NULL set @orp_ArtLevPrior = NULL; + if @orp_AtagandeGrad = @c_Integer_NULL set @orp_AtagandeGrad = NULL; + if @orp_ATPQueryId = @c_Integer_NULL set @orp_ATPQueryId = NULL; + if @orp_AutDelivOU_MO = @c_Integer_NULL set @orp_AutDelivOU_MO = NULL; + if @orp_AutoOrderLine = @c_Integer_NULL set @orp_AutoOrderLine = NULL; + if @orp_AutStockBookingRule = @c_Integer_NULL set @orp_AutStockBookingRule = NULL; + if @orp_BestNr = @c_Integer_NULL set @orp_BestNr = NULL; + if @orp_BestRadNr = @c_Integer_NULL set @orp_BestRadNr = NULL; + if @orp_BestRestNr = @c_Integer_NULL set @orp_BestRestNr = NULL; + if @orp_BristKontrolleradStatus = @c_Integer_NULL set @orp_BristKontrolleradStatus = NULL; + if @orp_BristStatusLagerUtlev = @c_Integer_NULL set @orp_BristStatusLagerUtlev = NULL; + if @orp_BristStatusPlaneringBegLevDat = @c_Integer_NULL set @orp_BristStatusPlaneringBegLevDat = NULL; + if @orp_BristStatusPlaneringBerLevDat = @c_Integer_NULL set @orp_BristStatusPlaneringBerLevDat = NULL; + if @orp_CnfgrUniqueId = @c_Integer_NULL set @orp_CnfgrUniqueId = NULL; + if @orp_DelBokningTillaten = @c_Integer_NULL set @orp_DelBokningTillaten = NULL; + if @orp_DelivToPOBackorderNo = @c_Integer_NULL set @orp_DelivToPOBackorderNo = NULL; + if @orp_DelivToPOLnNo = @c_Integer_NULL set @orp_DelivToPOLnNo = NULL; + if @orp_DelivToPONo = @c_Integer_NULL set @orp_DelivToPONo = NULL; + if @orp_DelLevTillaten = @c_Integer_NULL set @orp_DelLevTillaten = NULL; + if @orp_DiscountOrderLine = @c_Integer_NULL set @orp_DiscountOrderLine = NULL; + if @orp_ExtOrdRadNr = @c_Integer_NULL set @orp_ExtOrdRadNr = NULL; + if @orp_ExtOrdTyp = @c_Integer_NULL set @orp_ExtOrdTyp = NULL; + if @orp_FaktNr = @c_Integer_NULL set @orp_FaktNr = NULL; + if @orp_FaktNrKorr = @c_Integer_NULL set @orp_FaktNrKorr = NULL; + if @orp_FaktNrOrg = @c_Integer_NULL set @orp_FaktNrOrg = NULL; + if @orp_FfhNr = @c_Integer_NULL set @orp_FfhNr = NULL; + if @orp_FfhRadNr = @c_Integer_NULL set @orp_FfhRadNr = NULL; + if @orp_ForetagKod = @c_Integer_NULL set @orp_ForetagKod = NULL; + if @orp_ICTArtKalkPer = @c_Integer_NULL set @orp_ICTArtKalkPer = NULL; + if @orp_ICTDelivFromBackOrderNo = @c_Integer_NULL set @orp_ICTDelivFromBackOrderNo = NULL; + if @orp_ICTDelivFromOrderNo = @c_Integer_NULL set @orp_ICTDelivFromOrderNo = NULL; + if @orp_ICTDelivFromOrdLnNo = @c_Integer_NULL set @orp_ICTDelivFromOrdLnNo = NULL; + if @orp_ICTDelivFromOrdSubLnNo = @c_Integer_NULL set @orp_ICTDelivFromOrdSubLnNo = NULL; + if @orp_ICTDelivToBackOrderNo = @c_Integer_NULL set @orp_ICTDelivToBackOrderNo = NULL; + if @orp_ICTDelivToOrderNo = @c_Integer_NULL set @orp_ICTDelivToOrderNo = NULL; + if @orp_ICTDelivToOrdLnNo = @c_Integer_NULL set @orp_ICTDelivToOrdLnNo = NULL; + if @orp_ICTDelivToOrdSubLnNo = @c_Integer_NULL set @orp_ICTDelivToOrdSubLnNo = NULL; + if @orp_ICTDelivToPOBackorderNo = @c_Integer_NULL set @orp_ICTDelivToPOBackorderNo = NULL; + if @orp_ICTDelivToPOLnNo = @c_Integer_NULL set @orp_ICTDelivToPOLnNo = NULL; + if @orp_ICTDelivToPONo = @c_Integer_NULL set @orp_ICTDelivToPONo = NULL; + if @orp_ICTDispatchMethod = @c_Integer_NULL set @orp_ICTDispatchMethod = NULL; + if @orp_ICTOrdLevNr = @c_Integer_NULL set @orp_ICTOrdLevNr = NULL; + if @orp_ICTOrdLnStatus = @c_Integer_NULL set @orp_ICTOrdLnStatus = NULL; + if @orp_ICTOrdResrvStat = @c_Integer_NULL set @orp_ICTOrdResrvStat = NULL; + if @orp_ICTPriceType = @c_Integer_NULL set @orp_ICTPriceType = NULL; + if @orp_ICTRuleNumber = @c_Integer_NULL set @orp_ICTRuleNumber = NULL; + if @orp_ICTTransportTid = @c_Integer_NULL set @orp_ICTTransportTid = NULL; + if @orp_InkAvt = @c_Integer_NULL set @orp_InkAvt = NULL; + if @orp_IntrnCoNoOrigin = @c_Integer_NULL set @orp_IntrnCoNoOrigin = NULL; + if @orp_IntStatTransTyp = @c_Integer_NULL set @orp_IntStatTransTyp = NULL; + if @orp_kampnr = @c_Integer_NULL set @orp_kampnr = NULL; + if @orp_KopieradFranFaktNr = @c_Integer_NULL set @orp_KopieradFranFaktNr = NULL; + if @orp_KopieradFranOrderNr = @c_Integer_NULL set @orp_KopieradFranOrderNr = NULL; + if @orp_KopieradTillOrderNr = @c_Integer_NULL set @orp_KopieradTillOrderNr = NULL; + if @orp_KorId = @c_Integer_NULL set @orp_KorId = NULL; + if @orp_KundIntOrdRadNr = @c_Integer_NULL set @orp_KundIntOrdRadNr = NULL; + if @orp_KundKategoriKod = @c_Integer_NULL set @orp_KundKategoriKod = NULL; + if @orp_LagerHanteringTyp = @c_Integer_NULL set @orp_LagerHanteringTyp = NULL; + if @orp_LedTid_orp_2_bp_ti = @c_Integer_NULL set @orp_LedTid_orp_2_bp_ti = NULL; + if @orp_LevSattKod = @c_Integer_NULL set @orp_LevSattKod = NULL; + if @orp_MomsKod = @c_Integer_NULL set @orp_MomsKod = NULL; + if @orp_No_Trigger_Exec = @c_Integer_NULL set @orp_No_Trigger_Exec = NULL; + if @orp_OffRadNr = @c_Integer_NULL set @orp_OffRadNr = NULL; + if @orp_OkAttPlockaStatus = @c_Integer_NULL set @orp_OkAttPlockaStatus = NULL; + if @orp_OrdBokningsStatus = @c_Integer_NULL set @orp_OrdBokningsStatus = NULL; + if @orp_OrderKod = @c_Integer_NULL set @orp_OrderKod = NULL; + if @orp_OrderKopplKod = @c_Integer_NULL set @orp_OrderKopplKod = NULL; + if @orp_OrderLineFromOrderB = @c_Integer_NULL set @orp_OrderLineFromOrderB = NULL; + if @orp_OrderNr = @c_Integer_NULL set @orp_OrderNr = NULL; + if @orp_OrderNrKoppl = @c_Integer_NULL set @orp_OrderNrKoppl = NULL; + if @orp_OrderNrKorr = @c_Integer_NULL set @orp_OrderNrKorr = NULL; + if @orp_OrderNrOffert = @c_Integer_NULL set @orp_OrderNrOffert = NULL; + if @orp_OrderNrOrg = @c_Integer_NULL set @orp_OrderNrOrg = NULL; + if @orp_OrderNrServ = @c_Integer_NULL set @orp_OrderNrServ = NULL; + if @orp_OrdFoljesedelsNr = @c_Integer_NULL set @orp_OrdFoljesedelsNr = NULL; + if @orp_OrdFsNr = @c_Integer_NULL set @orp_OrdFsNr = NULL; + if @orp_OrdLevNr = @c_Integer_NULL set @orp_OrdLevNr = NULL; + if @orp_OrdRadNr = @c_Integer_NULL set @orp_OrdRadNr = NULL; + if @orp_OrdRadNrKoppl = @c_Integer_NULL set @orp_OrdRadNrKoppl = NULL; + if @orp_OrdRadNrMall = @c_Integer_NULL set @orp_OrdRadNrMall = NULL; + if @orp_OrdRadNrOffert = @c_Integer_NULL set @orp_OrdRadNrOffert = NULL; + if @orp_OrdRadNrOrg = @c_Integer_NULL set @orp_OrdRadNrOrg = NULL; + if @orp_OrdRadNrServ = @c_Integer_NULL set @orp_OrdRadNrServ = NULL; + if @orp_OrdRadNrStrPos = @c_Integer_NULL set @orp_OrdRadNrStrPos = NULL; + if @orp_OrdRadNrStrPosOffert = @c_Integer_NULL set @orp_OrdRadNrStrPosOffert = NULL; + if @orp_OrdRadNrStrPosOrg = @c_Integer_NULL set @orp_OrdRadNrStrPosOrg = NULL; + if @orp_OrdRadNrStrPosUrspr = @c_Integer_NULL set @orp_OrdRadNrStrPosUrspr = NULL; + if @orp_OrdRadNrUrspr = @c_Integer_NULL set @orp_OrdRadNrUrspr = NULL; + if @orp_OrdRadSplitKod = @c_Integer_NULL set @orp_OrdRadSplitKod = NULL; + if @orp_OrdRadSt = @c_Integer_NULL set @orp_OrdRadSt = NULL; + if @orp_OrdRestNr = @c_Integer_NULL set @orp_OrdRestNr = NULL; + if @orp_OrdRestNrOrg = @c_Integer_NULL set @orp_OrdRestNrOrg = NULL; + if @orp_OrdTyp = @c_Integer_NULL set @orp_OrdTyp = NULL; + if @orp_OrdvRabKod = @c_Integer_NULL set @orp_OrdvRabKod = NULL; + if @orp_OrpStrDetUt = @c_Integer_NULL set @orp_OrpStrDetUt = NULL; + if @orp_OrpStrPrisBer = @c_Integer_NULL set @orp_OrpStrPrisBer = NULL; + if @orp_pdmcount = @c_Integer_NULL set @orp_pdmcount = NULL; + if @orp_PktOrdRestNr = @c_Integer_NULL set @orp_PktOrdRestNr = NULL; + if @orp_PlockJnrOrder = @c_Integer_NULL set @orp_PlockJnrOrder = NULL; + if @orp_PrisAdaco = @c_Integer_NULL set @orp_PrisAdaco = NULL; + if @orp_PrisHantTyp = @c_Integer_NULL set @orp_PrisHantTyp = NULL; + if @orp_PrisHantTypIntFsg = @c_Integer_NULL set @orp_PrisHantTypIntFsg = NULL; + if @orp_PrisLista = @c_Integer_NULL set @orp_PrisLista = NULL; + if @orp_PrisTypP = @c_Integer_NULL set @orp_PrisTypP = NULL; + if @orp_PrjManufMilestone = @c_Integer_NULL set @orp_PrjManufMilestone = NULL; + if @orp_ProspektId = @c_Integer_NULL set @orp_ProspektId = NULL; + if @orp_PvmDispCheckDateAccept = @c_Integer_NULL set @orp_PvmDispCheckDateAccept = NULL; + if @orp_PvmGridNo = @c_Integer_NULL set @orp_PvmGridNo = NULL; + if @orp_PvmGridRepOrderBy = @c_Integer_NULL set @orp_PvmGridRepOrderBy = NULL; + if @orp_PvmOrdRadNrOrg = @c_Integer_NULL set @orp_PvmOrdRadNrOrg = NULL; + if @orp_PvmOrdRadNrStrPosOrg = @c_Integer_NULL set @orp_PvmOrdRadNrStrPosOrg = NULL; + if @orp_PvmOrdRestNrOrg = @c_Integer_NULL set @orp_PvmOrdRestNrOrg = NULL; + if @orp_PvmRowIsPvm = @c_Integer_NULL set @orp_PvmRowIsPvm = NULL; + if @orp_ReplicateRecord = @c_Integer_NULL set @orp_ReplicateRecord = NULL; + if @orp_RestBehKod = @c_Integer_NULL set @orp_RestBehKod = NULL; + if @orp_RptUnitNo = @c_Integer_NULL set @orp_RptUnitNo = NULL; + if @orp_SamPlockListeNr = @c_Integer_NULL set @orp_SamPlockListeNr = NULL; + if @orp_SamPlockLopNr = @c_Integer_NULL set @orp_SamPlockLopNr = NULL; + if @orp_ShuffledFromBackOrderNo = @c_Integer_NULL set @orp_ShuffledFromBackOrderNo = NULL; + if @orp_ShuffledFromOrderNo = @c_Integer_NULL set @orp_ShuffledFromOrderNo = NULL; + if @orp_ShuffledFromOrdLnNo = @c_Integer_NULL set @orp_ShuffledFromOrdLnNo = NULL; + if @orp_ShuffledFromOrdSubLnNo = @c_Integer_NULL set @orp_ShuffledFromOrdSubLnNo = NULL; + if @orp_ShuffledToBackOrderNo = @c_Integer_NULL set @orp_ShuffledToBackOrderNo = NULL; + if @orp_ShuffledToOrderNo = @c_Integer_NULL set @orp_ShuffledToOrderNo = NULL; + if @orp_ShuffledToOrdLnNo = @c_Integer_NULL set @orp_ShuffledToOrdLnNo = NULL; + if @orp_ShuffledToOrdSubLnNo = @c_Integer_NULL set @orp_ShuffledToOrdSubLnNo = NULL; + if @orp_spid = @c_Integer_NULL set @orp_spid = NULL; + if @orp_SprakKod = @c_Integer_NULL set @orp_SprakKod = NULL; + if @orp_SQLCmd2EnterTrg = @c_Integer_NULL set @orp_SQLCmd2EnterTrg = NULL; + if @orp_StatusKodNyttOE = @c_Integer_NULL set @orp_StatusKodNyttOE = NULL; + if @orp_SurChOfRow = @c_Integer_NULL set @orp_SurChOfRow = NULL; + if @orp_TaxCode = @c_Integer_NULL set @orp_TaxCode = NULL; + if @orp_TillValArtToOrdRadNr = @c_Integer_NULL set @orp_TillValArtToOrdRadNr = NULL; + if @orp_TimeZoneCode = @c_Integer_NULL set @orp_TimeZoneCode = NULL; + if @orp_ValKlausul = @c_Integer_NULL set @orp_ValKlausul = NULL; + if @orp_VAT_Type = @c_Integer_NULL set @orp_VAT_Type = NULL; + if @orp_VATCode2 = @c_Integer_NULL set @orp_VATCode2 = NULL; + if @orp_VATCode3 = @c_Integer_NULL set @orp_VATCode3 = NULL; +End; +If @c_Varchar_NULL is not NULL Begin + if @orp_AltEnhetKod = @c_Varchar_NULL set @orp_AltEnhetKod = NULL; + if @orp_AoNrAlfa = @c_Varchar_NULL set @orp_AoNrAlfa = NULL; + if @orp_ars_LagPlats = @c_Varchar_NULL set @orp_ars_LagPlats = NULL; + if @orp_ArtBeskr = @c_Varchar_NULL set @orp_ArtBeskr = NULL; + if @orp_ArtikelVariant = @c_Varchar_NULL set @orp_ArtikelVariant = NULL; + if @orp_ArtNr = @c_Varchar_NULL set @orp_ArtNr = NULL; + if @orp_ArtNrAltArt = @c_Varchar_NULL set @orp_ArtNrAltArt = NULL; + if @orp_ArtNrEAN = @c_Varchar_NULL set @orp_ArtNrEAN = NULL; + if @orp_ArtNrKund = @c_Varchar_NULL set @orp_ArtNrKund = NULL; + if @orp_ArtNrLev = @c_Varchar_NULL set @orp_ArtNrLev = NULL; + if @orp_ArtNrRegMall = @c_Varchar_NULL set @orp_ArtNrRegMall = NULL; + if @orp_ArtProdKlass = @c_Varchar_NULL set @orp_ArtProdKlass = NULL; + if @orp_ArtProdKonto = @c_Varchar_NULL set @orp_ArtProdKonto = NULL; + if @orp_ArtRevId = @c_Varchar_NULL set @orp_ArtRevId = NULL; + if @orp_ArtRitnNr = @c_Varchar_NULL set @orp_ArtRitnNr = NULL; + if @orp_ArtSerieNr = @c_Varchar_NULL set @orp_ArtSerieNr = NULL; + if @orp_ArtSerieNrFrom = @c_Varchar_NULL set @orp_ArtSerieNrFrom = NULL; + if @orp_ArtSerieNrTom = @c_Varchar_NULL set @orp_ArtSerieNrTom = NULL; + if @orp_AutoRegel = @c_Varchar_NULL set @orp_AutoRegel = NULL; + if @orp_BatchId = @c_Varchar_NULL set @orp_BatchId = NULL; + if @orp_BFigNr = @c_Varchar_NULL set @orp_BFigNr = NULL; + if @orp_BusinessUnit = @c_Varchar_NULL set @orp_BusinessUnit = NULL; + if @orp_CreatedByDbObject = @c_Varchar_NULL set @orp_CreatedByDbObject = NULL; + if @orp_DelivFromBusinessUnit = @c_Varchar_NULL set @orp_DelivFromBusinessUnit = NULL; + if @orp_DelivToBusinessUnit = @c_Varchar_NULL set @orp_DelivToBusinessUnit = NULL; + if @orp_DoIndirectUpdate = @c_Varchar_NULL set @orp_DoIndirectUpdate = NULL; + if @orp_EnhetsKod = @c_Varchar_NULL set @orp_EnhetsKod = NULL; + if @orp_Exec_Time_Log_String = @c_Varchar_NULL set @orp_Exec_Time_Log_String = NULL; + if @orp_ExtOrderNr = @c_Varchar_NULL set @orp_ExtOrderNr = NULL; + if @orp_FlodesGrupp = @c_Varchar_NULL set @orp_FlodesGrupp = NULL; + if @orp_FoljesedelsRef = @c_Varchar_NULL set @orp_FoljesedelsRef = NULL; + if @orp_FtgNr = @c_Varchar_NULL set @orp_FtgNr = NULL; + if @orp_GodsMarke = @c_Varchar_NULL set @orp_GodsMarke = NULL; + if @orp_GroupPoWoOn = @c_Varchar_NULL set @orp_GroupPoWoOn = NULL; + if @orp_ICTCreditOrderInfo = @c_Varchar_NULL set @orp_ICTCreditOrderInfo = NULL; + if @orp_IdForOrderShuffle = @c_Varchar_NULL set @orp_IdForOrderShuffle = NULL; + if @orp_IndividRef = @c_Varchar_NULL set @orp_IndividRef = NULL; + if @orp_IndividRef_AB = @c_Varchar_NULL set @orp_IndividRef_AB = NULL; + if @orp_IndividRef_AC = @c_Varchar_NULL set @orp_IndividRef_AC = NULL; + if @orp_IndividRef_AD = @c_Varchar_NULL set @orp_IndividRef_AD = NULL; + if @orp_IndividRef_AE = @c_Varchar_NULL set @orp_IndividRef_AE = NULL; + if @orp_IndividRef_AF = @c_Varchar_NULL set @orp_IndividRef_AF = NULL; + if @orp_IndividRef_VV = @c_Varchar_NULL set @orp_IndividRef_VV = NULL; + if @orp_InValuta = @c_Varchar_NULL set @orp_InValuta = NULL; + if @orp_K4 = @c_Varchar_NULL set @orp_K4 = NULL; + if @orp_K5 = @c_Varchar_NULL set @orp_K5 = NULL; + if @orp_K6 = @c_Varchar_NULL set @orp_K6 = NULL; + if @orp_K7 = @c_Varchar_NULL set @orp_K7 = NULL; + if @orp_KalkylPrisFaktura = @c_Varchar_NULL set @orp_KalkylPrisFaktura = NULL; + if @orp_KanbanSignal = @c_Varchar_NULL set @orp_KanbanSignal = NULL; + if @orp_KBarAvsandandeEnhet = @c_Varchar_NULL set @orp_KBarAvsandandeEnhet = NULL; + if @orp_KostBar = @c_Varchar_NULL set @orp_KostBar = NULL; + if @orp_KostStalleKod = @c_Varchar_NULL set @orp_KostStalleKod = NULL; + if @orp_KostStalleKodIntFsg = @c_Varchar_NULL set @orp_KostStalleKodIntFsg = NULL; + if @orp_KstAvsandandeEnhet = @c_Varchar_NULL set @orp_KstAvsandandeEnhet = NULL; + if @orp_KundBestNr = @c_Varchar_NULL set @orp_KundBestNr = NULL; + if @orp_KundIntOrderNr = @c_Varchar_NULL set @orp_KundIntOrderNr = NULL; + if @orp_LagPlats = @c_Varchar_NULL set @orp_LagPlats = NULL; + if @orp_LagStalle = @c_Varchar_NULL set @orp_LagStalle = NULL; + if @orp_LagStalleLevOrder = @c_Varchar_NULL set @orp_LagStalleLevOrder = NULL; + if @orp_LagStalleOULager = @c_Varchar_NULL set @orp_LagStalleOULager = NULL; + if @orp_LevNr = @c_Varchar_NULL set @orp_LevNr = NULL; + if @orp_LevsArtBeskr = @c_Varchar_NULL set @orp_LevsArtBeskr = NULL; + if @orp_ManReAvstPersSign = @c_Varchar_NULL set @orp_ManReAvstPersSign = NULL; + if @orp_OffNr = @c_Varchar_NULL set @orp_OffNr = NULL; + if @orp_ole1 = @c_Varchar_NULL set @orp_ole1 = NULL; + if @orp_ole2 = @c_Varchar_NULL set @orp_ole2 = NULL; + if @orp_OrdArtBeskr = @c_Varchar_NULL set @orp_OrdArtBeskr = NULL; + if @orp_OrderNrAlfa = @c_Varchar_NULL set @orp_OrderNrAlfa = NULL; + if @orp_OrdLevPlats1 = @c_Varchar_NULL set @orp_OrdLevPlats1 = NULL; + if @orp_OrpRadText = @c_Varchar_NULL set @orp_OrpRadText = NULL; + if @orp_PersSign = @c_Varchar_NULL set @orp_PersSign = NULL; + if @orp_ProdGr = @c_Varchar_NULL set @orp_ProdGr = NULL; + if @orp_ProjCode = @c_Varchar_NULL set @orp_ProjCode = NULL; + if @orp_PVMSeasonId = @c_Varchar_NULL set @orp_PVMSeasonId = NULL; + if @orp_RowCreatedBy = @c_Varchar_NULL set @orp_RowCreatedBy = NULL; + if @orp_RowUpdatedBy = @c_Varchar_NULL set @orp_RowUpdatedBy = NULL; + if @orp_RowUpdatedCols = @c_Varchar_NULL set @orp_RowUpdatedCols = NULL; + if @orp_Saljare = @c_Varchar_NULL set @orp_Saljare = NULL; + if @orp_SamLevKod = @c_Varchar_NULL set @orp_SamLevKod = NULL; + if @orp_ServiceLevelCode = @c_Varchar_NULL set @orp_ServiceLevelCode = NULL; + if @orp_ShipmPlanAlphaid = @c_Varchar_NULL set @orp_ShipmPlanAlphaid = NULL; + if @orp_StrDateTimeBIA = @c_Varchar_NULL set @orp_StrDateTimeBIA = NULL; + if @orp_StrDateTimeOrpo = @c_Varchar_NULL set @orp_StrDateTimeOrpo = NULL; + if @orp_StrukturRevision = @c_Varchar_NULL set @orp_StrukturRevision = NULL; + if @orp_TextVatCode = @c_Varchar_NULL set @orp_TextVatCode = NULL; + if @orp_TillLagPlats = @c_Varchar_NULL set @orp_TillLagPlats = NULL; + if @orp_TillValArtToArtNr = @c_Varchar_NULL set @orp_TillValArtToArtNr = NULL; + if @orp_Turordning = @c_Varchar_NULL set @orp_Turordning = NULL; + if @orp_ValKod = @c_Varchar_NULL set @orp_ValKod = NULL; + if @orp_VariantGruppH = @c_Varchar_NULL set @orp_VariantGruppH = NULL; + if @orp_VariantGruppT = @c_Varchar_NULL set @orp_VariantGruppT = NULL; + if @orp_VariantGruppV = @c_Varchar_NULL set @orp_VariantGruppV = NULL; + if @orp_VariantGruppX = @c_Varchar_NULL set @orp_VariantGruppX = NULL; + if @orp_VaruGruppKod = @c_Varchar_NULL set @orp_VaruGruppKod = NULL; + if @orp_VaruProv = @c_Varchar_NULL set @orp_VaruProv = NULL; +End; +If @c_Date_NULL is not NULL Begin + if @orp_AoStartDat = @c_Date_NULL set @orp_AoStartDat = NULL; + if @orp_ArrivalAtCustomerDate = @c_Date_NULL set @orp_ArrivalAtCustomerDate = NULL; + if @orp_FaktDat = @c_Date_NULL set @orp_FaktDat = NULL; + if @orp_FaktDatKorr = @c_Date_NULL set @orp_FaktDatKorr = NULL; + if @orp_FaktDatOrg = @c_Date_NULL set @orp_FaktDatOrg = NULL; + if @orp_ICTOrdBerednDat = @c_Date_NULL set @orp_ICTOrdBerednDat = NULL; + if @orp_ICTOrdBerLevDat = @c_Date_NULL set @orp_ICTOrdBerLevDat = NULL; + if @orp_Ins_DT_MilliSecond = @c_Date_NULL set @orp_Ins_DT_MilliSecond = NULL; + if @orp_Jeeves_Init_Insert_Enter = @c_Date_NULL set @orp_Jeeves_Init_Insert_Enter = NULL; + if @orp_Jeeves_Init_Insert_PreIns = @c_Date_NULL set @orp_Jeeves_Init_Insert_PreIns = NULL; + if @orp_ManReAvstDT = @c_Date_NULL set @orp_ManReAvstDT = NULL; + if @orp_ManReAvstPerDen = @c_Date_NULL set @orp_ManReAvstPerDen = NULL; + if @orp_OkAttPlockaSattDatum = @c_Date_NULL set @orp_OkAttPlockaSattDatum = NULL; + if @orp_OrdBegLevDat = @c_Date_NULL set @orp_OrdBegLevDat = NULL; + if @orp_OrdBerednDat = @c_Date_NULL set @orp_OrdBerednDat = NULL; + if @orp_OrdBerLevDat = @c_Date_NULL set @orp_OrdBerLevDat = NULL; + if @orp_OrdBerLevDatRest = @c_Date_NULL set @orp_OrdBerLevDatRest = NULL; + if @orp_OrdDatum = @c_Date_NULL set @orp_OrdDatum = NULL; + if @orp_OrdLevDat = @c_Date_NULL set @orp_OrdLevDat = NULL; + if @orp_OrdLevDatOrg = @c_Date_NULL set @orp_OrdLevDatOrg = NULL; + if @orp_OrdLovLevDat = @c_Date_NULL set @orp_OrdLovLevDat = NULL; + if @orp_PackagingDate = @c_Date_NULL set @orp_PackagingDate = NULL; + if @orp_PLUtskrDat = @c_Date_NULL set @orp_PLUtskrDat = NULL; + if @orp_PrisAndrDatum = @c_Date_NULL set @orp_PrisAndrDatum = NULL; + if @orp_QQ_Ins_Trg_Start = @c_Date_NULL set @orp_QQ_Ins_Trg_Start = NULL; + if @orp_RegDat = @c_Date_NULL set @orp_RegDat = NULL; + if @orp_RowCreatedDT = @c_Date_NULL set @orp_RowCreatedDT = NULL; + if @orp_RowCreatedUTCDT = @c_Date_NULL set @orp_RowCreatedUTCDT = NULL; + if @orp_RowUpdatedDT = @c_Date_NULL set @orp_RowUpdatedDT = NULL; + if @orp_RowUpdatedUTCDT = @c_Date_NULL set @orp_RowUpdatedUTCDT = NULL; + if @orp_SqlStmtStartedDT = @c_Date_NULL set @orp_SqlStmtStartedDT = NULL; + if @orp_UtskrDokLovLevDat = @c_Date_NULL set @orp_UtskrDokLovLevDat = NULL; + if @orp_UtskrDokLovUtskrDT = @c_Date_NULL set @orp_UtskrDokLovUtskrDT = NULL; +End; + + +if @orp_OrdBerednDat is NULL or @orp_OrdBerednDat > @orp_OrdBerLevDat + select @orp_OrdBerednDat = @orp_OrdBerLevDat +if @orp_OrdBerednDat < CONVERT( varchar(8), @LocalDateAndTime, 112 ) + select @orp_OrdBerednDat = CONVERT( varchar(8), @LocalDateAndTime, 112 ) +if @orp_OrdBerednDat > @orp_OrdBerLevDat + select @orp_OrdBerednDat = ISNULL(@orp_OrdBerLevDat,@orp_OrdBerednDat) + +if @orp_BusinessUnit is NULL OR @orp_DelivToBusinessUnit is NULL OR @orp_StockReplenishment = '1' +BEGIN + +if dbo.Jeeves_FN_GetParam( @c_ForetagKod, 'SO002', 'B', '0' ) = '1' begin + declare + @ar_LedTid_orp_2_bp_ti integer + select + @ar_LedTid_orp_2_bp_ti = ar.LedTid_orp_2_bp_ti + from ar with (ReadUnCommitted) where + ar.ForetagKod = @c_ForetagKod and + ar.ArtNr = @c_ArtNr + if @ar_LedTid_orp_2_bp_ti is NULL begin + select + @ar_LedTid_orp_2_bp_ti = max( coalesce(vg.LedTid_orp_2_bp_ti,0) ) + from ar with (ReadUnCommitted) + left outer join vg with (ReadUnCommitted) on + vg.ForetagKod = ar.ForetagKod and + vg.VaruGruppKod = ar.VaruGruppKod + where + ar.ForetagKod = @c_ForetagKod and + ar.ArtNr = @c_ArtNr + end + if @ar_LedTid_orp_2_bp_ti = 0 begin + select @orp_OrdBerednDat = @orp_OrdBerLevDat + end + if @ar_LedTid_orp_2_bp_ti > 0 begin + select @ar_LedTid_orp_2_bp_ti = 0 - @ar_LedTid_orp_2_bp_ti + select @orp_OrdBerednDat = + dbo.Jeeves_FN_DateAdd_Kala( @c_ForetagKod, 0, null, @orp_OrdBerLevDat, @ar_LedTid_orp_2_bp_ti ) + if @orp_OrdBerednDat is NULL or @orp_OrdBerednDat > @orp_OrdBerLevDat + select @orp_OrdBerednDat = @orp_OrdBerLevDat + if @orp_OrdBerednDat < convert( varchar(8), @LocalDateAndTime, 112 ) + select @orp_OrdBerednDat = convert( varchar(8), @LocalDateAndTime, 112 ) + if @orp_OrdBerednDat > @orp_OrdBerLevDat + select @orp_OrdBerednDat = ISNULL(@orp_OrdBerLevDat,@orp_OrdBerednDat) + end + select @c_OrdBerednDat = @orp_OrdBerednDat +end +else +begin + + if @orp_LevSattKod is NULL select @orp_LevSattKod = @oh_LevSattKod + + select + @new_CodeFixedDeparture = '0', + @new_OrdBerLevDat = @orp_OrdBerLevDat, + @new_OrdBerednDat = @orp_OrdBerLevDat, + @New_OrdBerLevTid = NULL, + @CodeFixedDeparture = '0' + + if @x6_CodeFixedDeparture = '1' OR + @xb_CodeFixedDeparture = '1' + begin + select @CodeFixedDeparture = '1' + end + + if @CodeFixedDeparture = '1' and COALESCE(@orp_AutoCreated,'0') = '0' + begin + execute @x = JEEVES_Fetch_DepartureTime + @c_Foretagkod = @orp_ForetagKod, + @c_LagStalle = @orp_LagStalle, + @c_LevSattKod = @orp_LevSattKod, + @c_Datum = @orp_OrdBerLevDat, + /*** 1 = Fixed departure, closest to a given date ahead in time ***/ + /*** 2 = Fixed departure, closest to a given date backwards in time ***/ + @Call_Type = 1, + @PersSign = @oh_PersSign, + @Simulate_MoveAhead_NoOfTimes = NULL, + @DebugMsg = NULL, + @Out_DepartureDate = @DepartureDate OUTPUT, + @Out_DepartureTime = @DepartureTime OUTPUT, + @Out_DepartureUniqueId = @DepartureUniqueId OUTPUT + + select @new_CodeFixedDeparture = '0' + + if @DepartureDate is not NULL and + @DepartureTime is not NULL and + @DepartureUniqueId is not NULL + begin + + select + @new_CodeFixedDeparture = '1', + @new_OrdBerLevDat = CONVERT(DateTime,@DepartureDate), + @new_OrdBerednDat = CONVERT(DateTime,@DepartureDate), + @new_OrdBerLevTid = CONVERT(DateTime,@DepartureTime), + @new_OrdLevNr = @DepartureUniqueId + + select + @orp_CodeFixedDeparture = @new_CodeFixedDeparture, + @orp_OrdBerLevDat = @new_OrdBerLevDat, + @orp_OrdBerednDat = @new_OrdBerednDat, + @orp_OrdBerLevTid = @new_OrdBerLevTid, + @orp_OrdLevNr = @new_OrdLevNr + + select + @c_OrdBerLevDat = @orp_OrdBerLevDat, + @c_OrdBerednDat = @orp_OrdBerednDat, + @c_OrdLevNr = @orp_OrdLevNr + + end + end + + if @new_CodeFixedDeparture = '0' and COALESCE(@orp_AutoCreated,'0') = '0' /*** NO Fixed departure for WMS ***/ + begin + + select + @x2f_KalenderNr = KalenderNr, + @x2f_InternLedTid = InternLedTid, + @x2f_TransportorsKod = TransportorsKod + from x2f with (ReadUnCommitted) where LevSattKod = @orp_LevSattKod and ForetagKod = @orp_ForetagKod + + if @x2f_KalenderNr is NOT NULL + begin + + execute @x = JEEVES_Fetch_FastLevDag + @LandsKod = @oh_LandsKod, + @LevSattKod = @orp_LevSattKod, + @TransportorsKod = @x2f_TransportorsKod, + @KalenderNr = @x2f_KalenderNr, + @InternLedTid = @x2f_InternLedTid, + @Datum = @orp_OrdBerLevDat, + @Call_Type = 2, + @PersSign = @oh_PersSign, + @c_Foretagkod = @orp_ForetagKod, + @Svar_FastLevDag = @Svar_FastLevDag OUTPUT, + @Svar_BerednDag = @Svar_BerednDag OUTPUT + + select + @orp_OrdBerLevDat = ISNULL(CONVERT(DateTime,@Svar_FastLevDag),@orp_OrdBerLevDat), + @orp_OrdBerednDat = ISNULL(CONVERT(DateTime,@Svar_BerednDag),@orp_OrdBerednDat) + + + select + @c_OrdBerLevDat = ISNULL(CONVERT(DateTime,@Svar_FastLevDag),@orp_OrdBerLevDat), + @c_OrdBerednDat = ISNULL(CONVERT(DateTime,@Svar_BerednDag),@orp_OrdBerednDat) + + end + end + +end + +END + + + +set @c_Logg_Exec_Time_String = @c_Logg_Exec_Time_String+char(13)+char(10)+convert(varchar(12),GetDate(),114)+', Pre insert orp' +set @Jeeves_Init_Insert_PreIns = GetDate() +set @orp_Jeeves_Init_Insert_Enter = @Jeeves_Init_Insert_Enter +set @orp_Jeeves_Init_Insert_PreIns = @Jeeves_Init_Insert_PreIns +set @orp_Exec_Time_Log_String = case when @orp_Exec_Time_Log_String is null then @c_Logg_Exec_Time_String else @c_Logg_Exec_Time_String + ' == ' + @orp_Exec_Time_Log_String end + + + +set @xxx_PrimaryKeyValue = '<%.orp>; key =' + +char(13)+char(10)+char(9)+'<%OrderNr> = ' + coalesce( convert( varchar(21), @c_OrderNr ), 'NULL' ) + +char(13)+char(10)+char(9)+'<%OrdRadNr> = ' + coalesce( convert( varchar(21), @c_OrdRadNr ), 'NULL' ) + +char(13)+char(10)+char(9)+'<%OrdRadNrStrPos> = ' + coalesce( convert( varchar(21), @c_OrdRadNrStrPos ), 'NULL' ) + +char(13)+char(10)+char(9)+'<%OrdRestNr> = ' + coalesce( convert( varchar(21), @c_OrdRestNr ), 'NULL' ) + +-- +-- + + + + +insert into orp ( + [AddArtInAktiv] + ,[AddToMO] + ,[AddToPO] + ,[Aktiv] + ,[AltEnhetKod] + ,[AltOpPrior] + ,[AnmodanMark] + ,[AnskaffningKop] + ,[AnskaffningMotBehov] + ,[AnskaffningTillv] + ,[AntalAttLev] + ,[AntalAttLevAltEnh] + ,[AntalPaPlocklista] + ,[AntalUnderPlock] + ,[AntDec] + ,[AoNr] + ,[AoNrAlfa] + ,[AoPos] + ,[AoStartDat] + ,[ArkVersion] + ,[ArrivalAtCustomerDate] + ,[ars_LagPlats] + ,[ArtBeskr] + ,[ArtCirkaPris] + ,[ArtikelVariant] + ,[ArtKalkBer] + ,[ArtKalkBerA] + ,[ArtKalkBerB] + ,[ArtKalkBerC] + ,[ArtKalkBerMtrl] + ,[ArtKalkBerStart] + ,[ArtKalkBerSum] + ,[ArtKalkBudg] + ,[ArtKalkPer] + ,[ArtKalkPris] + ,[ArtKalkprisE] + ,[ArtKalkprisO] + ,[ArtKalkprisOFast] + ,[ArtKalkprisOMtrl] + ,[ArtKod] + ,[ArtKundRabKod] + ,[ArtLevPrior] + ,[ArtNr] + ,[ArtNrAltArt] + ,[ArtNrEAN] + ,[ArtNrKund] + ,[ArtNrLev] + ,[ArtNrRegMall] + ,[ArtOmvFaktor] + ,[ArtPackSeparat] + ,[ArtProdKlass] + ,[ArtProdKonto] + ,[ArtRevId] + ,[ArtRitnNr] + ,[ArtSerieNr] + ,[ArtSerieNrFrom] + ,[ArtSerieNrTom] + ,[AtagandeGrad] + ,[ATPQueryId] + ,[AutDelivOU_MO] + ,[AutoCreated] + ,[AutoFrislappas] + ,[AutoOrderLine] + ,[AutoRegel] + ,[AutStockBookingRule] + ,[BAntalAvi] + ,[BatchBokas] + ,[BatchId] + ,[Bestallas] + ,[BestAnt] + ,[BestAntExtQty] + ,[BestInPris] + ,[BestNr] + ,[BestRadNr] + ,[BestRestNr] + ,[BFigNr] + ,[BokatAntal] + ,[BookQtyMO] + ,[BookQtyPO] + ,[BristKontrolleradStatus] + ,[BristStatusLagerUtlev] + ,[BristStatusPlaneringBegLevDat] + ,[BristStatusPlaneringBerLevDat] + ,[BusinessUnit] + ,[ClientSessionGUID_Str] + ,[CnfgrUniqueId] + ,[CodeFixedDeparture] + ,[CreatedByDbObject] + ,[DelBokningTillaten] + ,[DelivFromBusinessUnit] + ,[DelivToBusinessUnit] + ,[DelivToPOBackorderNo] + ,[DelivToPOLnNo] + ,[DelivToPONo] + ,[DelLevTillaten] + ,[DirektLeverans] + ,[DirektUttag] + ,[DiscountOrderLine] + ,[DoIndirectUpdate] + ,[Edit] + ,[Editext] + ,[EnhetsKod] + ,[EstimatorOrder] + ,[Exec_Time_Log_String] + ,[ExecutionTime] + ,[ExternQty] + ,[ExtOrderNr] + ,[ExtOrdRadNr] + ,[ExtOrdTyp] + ,[FaktDat] + ,[FaktDatKorr] + ,[FaktDatOrg] + ,[FaktNr] + ,[FaktNrKorr] + ,[FaktNrOrg] + ,[FaktorDelLevPkt] + ,[FfhNr] + ,[FfhRadNr] + ,[FlodesGrupp] + ,[FoljesedelsRef] + ,[ForbrukningsMaterial] + ,[ForetagKod] + ,[FPris] + ,[FPrisFast] + ,[FPrisInternt] + ,[FPrisInterntEnlRegel] + ,[FsgArtOmvFaktor] + ,[FsgPrisPer] + ,[FtgNr] + ,[GodsMarke] + ,[GroupPoWoOn] + ,[Handel3Part] + ,[ICTAdjmtFactor] + ,[ICTArtKalkPer] + ,[ICTCodeFixedDeparture] + ,[ICTCreditOrderInfo] + ,[ICTDelivFromBackOrderNo] + ,[ICTDelivFromOrderNo] + ,[ICTDelivFromOrdLnNo] + ,[ICTDelivFromOrdSubLnNo] + ,[ICTDelivToBackOrderNo] + ,[ICTDelivToOrderNo] + ,[ICTDelivToOrdLnNo] + ,[ICTDelivToOrdSubLnNo] + ,[ICTDelivToPOBackorderNo] + ,[ICTDelivToPOLnNo] + ,[ICTDelivToPONo] + ,[ICTDispatchMethod] + ,[ICTOrdBerednDat] + ,[ICTOrdBerLevDat] + ,[ICTOrdBerLevTid] + ,[ICTOrdLevNr] + ,[ICTOrdLnStatus] + ,[ICTOrdResrvStat] + ,[ICTPackageCode] + ,[ICTPriceType] + ,[ICTRuleNumber] + ,[ICTTransportTid] + ,[IdForOrderShuffle] + ,[IndividRef] + ,[IndividRef_AB] + ,[IndividRef_AC] + ,[IndividRef_AD] + ,[IndividRef_AE] + ,[IndividRef_AF] + ,[IndividRef_VV] + ,[InkAvt] + ,[IntrnCoNoOrigin] + ,[IntStatTransTyp] + ,[InValKurs] + ,[InValuta] + ,[InventoryLocWMS] + ,[Jeeves_Init_Insert_Enter] + ,[Jeeves_Init_Insert_PreIns] + ,[K4] + ,[K5] + ,[K6] + ,[K7] + ,[KalkylPrisFaktura] + ,[kampnr] + ,[KanbanSignal] + ,[KBarAvsandandeEnhet] + ,[KodEjFakturera] + ,[KodEJUtskrFA] + ,[KodEJUtskrFS] + ,[KodEJUtskrOE] + ,[KodExtTextToOrder] + ,[KodLagerOmBokning] + ,[KonfigArtNr] + ,[KopieradFranFaktNr] + ,[KopieradFranOrderNr] + ,[KopieradTillOrderNr] + ,[KorId] + ,[KostBar] + ,[KostStalleKod] + ,[KostStalleKodIntFsg] + ,[KreditOrder] + ,[KstAvsandandeEnhet] + ,[KundBestNr] + ,[KundIntOrderNr] + ,[KundIntOrdRadNr] + ,[KundKategoriKod] + ,[KundPrisInklMoms] + ,[KundRabatt] + ,[LagerBokas] + ,[LagerFlyttning] + ,[LagerHanteringTyp] + ,[LagPlats] + ,[LagStalle] + ,[LagStalleLevOrder] + ,[LagStalleOULager] + ,[LeadTimeMatrixBookingFlag] + ,[LedTid_orp_2_bp_ti] + ,[LevAntalAltEnhSparrat] + ,[LevAntalSparrat] + ,[LevNr] + ,[LevRabattProc1] + ,[LevsArtBeskr] + ,[LevSattKod] + ,[LevTid] + ,[ManReAvstDT] + ,[ManReAvstPerDen] + ,[ManReAvstPersSign] + ,[MarkDelLevPkt] + ,[MarkOrderUniktKalkP] + ,[MarkOrderUniktLager] + ,[MarkUpArtKalkPrisO] + ,[MomsKod] + ,[MRP_InventoryTransferFlag] + ,[MtrlVerklKost] + ,[MtrlVerklKostJustering] + ,[MtrlVerklKostMtrl] + ,[NettoEjRabKod] + ,[NettoPris] + ,[No_Trigger_Exec] + ,[NotInvoiceOrderLine] + ,[OffNr] + ,[OffRadNr] + ,[OingSkapad] + ,[OkAttPlockaSattDatum] + ,[OkAttPlockaStatus] + ,[ole1] + ,[ole2] + ,[OneOffSalesCode] + ,[OrdAntal] + ,[OrdAntalAltEnh] + ,[OrdAntalB] + ,[OrdAntalC] + ,[OrdArtBeskr] + ,[OrdBegLevDat] + ,[OrdBerednDat] + ,[OrdBerLevDat] + ,[OrdBerLevDatRest] + ,[OrdBerLevTid] + ,[OrdBokningsStatus] + ,[OrdDatum] + ,[OrderBeloppIntFsg] + ,[OrderBeloppIntKop] + ,[OrderFranOffert] + ,[OrderKod] + ,[OrderKopplAntal] + ,[OrderKopplKod] + ,[OrderKostnadIntFsg] + ,[OrderKostnadIntKop] + ,[OrderLineFromOrderB] + ,[OrderNr] + ,[OrderNrAlfa] + ,[OrderNrKoppl] + ,[OrderNrKorr] + ,[OrderNrOffert] + ,[OrderNrOrg] + ,[OrderNrServ] + ,[OrderRadFaktKostnad] + ,[OrderRowFromEstimator] + ,[OrderTBIntFsg] + ,[OrderTBIntKop] + ,[OrderTGIntFsg] + ,[OrderTGIntKop] + ,[OrderUniktLager] + ,[OrdFoljesedelsNr] + ,[OrdFsNr] + ,[OrdLevAntal] + ,[OrdLevAntalAltEnh] + ,[OrdLevDat] + ,[OrdLevDatOrg] + ,[OrdLevNr] + ,[OrdLevPlats1] + ,[OrdLovLevDat] + ,[OrdQtyOnFfh] + ,[OrdRabatt] + ,[OrdRadNr] + ,[OrdRadNrKoppl] + ,[OrdRadNrMall] + ,[OrdRadNrOffert] + ,[OrdRadNrOrg] + ,[OrdRadNrServ] + ,[OrdRadNrStrPos] + ,[OrdRadNrStrPosOffert] + ,[OrdRadNrStrPosOrg] + ,[OrdRadNrStrPosUrspr] + ,[OrdRadNrUrspr] + ,[OrdRadRab] + ,[OrdRadSplitKod] + ,[OrdRadSt] + ,[OrdRadSum] + ,[OrdRestAnt] + ,[OrdRestAntAltEnh] + ,[OrdRestAntPack] + ,[OrdRestNot] + ,[OrdRestNr] + ,[OrdRestNrOrg] + ,[OrdStdAntal] + ,[OrdTyp] + ,[OrdvRabKod] + ,[OrpRadText] + ,[OrpRadTextBe] + ,[OrpRadTextFa] + ,[OrpRadTextFs] + ,[OrpRadTextOe] + ,[OrpRadTextPl] + ,[OrpRadTextTo] + ,[OrpStrDetUt] + ,[OrpStrPrisBer] + ,[PackageItemOnPickList] + ,[PackageItemQty2Det] + ,[PackageItemZero] + ,[PackagingDate] + ,[PaketArtikel] + ,[PaketMultiMomsKod] + ,[PaketUnderArbete] + ,[pdmcount] + ,[PersSign] + ,[PkgAndDetailOnPickList] + ,[PkgItemDiscnt2Detail] + ,[PktOrdRestNr] + ,[PktVbOrdRadSumNettoUrspr] + ,[PktVbOrdRadSumUrspr] + ,[PlockJnrOrder] + ,[PLUtskrDat] + ,[PrelFaktVardeUtlev] + ,[PrisAdaco] + ,[PrisAndrDatum] + ,[PrisHantTyp] + ,[PrisHantTypIntFsg] + ,[PrisJustOrder] + ,[PrisJustOrderKost] + ,[PrisLista] + ,[PrisTypP] + ,[PrjManufMilestone] + ,[ProdGr] + ,[ProjCode] + ,[ProspektId] + ,[PVmAssortQty] + ,[PVMAssortQtyTot] + ,[PVmAssortVariant] + ,[PvmDispCheckDateAccept] + ,[PvmErrMessage] + ,[PvmGridNo] + ,[PvmGridRepOrderBy] + ,[PvmOrdRadNrOrg] + ,[PvmOrdRadNrStrPosOrg] + ,[PvmOrdRestNrOrg] + ,[PvmPickPropQty] + ,[PvmRowIsPvm] + ,[PVMSeasonId] + ,[PvmWarningMessage] + ,[q_ALFA_KonteraEO2Palagg] + ,[q_ALFA_KonteraEOPalagg] + ,[q_ALFA_KonteraGO2Palagg] + ,[QQ_Ins_Trg_Start] + ,[rabatt] + ,[rabatt1] + ,[rabatt2] + ,[rabatt3] + ,[RabattGrundAntal] + ,[rabattval] + ,[rabattval1] + ,[rabattval2] + ,[rabattval3] + ,[RegDat] + ,[ReplicateRecord] + ,[ReservdelsOrder] + ,[RestBehKod] + ,[RowCreatedBy] + ,[RowCreatedDT] + ,[RowCreatedUTCDT] + ,[RowTranStampLast] + ,[RowUpdatedBy] + ,[RowUpdatedCols] + ,[RowUpdatedDT] + ,[RowUpdatedUTCDT] + ,[RptUnitNo] + ,[SalesTaxHandling] + ,[Saljare] + ,[SamInKopMark] + ,[SamLevKod] + ,[SamPlockas] + ,[SamPlockListeNr] + ,[SamPlockLopNr] + ,[SerieNrBokas] + ,[ServiceLevelCode] + ,[ShipmPlanAlphaid] + ,[ShuffledFromBackOrderNo] + ,[ShuffledFromOrderNo] + ,[ShuffledFromOrdLnNo] + ,[ShuffledFromOrdSubLnNo] + ,[ShuffledOrderRow] + ,[ShuffledToBackOrderNo] + ,[ShuffledToOrderNo] + ,[ShuffledToOrdLnNo] + ,[ShuffledToOrdSubLnNo] + ,[spid] + ,[SprakKod] + ,[SQLCmd2EnterTrg] + ,[SqlStmtStartedDT] + ,[SrDummyUniqueId] + ,[StafflingsKod] + ,[StatusKodNyttOE] + ,[StockReplenishment] + ,[StrDateTimeBIA] + ,[StrDateTimeOrpo] + ,[StrukturRevision] + ,[SumKalkVardeIngDet] + ,[SumKalkVardeIngDetMtrl] + ,[SumUppbokKostFranIngTO] + ,[SumVardeIngDet] + ,[SumVbVardeIngDet] + ,[SurChOfRow] + ,[TaxCode] + ,[TextVatCode] + ,[TillLagPlats] + ,[TillValArtikelSkapad] + ,[TillValArtToArtNr] + ,[TillValArtToOrdRadNr] + ,[TimeZoneCode] + ,[TotOrdLevAntal] + ,[TransitLeverans] + ,[Turordning] + ,[UrsprOrderAntal] + ,[UtplocksKod] + ,[UtskrDokLovAntal] + ,[UtskrDokLovLevDat] + ,[UtskrDokLovPris] + ,[UtskrDokLovSkaGoras] + ,[UtskrDokLovUtskrDT] + ,[UtskrFoljesedel] + ,[UtskrPlocklista] + ,[ValKlausul] + ,[ValKod] + ,[ValKurs] + ,[VariantGruppH] + ,[VariantGruppT] + ,[VariantGruppV] + ,[VariantGruppX] + ,[VaruGruppKod] + ,[VaruProv] + ,[VAT_Type] + ,[VATCode2] + ,[VATCode3] + ,[Vb_InPris] + ,[Vb_InPris_Mtrl] + ,[vb_NettoPris] + ,[vb_PkgToDetCalcDiff] + ,[vb_pris] + ,[vb_PrisFast] + ,[Vb_PrisInklMoms] + ,[Vb_RadVardeExklMoms] + ,[Vb_RadVardeInklMoms] + ,[VbArtKalkBerSum] + ,[vbKalkPris] + ,[VbOrdRabattSum] + ,[VbOrdRabattSumNetto] + ,[VbOrdRadSum] + ,[VbOrdRadSumNetto] + ,[VbPrisER] + ,[VolymRabatt] +-- +-- + ) + values ( + @orp_AddArtInAktiv + ,@orp_AddToMO + ,@orp_AddToPO + ,COALESCE( @orp_Aktiv, 0 ) + ,@orp_AltEnhetKod + ,@orp_AltOpPrior + ,COALESCE( @orp_AnmodanMark, '0' ) + ,COALESCE( @orp_AnskaffningKop, '0' ) + ,COALESCE( @orp_AnskaffningMotBehov, '0' ) + ,COALESCE( @orp_AnskaffningTillv, '0' ) + ,COALESCE( @orp_AntalAttLev, NULL ) + ,COALESCE( @orp_AntalAttLevAltEnh, NULL ) + ,COALESCE( @orp_AntalPaPlocklista, 0 ) + ,COALESCE( @orp_AntalUnderPlock, 0 ) + ,COALESCE( @orp_AntDec, 0 ) + ,@orp_AoNr + ,@orp_AoNrAlfa + ,@orp_AoPos + ,@orp_AoStartDat + ,@orp_ArkVersion + ,@orp_ArrivalAtCustomerDate + ,@orp_ars_LagPlats + ,@orp_ArtBeskr + ,COALESCE( @orp_ArtCirkaPris, 0 ) + ,@orp_ArtikelVariant + ,COALESCE( @orp_ArtKalkBer, 0 ) + ,COALESCE( @orp_ArtKalkBerA, 0 ) + ,COALESCE( @orp_ArtKalkBerB, 0 ) + ,COALESCE( @orp_ArtKalkBerC, 0 ) + ,COALESCE( @orp_ArtKalkBerMtrl, 0 ) + ,COALESCE( @orp_ArtKalkBerStart, 0 ) + ,COALESCE( @orp_ArtKalkBerSum, 0 ) + ,COALESCE( @orp_ArtKalkBudg, 0 ) + ,COALESCE( @orp_ArtKalkPer, 0 ) + ,COALESCE( @orp_ArtKalkPris, 0 ) + ,COALESCE( @orp_ArtKalkprisE, 0 ) + ,COALESCE( @orp_ArtKalkprisO, 0 ) + ,COALESCE( @orp_ArtKalkprisOFast, 0 ) + ,COALESCE( @orp_ArtKalkprisOMtrl, 0 ) + ,COALESCE( @orp_ArtKod, 0 ) + ,COALESCE( @orp_ArtKundRabKod, '1' ) + ,COALESCE( @orp_ArtLevPrior, 0 ) + ,@orp_ArtNr + ,@orp_ArtNrAltArt + ,@orp_ArtNrEAN + ,@orp_ArtNrKund + ,@orp_ArtNrLev + ,@orp_ArtNrRegMall + ,COALESCE( @orp_ArtOmvFaktor, 1 ) + ,COALESCE( @orp_ArtPackSeparat, '0' ) + ,@orp_ArtProdKlass + ,@orp_ArtProdKonto + ,@orp_ArtRevId + ,@orp_ArtRitnNr + ,COALESCE( @orp_ArtSerieNr, ' ' ) + ,@orp_ArtSerieNrFrom + ,@orp_ArtSerieNrTom + ,@orp_AtagandeGrad + ,@orp_ATPQueryId + ,COALESCE( @orp_AutDelivOU_MO, 0 ) + ,@orp_AutoCreated + ,COALESCE( @orp_AutoFrislappas, '0' ) + ,COALESCE( @orp_AutoOrderLine, 0 ) + ,@orp_AutoRegel + ,@orp_AutStockBookingRule + ,COALESCE( @orp_BAntalAvi, 0 ) + ,COALESCE( @orp_BatchBokas, '0' ) + ,COALESCE( @orp_BatchId, ' ' ) + ,COALESCE( @orp_Bestallas, '0' ) + ,COALESCE( @orp_BestAnt, 0 ) + ,COALESCE( @orp_BestAntExtQty, 0 ) + ,COALESCE( @orp_BestInPris, 0 ) + ,@orp_BestNr + ,@orp_BestRadNr + ,@orp_BestRestNr + ,@orp_BFigNr + ,COALESCE( @orp_BokatAntal, 0 ) + ,COALESCE( @orp_BookQtyMO, 0 ) + ,COALESCE( @orp_BookQtyPO, 0 ) + ,COALESCE( @orp_BristKontrolleradStatus, 0 ) + ,COALESCE( @orp_BristStatusLagerUtlev, 0 ) + ,COALESCE( @orp_BristStatusPlaneringBegLevDat, 0 ) + ,COALESCE( @orp_BristStatusPlaneringBerLevDat, 0 ) + ,@orp_BusinessUnit + ,@orp_ClientSessionGUID_Str + ,@orp_CnfgrUniqueId + ,COALESCE( @orp_CodeFixedDeparture, '0' ) + ,case when @orp_CreatedByDbObject is null then object_Name( @@ProcId ) else left( @orp_CreatedByDbObject + N'/' + object_Name( @@ProcId ), 60 ) end + ,COALESCE( @orp_DelBokningTillaten, 0 ) + ,@orp_DelivFromBusinessUnit + ,@orp_DelivToBusinessUnit + ,@orp_DelivToPOBackorderNo + ,@orp_DelivToPOLnNo + ,@orp_DelivToPONo + ,COALESCE( @orp_DelLevTillaten, 0 ) + ,COALESCE( @orp_DirektLeverans, '0' ) + ,COALESCE( @orp_DirektUttag, '0' ) + ,COALESCE( @orp_DiscountOrderLine, 0 ) + ,@orp_DoIndirectUpdate + ,@orp_Edit + ,@orp_Editext + ,@orp_EnhetsKod + ,COALESCE( @orp_EstimatorOrder, '0' ) + ,@orp_Exec_Time_Log_String + ,COALESCE( @orp_ExecutionTime, 0 ) + ,COALESCE( @orp_ExternQty, 0 ) + ,@orp_ExtOrderNr + ,@orp_ExtOrdRadNr + ,@orp_ExtOrdTyp + ,@orp_FaktDat + ,@orp_FaktDatKorr + ,@orp_FaktDatOrg + ,@orp_FaktNr + ,@orp_FaktNrKorr + ,@orp_FaktNrOrg + ,COALESCE( @orp_FaktorDelLevPkt, NULL ) + ,@orp_FfhNr + ,@orp_FfhRadNr + ,@orp_FlodesGrupp + ,@orp_FoljesedelsRef + ,COALESCE( @orp_ForbrukningsMaterial, '0' ) + ,COALESCE( @orp_ForetagKod, 0 ) + ,COALESCE( @orp_FPris, 0 ) + ,COALESCE( @orp_FPrisFast, 0 ) + ,COALESCE( @orp_FPrisInternt, NULL ) + ,COALESCE( @orp_FPrisInterntEnlRegel, NULL ) + ,COALESCE( @orp_FsgArtOmvFaktor, 1 ) + ,COALESCE( @orp_FsgPrisPer, 1 ) + ,@orp_FtgNr + ,@orp_GodsMarke + ,@orp_GroupPoWoOn + ,COALESCE( @orp_Handel3Part, '0' ) + ,COALESCE( @orp_ICTAdjmtFactor, NULL ) + ,COALESCE( @orp_ICTArtKalkPer, NULL ) + ,@orp_ICTCodeFixedDeparture + ,@orp_ICTCreditOrderInfo + ,@orp_ICTDelivFromBackOrderNo + ,@orp_ICTDelivFromOrderNo + ,@orp_ICTDelivFromOrdLnNo + ,@orp_ICTDelivFromOrdSubLnNo + ,@orp_ICTDelivToBackOrderNo + ,@orp_ICTDelivToOrderNo + ,@orp_ICTDelivToOrdLnNo + ,@orp_ICTDelivToOrdSubLnNo + ,@orp_ICTDelivToPOBackorderNo + ,@orp_ICTDelivToPOLnNo + ,@orp_ICTDelivToPONo + ,@orp_ICTDispatchMethod + ,@orp_ICTOrdBerednDat + ,@orp_ICTOrdBerLevDat + ,@orp_ICTOrdBerLevTid + ,@orp_ICTOrdLevNr + ,@orp_ICTOrdLnStatus + ,@orp_ICTOrdResrvStat + ,COALESCE( @orp_ICTPackageCode, '0' ) + ,COALESCE( @orp_ICTPriceType, NULL ) + ,@orp_ICTRuleNumber + ,@orp_ICTTransportTid + ,@orp_IdForOrderShuffle + ,@orp_IndividRef + ,@orp_IndividRef_AB + ,@orp_IndividRef_AC + ,@orp_IndividRef_AD + ,@orp_IndividRef_AE + ,@orp_IndividRef_AF + ,@orp_IndividRef_VV + ,@orp_InkAvt + ,@orp_IntrnCoNoOrigin + ,@orp_IntStatTransTyp + ,COALESCE( @orp_InValKurs, 0 ) + ,@orp_InValuta + ,COALESCE( @orp_InventoryLocWMS, '0' ) + ,@orp_Jeeves_Init_Insert_Enter + ,@orp_Jeeves_Init_Insert_PreIns + ,@orp_K4 + ,@orp_K5 + ,@orp_K6 + ,@orp_K7 + ,COALESCE( @orp_KalkylPrisFaktura, '0' ) + ,@orp_kampnr + ,@orp_KanbanSignal + ,@orp_KBarAvsandandeEnhet + ,COALESCE( @orp_KodEjFakturera, '0' ) + ,COALESCE( @orp_KodEJUtskrFA, '0' ) + ,COALESCE( @orp_KodEJUtskrFS, '0' ) + ,COALESCE( @orp_KodEJUtskrOE, '0' ) + ,@orp_KodExtTextToOrder + ,COALESCE( @orp_KodLagerOmBokning, '0' ) + ,@orp_KonfigArtNr + ,@orp_KopieradFranFaktNr + ,@orp_KopieradFranOrderNr + ,@orp_KopieradTillOrderNr + ,@orp_KorId + ,@orp_KostBar + ,@orp_KostStalleKod + ,@orp_KostStalleKodIntFsg + ,COALESCE( @orp_KreditOrder, '0' ) + ,@orp_KstAvsandandeEnhet + ,@orp_KundBestNr + ,@orp_KundIntOrderNr + ,@orp_KundIntOrdRadNr + ,@orp_KundKategoriKod + ,COALESCE( @orp_KundPrisInklMoms, '0' ) + ,COALESCE( @orp_KundRabatt, 0 ) + ,COALESCE( @orp_LagerBokas, '1' ) + ,COALESCE( @orp_LagerFlyttning, '0' ) + ,COALESCE( @orp_LagerHanteringTyp, 0 ) + ,COALESCE( @orp_LagPlats, ' ' ) + ,@orp_LagStalle + ,COALESCE( @orp_LagStalleLevOrder, '0' ) + ,@orp_LagStalleOULager + ,COALESCE( @orp_LeadTimeMatrixBookingFlag, '0' ) + ,@orp_LedTid_orp_2_bp_ti + ,COALESCE( @orp_LevAntalAltEnhSparrat, NULL ) + ,COALESCE( @orp_LevAntalSparrat, NULL ) + ,@orp_LevNr + ,COALESCE( @orp_LevRabattProc1, 0 ) + ,@orp_LevsArtBeskr + ,@orp_LevSattKod + ,@orp_LevTid + ,@orp_ManReAvstDT + ,@orp_ManReAvstPerDen + ,@orp_ManReAvstPersSign + ,@orp_MarkDelLevPkt + ,COALESCE( @orp_MarkOrderUniktKalkP, '0' ) + ,COALESCE( @orp_MarkOrderUniktLager, '0' ) + ,COALESCE( @orp_MarkUpArtKalkPrisO, NULL ) + ,@orp_MomsKod + ,COALESCE( @orp_MRP_InventoryTransferFlag, '0' ) + ,COALESCE( @orp_MtrlVerklKost, 0 ) + ,COALESCE( @orp_MtrlVerklKostJustering, 0 ) + ,COALESCE( @orp_MtrlVerklKostMtrl, 0 ) + ,COALESCE( @orp_NettoEjRabKod, '0' ) + ,COALESCE( @orp_NettoPris, 0 ) + ,COALESCE( @orp_No_Trigger_Exec, 0 ) + ,@orp_NotInvoiceOrderLine + ,@orp_OffNr + ,@orp_OffRadNr + ,COALESCE( @orp_OingSkapad, '0' ) + ,@orp_OkAttPlockaSattDatum + ,COALESCE( @orp_OkAttPlockaStatus, 0 ) + ,@orp_ole1 + ,@orp_ole2 + ,COALESCE( @orp_OneOffSalesCode, '0' ) + ,COALESCE( @orp_OrdAntal, 0 ) + ,COALESCE( @orp_OrdAntalAltEnh, 0 ) + ,COALESCE( @orp_OrdAntalB, 0 ) + ,COALESCE( @orp_OrdAntalC, 0 ) + ,@orp_OrdArtBeskr + ,@orp_OrdBegLevDat + ,@orp_OrdBerednDat + ,@orp_OrdBerLevDat + ,@orp_OrdBerLevDatRest + ,@orp_OrdBerLevTid + ,COALESCE( @orp_OrdBokningsStatus, 0 ) + ,@orp_OrdDatum + ,COALESCE( @orp_OrderBeloppIntFsg, NULL ) + ,COALESCE( @orp_OrderBeloppIntKop, NULL ) + ,@orp_OrderFranOffert + ,COALESCE( @orp_OrderKod, 0 ) + ,COALESCE( @orp_OrderKopplAntal, 0 ) + ,@orp_OrderKopplKod + ,COALESCE( @orp_OrderKostnadIntFsg, NULL ) + ,COALESCE( @orp_OrderKostnadIntKop, NULL ) + ,@orp_OrderLineFromOrderB + ,COALESCE( @orp_OrderNr, 0 ) + ,COALESCE( @orp_OrderNrAlfa, @use_when_DefStrDateTime ) + ,@orp_OrderNrKoppl + ,COALESCE( @orp_OrderNrKorr, 0 ) + ,@orp_OrderNrOffert + ,@orp_OrderNrOrg + ,@orp_OrderNrServ + ,@orp_OrderRadFaktKostnad + ,COALESCE( @orp_OrderRowFromEstimator, '0' ) + ,COALESCE( @orp_OrderTBIntFsg, NULL ) + ,COALESCE( @orp_OrderTBIntKop, NULL ) + ,COALESCE( @orp_OrderTGIntFsg, NULL ) + ,COALESCE( @orp_OrderTGIntKop, NULL ) + ,COALESCE( @orp_OrderUniktLager, 0 ) + ,@orp_OrdFoljesedelsNr + ,COALESCE( @orp_OrdFsNr, 0 ) + ,COALESCE( @orp_OrdLevAntal, 0 ) + ,COALESCE( @orp_OrdLevAntalAltEnh, 0 ) + ,@orp_OrdLevDat + ,@orp_OrdLevDatOrg + ,COALESCE( @orp_OrdLevNr, 0 ) + ,@orp_OrdLevPlats1 + ,@orp_OrdLovLevDat + ,COALESCE( @orp_OrdQtyOnFfh, 0 ) + ,COALESCE( @orp_OrdRabatt, 0 ) + ,COALESCE( @orp_OrdRadNr, 0 ) + ,@orp_OrdRadNrKoppl + ,@orp_OrdRadNrMall + ,@orp_OrdRadNrOffert + ,@orp_OrdRadNrOrg + ,@orp_OrdRadNrServ + ,COALESCE( @orp_OrdRadNrStrPos, 0 ) + ,@orp_OrdRadNrStrPosOffert + ,@orp_OrdRadNrStrPosOrg + ,COALESCE( @orp_OrdRadNrStrPosUrspr, 0 ) + ,COALESCE( @orp_OrdRadNrUrspr, 0 ) + ,COALESCE( @orp_OrdRadRab, 0 ) + ,COALESCE( @orp_OrdRadSplitKod, 0 ) + ,COALESCE( @orp_OrdRadSt, 0 ) + ,COALESCE( @orp_OrdRadSum, 0 ) + ,COALESCE( @orp_OrdRestAnt, 0 ) + ,COALESCE( @orp_OrdRestAntAltEnh, 0 ) + ,COALESCE( @orp_OrdRestAntPack, 0 ) + ,COALESCE( @orp_OrdRestNot, '0' ) + ,COALESCE( @orp_OrdRestNr, 0 ) + ,@orp_OrdRestNrOrg + ,COALESCE( @orp_OrdStdAntal, 0 ) + ,COALESCE( @orp_OrdTyp, 0 ) + ,@orp_OrdvRabKod + ,@orp_OrpRadText + ,COALESCE( @orp_OrpRadTextBe, '1' ) + ,COALESCE( @orp_OrpRadTextFa, '1' ) + ,COALESCE( @orp_OrpRadTextFs, '1' ) + ,COALESCE( @orp_OrpRadTextOe, '1' ) + ,COALESCE( @orp_OrpRadTextPl, '1' ) + ,COALESCE( @orp_OrpRadTextTo, '1' ) + ,COALESCE( @orp_OrpStrDetUt, 0 ) + ,COALESCE( @orp_OrpStrPrisBer, 0 ) + ,COALESCE( @orp_PackageItemOnPickList, '0' ) + ,COALESCE( @orp_PackageItemQty2Det, '0' ) + ,COALESCE( @orp_PackageItemZero, '0' ) + ,@orp_PackagingDate + ,COALESCE( @orp_PaketArtikel, '0' ) + ,COALESCE( @orp_PaketMultiMomsKod, '0' ) + ,COALESCE( @orp_PaketUnderArbete, '0' ) + ,COALESCE( @orp_pdmcount, 0 ) + ,COALESCE( @orp_PersSign, RIGHT(SUser_SName(),Col_Length('orp','PersSign')) ) + ,COALESCE( @orp_PkgAndDetailOnPickList, '0' ) + ,@orp_PkgItemDiscnt2Detail + ,COALESCE( @orp_PktOrdRestNr, NULL ) + ,COALESCE( @orp_PktVbOrdRadSumNettoUrspr, NULL ) + ,COALESCE( @orp_PktVbOrdRadSumUrspr, NULL ) + ,@orp_PlockJnrOrder + ,@orp_PLUtskrDat + ,COALESCE( @orp_PrelFaktVardeUtlev, 0 ) + ,@orp_PrisAdaco + ,@orp_PrisAndrDatum + ,COALESCE( @orp_PrisHantTyp, 0 ) + ,@orp_PrisHantTypIntFsg + ,COALESCE( @orp_PrisJustOrder, '0' ) + ,COALESCE( @orp_PrisJustOrderKost, '0' ) + ,@orp_PrisLista + ,COALESCE( @orp_PrisTypP, 0 ) + ,@orp_PrjManufMilestone + ,@orp_ProdGr + ,@orp_ProjCode + ,@orp_ProspektId + ,COALESCE( @orp_PVmAssortQty, NULL ) + ,COALESCE( @orp_PVMAssortQtyTot, NULL ) + ,@orp_PVmAssortVariant + ,@orp_PvmDispCheckDateAccept + ,@orp_PvmErrMessage + ,@orp_PvmGridNo + ,@orp_PvmGridRepOrderBy + ,@orp_PvmOrdRadNrOrg + ,@orp_PvmOrdRadNrStrPosOrg + ,@orp_PvmOrdRestNrOrg + ,COALESCE( @orp_PvmPickPropQty, NULL ) + ,COALESCE( @orp_PvmRowIsPvm, 0 ) + ,@orp_PVMSeasonId + ,@orp_PvmWarningMessage + ,@orp_q_ALFA_KonteraEO2Palagg + ,@orp_q_ALFA_KonteraEOPalagg + ,@orp_q_ALFA_KonteraGO2Palagg + ,COALESCE( @orp_QQ_Ins_Trg_Start, convert( char(8), @LocalDateAndTime,112) + ' ' + convert( varchar(12), @LocalDateAndTime, 114 ) ) + ,COALESCE( @orp_rabatt, 0 ) + ,COALESCE( @orp_rabatt1, 0 ) + ,COALESCE( @orp_rabatt2, 0 ) + ,COALESCE( @orp_rabatt3, 0 ) + ,COALESCE( @orp_RabattGrundAntal, 0 ) + ,COALESCE( @orp_rabattval, 0 ) + ,COALESCE( @orp_rabattval1, 0 ) + ,COALESCE( @orp_rabattval2, 0 ) + ,COALESCE( @orp_rabattval3, 0 ) + ,COALESCE( @orp_RegDat, convert( varchar(8), @LocalDateAndTime, 112 ) ) + ,@orp_ReplicateRecord + ,COALESCE( @orp_ReservdelsOrder, '0' ) + ,COALESCE( @orp_RestBehKod, 0 ) + ,COALESCE( @orp_RowCreatedBy, RIGHT(SUser_SName(),Col_Length('orp','RowCreatedBy')) ) + ,COALESCE( @orp_RowCreatedDT, convert( char(8), @LocalDateAndTime,112) + ' ' + convert( varchar(12), @LocalDateAndTime, 114 ) ) + ,COALESCE( @orp_RowCreatedUTCDT, cast( convert( char(8), @UTCDateAndTime, 112 ) + ' ' + convert( char(5), @UTCDateAndTime, 114 ) as DateTime ) ) + ,COALESCE( @orp_RowTranStampLast, '*' ) + ,@orp_RowUpdatedBy + ,@orp_RowUpdatedCols + ,@orp_RowUpdatedDT + ,@orp_RowUpdatedUTCDT + ,@orp_RptUnitNo + ,COALESCE( @orp_SalesTaxHandling, '0' ) + ,@orp_Saljare + ,COALESCE( @orp_SamInKopMark, '0' ) + ,@orp_SamLevKod + ,COALESCE( @orp_SamPlockas, '0' ) + ,@orp_SamPlockListeNr + ,@orp_SamPlockLopNr + ,COALESCE( @orp_SerieNrBokas, '0' ) + ,@orp_ServiceLevelCode + ,@orp_ShipmPlanAlphaid + ,@orp_ShuffledFromBackOrderNo + ,@orp_ShuffledFromOrderNo + ,@orp_ShuffledFromOrdLnNo + ,@orp_ShuffledFromOrdSubLnNo + ,COALESCE( @orp_ShuffledOrderRow, '0' ) + ,@orp_ShuffledToBackOrderNo + ,@orp_ShuffledToOrderNo + ,@orp_ShuffledToOrdLnNo + ,@orp_ShuffledToOrdSubLnNo + ,COALESCE( @orp_spid, @@Spid ) + ,COALESCE( @orp_SprakKod, 0 ) + ,@orp_SQLCmd2EnterTrg + ,@orp_SqlStmtStartedDT + ,@orp_SrDummyUniqueId + ,COALESCE( @orp_StafflingsKod, '1' ) + ,@orp_StatusKodNyttOE + ,COALESCE( @orp_StockReplenishment, '0' ) + ,@orp_StrDateTimeBIA + ,@orp_StrDateTimeOrpo + ,@orp_StrukturRevision + ,COALESCE( @orp_SumKalkVardeIngDet, 0 ) + ,COALESCE( @orp_SumKalkVardeIngDetMtrl, 0 ) + ,COALESCE( @orp_SumUppbokKostFranIngTO, 0 ) + ,COALESCE( @orp_SumVardeIngDet, 0 ) + ,COALESCE( @orp_SumVbVardeIngDet, 0 ) + ,@orp_SurChOfRow + ,@orp_TaxCode + ,@orp_TextVatCode + ,COALESCE( @orp_TillLagPlats, ' ' ) + ,@orp_TillValArtikelSkapad + ,@orp_TillValArtToArtNr + ,@orp_TillValArtToOrdRadNr + ,@orp_TimeZoneCode + ,COALESCE( @orp_TotOrdLevAntal, 0 ) + ,COALESCE( @orp_TransitLeverans, '0' ) + ,@orp_Turordning + ,COALESCE( @orp_UrsprOrderAntal, 0 ) + ,COALESCE( @orp_UtplocksKod, '1' ) + ,COALESCE( @orp_UtskrDokLovAntal, 0 ) + ,@orp_UtskrDokLovLevDat + ,COALESCE( @orp_UtskrDokLovPris, 0 ) + ,COALESCE( @orp_UtskrDokLovSkaGoras, '1' ) + ,@orp_UtskrDokLovUtskrDT + ,COALESCE( @orp_UtskrFoljesedel, '1' ) + ,COALESCE( @orp_UtskrPlocklista, '1' ) + ,@orp_ValKlausul + ,@orp_ValKod + ,COALESCE( @orp_ValKurs, 0 ) + ,@orp_VariantGruppH + ,@orp_VariantGruppT + ,@orp_VariantGruppV + ,@orp_VariantGruppX + ,@orp_VaruGruppKod + ,COALESCE( @orp_VaruProv, '0' ) + ,@orp_VAT_Type + ,@orp_VATCode2 + ,@orp_VATCode3 + ,COALESCE( @orp_Vb_InPris, 0 ) + ,COALESCE( @orp_Vb_InPris_Mtrl, 0 ) + ,COALESCE( @orp_vb_NettoPris, 0 ) + ,COALESCE( @orp_vb_PkgToDetCalcDiff, 0 ) + ,COALESCE( @orp_vb_pris, 0 ) + ,COALESCE( @orp_vb_PrisFast, 0 ) + ,COALESCE( @orp_Vb_PrisInklMoms, 0 ) + ,COALESCE( @orp_Vb_RadVardeExklMoms, 0 ) + ,COALESCE( @orp_Vb_RadVardeInklMoms, 0 ) + ,COALESCE( @orp_VbArtKalkBerSum, 0 ) + ,COALESCE( @orp_vbKalkPris, 0 ) + ,COALESCE( @orp_VbOrdRabattSum, 0 ) + ,COALESCE( @orp_VbOrdRabattSumNetto, 0 ) + ,COALESCE( @orp_VbOrdRadSum, 0 ) + ,COALESCE( @orp_VbOrdRadSumNetto, 0 ) + ,COALESCE( @orp_VbPrisER, 0 ) + ,COALESCE( @orp_VolymRabatt, 0 ) +-- +-- + ) + +select @dbe=@@Error, @dbc=@@RowCount, @Jeeves_Init_Insert_PostIns = GetDate(); +if @dbe <> 0 or @dbc = 0 begin + if @@TranCount > 0 rollback transaction; + exec Jeeves_Spr_Db_Error @c_ForetagKod, @c_PersSign, @c_zLanguage, @dbe, @dbc, @Procedure_Name, N'orp', 'I', @xxx_PrimaryKeyValue; + while @@TranCount<@Enter_TranCount BEGIN TRANSACTION; + return -100; +end; + + + +execute @x = JEEVES_Orp_Create_Tillagg + @c_OrderNr = @c_OrderNr, + @c_PersSign = @c_PersSign, + @c_Foretagkod = @orp_ForetagKod, + @c_CallType = 0, + @c_FfhNr = @orp_FfhNr + +/**** +update [orp] set + [Exec_Time_Log_String] = [Exec_Time_Log_String] + ''+substring(convert(varchar,GetDate(),121),18,6) + ,[No_Trigger_Exec] = 1 - [No_Trigger_Exec] + where + [orp].[ForetagKod] = @orp_ForetagKod and + [orp].[OrderNr] = @orp_OrderNr + and [orp].[OrdRadNr] = @orp_OrdRadNr + and [orp].[OrdRadNrStrPos] = @orp_OrdRadNrStrPos + and [orp].[OrdRestNr] = @orp_OrdRestNr +****/ + +-- +-- + +while @@TranCount > @Enter_TranCount COMMIT TRANSACTION; +while @@TranCount > @Enter_TranCount ROLLBACK TRANSACTION; +while @@TranCount < @Enter_TranCount BEGIN TRANSACTION + + +end try +begin catch + -- 0 ROLLBACK TRANSACTION; + execute Jeeves_Catch_SPR_Error @catch_ERROR_NUMBER OUTPUT, @catch_ERROR_MESSAGE OUTPUT, @Procedure_Name, @PgmId, @xxx_PrimaryKeyValue, @c_IntrnCoNo, @c_PersSign, @c_zLanguage, NULL; + while @@TranCount < @Enter_TranCount BEGIN TRANSACTION; + Execute Jeeves_RaisError @catch_ERROR_NUMBER, @catch_ERROR_MESSAGE; + return -100; + -- 0 begin + print '----'; + print 'Return error from procedure ''Jeeves_UsrDefModSqlObject'' when updating the object ''Jeeves_Init_Insert_orp'' with customer own modifications.'; + print 'Error_Number = ' + cast( @dbe as varchar(22) ); + print '----'; + end; + end try + begin catch + print '----'; + print 'Catch error from ''Jeeves_UsrDefModSqlObject'' when updating the object ''Jeeves_Init_Insert_orp'' with customer own modifications..'; + print 'Error_Number = ' + cast( Error_Number() as varchar(22) ); + print Error_Message(); + print '----'; + end catch; + print 'Execution time: '+ltrim( rtrim( str( cast( DateDiff( MILLISECOND, @Time, GetDate() ) as decimal(12,3) ) / 1000, 12, 3) ) ) + ' seconds.'; + print '--'; + end; +end; +go +print 'End Jeeves_Init_Insert_orp' +go +print 'End Jeeves_Init_Insert_orp' +go +if @@ServerName in ('jvsdev8','svma_home') and GetDate() < '20010830' exec Jeeves_Init_Insert_orp @c_ForetagKod=0, @c_PersSign='sm',@c_FtgNr='sm',@c_ArtNr='1234',@DebugMsg='x' +go From 6c1eb903f75124a0393b23cd2bb7b4d46e96fd3d Mon Sep 17 00:00:00 2001 From: Marcus Lindvall Date: Thu, 13 Apr 2023 10:55:42 +0200 Subject: [PATCH 24/24] Upgraded sqlservice to 2.0.x --- pyjeeves/connector.py | 47 ++++---------------------- pyjeeves/models/abc.py | 54 +++++++++++++++++++++--------- pyjeeves/models/raw.py | 29 +++++++++++----- pyjeeves/repositories/article.py | 18 +++++----- pyjeeves/repositories/company.py | 2 +- pyjeeves/repositories/warehouse.py | 16 ++++----- requirements.txt | 18 +++++----- setup.py | 2 +- 8 files changed, 95 insertions(+), 91 deletions(-) diff --git a/pyjeeves/connector.py b/pyjeeves/connector.py index 64c32c4..04f30d1 100644 --- a/pyjeeves/connector.py +++ b/pyjeeves/connector.py @@ -12,45 +12,11 @@ from sqlalchemy.orm import sessionmaker, scoped_session # from sqlalchemy.orm.exc import UnmappedClassError from pymssql import OperationalError -from sqlservice import SQLClient, SQLQuery +from sqlservice import Database logger = logging.getLogger("PyJeeves." + __name__) -class BaseFilterQuery(SQLQuery): - def get(self, ident): - # Override get() so that the flag is always checked in the - # DB as opposed to pulling from the identity map. - this is optional. - return SQLQuery.get(self.populate_existing(), ident) - - def __iter__(self): - return SQLQuery.__iter__(self.private()) - - def from_self(self, *ent): - # Override from_self() to automatically apply - # the criterion to. this works with count() and - # others. - return SQLQuery.from_self(self.private(), *ent) - - def private(self): - # Fetch the model name and column list and apply model-specific base filters - mzero = self._mapper_zero() - - if mzero: - # Sometimes a plain model class will be fetched instead of mzero - try: - model = mzero.class_ - obj = mzero.class_ - except Exception: - model = mzero.__class__ - obj = mzero - - if hasattr(model, '_base_filters'): - return self.enable_assertions(False).filter(model._base_filters(obj)) - - return self - - class DBConnector(object): """This class is used to control the SQLAlchemy integration""" @@ -82,9 +48,9 @@ class DBConnector(object): return retval def execute(self, operation=""): - conn = self.raw_engine.raw_connection() + conn = self.raw_engine - with conn.cursor(as_dict=True) as cursor: + with conn.connection.cursor(as_dict=True) as cursor: try: cursor.execute(operation) results = cursor.fetchall() @@ -100,14 +66,13 @@ class DBConnector(object): uri = 'mssql+pymssql://{user}:{pw}@{host}:{port}/{db}?charset=utf8'.format( **config.config['databases']['raw']) - sql_client_config = {'SQL_DATABASE_URI': uri} - db = SQLClient(sql_client_config, query_class=BaseFilterQuery) - return db, db.session, db.engine + db = Database(uri, echo=False) + + return db, db.session(), db.connect() def set_model_class(self, model_class): self.raw_db.model_class = model_class - self.raw_db.update_models_registry() def meta_session(self): diff --git a/pyjeeves/models/abc.py b/pyjeeves/models/abc.py index bb41186..72f0497 100644 --- a/pyjeeves/models/abc.py +++ b/pyjeeves/models/abc.py @@ -11,7 +11,8 @@ from sqlalchemy.exc import OperationalError from sqlalchemy.schema import MetaData, Column from sqlalchemy.types import Integer from sqlalchemy.orm.collections import InstrumentedList -from sqlalchemy import event +from sqlalchemy import event, orm +from sqlalchemy.orm import Session from sqlservice import ModelBase, as_declarative @@ -26,16 +27,51 @@ logger.info("Reading Jeeves DB structure") meta = MetaData() try: + # TODO: Split raw.py and reflect tables on separate module loads? meta.reflect(bind=db.raw_session.connection(), only=['ar', 'ars', 'arsh', 'arean', 'xae', 'xare', 'fr', 'kus', 'x1k', 'oh', 'orp', 'lp', 'vg', 'xp', 'xm', 'prh', 'prl', - 'kp', 'kpw', 'cr', 'X4', 'xw', 'X1', + 'kp', 'kpw', 'cr', 'X4', 'xw', 'X1', 'jfbs', 'lrfb', 'JAPP_EWMS_Item_Replenishment_Levels']) except OperationalError as e: logger.error("Failed to read Jeeves DB structure") raise e + +@event.listens_for(Session, "do_orm_execute") +def _add_filtering_criteria(execute_state): + """Intercept all ORM queries. Add a with_loader_criteria option to all + of them. + + This option applies to SELECT queries and adds a global WHERE criteria + (or as appropriate ON CLAUSE criteria for join targets) + to all objects of a certain class or superclass. + + """ + + # the with_loader_criteria automatically applies itself to + # relationship loads as well including lazy loads. So if this is + # a relationship load, assume the option was set up from the top level + # query. + + # TODO: Make configurable if repo made pub + company_code = execute_state.execution_options.get("company_code", 1) + + if ( + not execute_state.is_column_load + and not execute_state.is_relationship_load + # and not execute_state.execution_options.get("include_private", False) + ): + execute_state.statement = execute_state.statement.options( + orm.with_loader_criteria( + RawBaseModel, + lambda cls: cls.ForetagKod == company_code, + include_aliases=True, + ) + ) + + @as_declarative(metadata=meta) class RawBaseModel(ModelBase): """ Generalize __init__, __repr__ and to_json @@ -62,19 +98,7 @@ class RawBaseModel(ModelBase): def __init__(self, data=None, **kargs): if data: data = self._map_keys(data) - self.update(data, **kargs) - # super(RawBaseModel, self).__init__(data=None, **kargs) - - @classmethod - def _base_filters(self, obj, filters=and_()): - # This method provides base filtering, additional filtering can be done in subclasses - # Add this method to your model if you want more filtering, otherwise leave it out - # import and_ from sqlalchemy package - # this is a base filter for ALL queries - return and_( - obj.ForetagKod == 1, - filters - ) + self.set(**kargs) @classmethod def _map_columns(cls, key): diff --git a/pyjeeves/models/raw.py b/pyjeeves/models/raw.py index fe95d66..27e3371 100644 --- a/pyjeeves/models/raw.py +++ b/pyjeeves/models/raw.py @@ -224,14 +224,6 @@ class Article(RawBaseModel): except TypeError: logger.debug("NoneType error, %s" % self.ArtNr) - # @classmethod - # def _base_filters(self, obj): - # return RawBaseModel._base_filters( - # obj, - # and_(obj.ItemStatusCode == 0) - # ) - - class ContactInformationType(RawBaseModel): __tablename__ = 'X4' __to_dict_only__ = ('ComKod', 'ComBeskr') @@ -572,3 +564,24 @@ class ItemReplenishmentLevels(RawBaseModel): # "Table 'JAPP_EWMS_Item_Replenishment_Levels' does not have the identity property. # Cannot perform SET operation." ForetagKod = Column(Integer, primary_key=True, autoincrement=False) + + +class SupplierInvoicePayment(RawBaseModel): + __tablename__ = 'lrfb' + # __column_map__ = {'AltEnhetKod': 'UnitCode', 'AltEnhetBeskr': 'UnitName', + # 'AltEnhetOmrFaktor': 'DefaultUnitConv'} + # __to_dict_only__ = ('AltEnhetBeskr', 'AltEnhetOmrFaktor') + + +class SupplierInvoiceJournal(RawBaseModel): + __tablename__ = 'jfbs' + # __column_map__ = {'ArtNr': 'ArticleNumber', + # 'AltEnhetKod': 'UnitCode', 'AltEnhetOmrFaktor': 'UnitConv', + # 'AltEnhetOrderStd': 'DefaultSalesUnit'} + # __to_dict_only__ = ('AltEnhetKod', 'AltEnhetOmrFaktor', + # 'AltEnhetOrderStd', 'ArticleAlternativeUnit') + + # ArtNr = Column(String, ForeignKey('ar.ArtNr'), primary_key=True) + + # AltEnhetKod = Column(String, ForeignKey('xae.AltEnhetKod'), primary_key=True) + # ArticleAlternativeUnit = relationship(ArticleAlternativeUnit, lazy='joined') diff --git a/pyjeeves/repositories/article.py b/pyjeeves/repositories/article.py index a8b0cd3..0151760 100644 --- a/pyjeeves/repositories/article.py +++ b/pyjeeves/repositories/article.py @@ -82,11 +82,11 @@ class Article(): logger.info('Creating GTIN for %s, %s, %s' % (n1.ArtNr, n1.AltEnhetKod, n1.ArtNrEAN)) continue - db.raw_db.add(n1) + db.raw_session.add(n1) logger.debug('Created/updated Article EAN for %s - %s with GTIN %s' % ( gtin['article_no'], gtin.get('unit', 'no unit'), gtin['article_gtin'])) - db.raw_db.commit() + db.raw_session.commit() logger.info('Succesfully commited %s GTINs to database' % (len(gtins))) @staticmethod @@ -94,9 +94,9 @@ class Article(): gtins = db.raw_session.query(ArticleEAN).all() for gtin in gtins: - db.raw_db.delete(gtin) + db.raw_session.delete(gtin) - db.raw_db.commit() + db.raw_session.commit() logger.info('Deleted %s GTINs' % (len(gtins))) @@ -126,6 +126,7 @@ def get_gtin_for_article(article_ean, article_unit=None, use_prefix=True): 'Kart': 1, 'Bricka': 1, '½-pall': 2, + '½-pall A': 2, 'tray_no_wrap': 8 } prefixes = [] @@ -273,7 +274,7 @@ def create_gtins(dry_run=True): for unit in article.ArticleUnit: # Skip paket for 21%, should only match HV with plastic wrapping. - if article.ArtNr[0:2] == '21' and unit.AltEnhetKod[0:6].lower() == 'paket': + if article.ArtNr[0:2] == '21' and unit.AltEnhetKod[0:5].lower() == 'paket': logger.info('Skip paket unit for %s' % (article.ArtNr)) continue @@ -354,7 +355,7 @@ def set_storage_type(): for article in articles: article.LagTyp = 4 - db.raw_db.commit() + db.raw_session.commit() logger.info("Updated storage type for %s articles" % (len(articles))) @@ -386,7 +387,7 @@ def set_zone_placement(): else: logger.info("Excluded %s, wrong article class or no balance " % (article.ArtNr)) - db.raw_db.commit() + db.raw_session.commit() logger.info("Updated placement zone for %s articles" % (zone_placements_update)) @@ -409,7 +410,7 @@ def update_decimals_on_alt_units(): updated_units += 1 - db.raw_db.commit() + db.raw_session.commit() logger.info("Updated decimal count for %s article units" % (updated_units)) @@ -454,6 +455,7 @@ if __name__ == '__main__': # Article.clear_article_gtins() logger.info("Creating new GTINs from base GTIN") create_gtins(dry_run=False) + # logger.info("Creating new GTINs from trading goods CSV") # create_gtins_for_trading_goods() diff --git a/pyjeeves/repositories/company.py b/pyjeeves/repositories/company.py index a707296..7c7c532 100644 --- a/pyjeeves/repositories/company.py +++ b/pyjeeves/repositories/company.py @@ -97,7 +97,7 @@ def update_customer_delivery_from_csv(filename='zip_codes_svhl.csv'): logger.info('Amount updated %d' % customers_to_update) # db.raw_db.merge(n1) - db.raw_db.commit() + db.raw_session.commit() logger.info('Succesfully commited updated customers to database') diff --git a/pyjeeves/repositories/warehouse.py b/pyjeeves/repositories/warehouse.py index 44e2466..06b6b41 100644 --- a/pyjeeves/repositories/warehouse.py +++ b/pyjeeves/repositories/warehouse.py @@ -36,9 +36,9 @@ class Warehouse(): ArticleShelf.LagSaldo == 0)).all() for shelf in shelfs: - db.raw_db.delete(shelf) + db.raw_session.delete(shelf) - db.raw_db.commit() + db.raw_session.commit() logger.info('Deleted %s shelfs' % (len(shelfs))) @staticmethod @@ -46,9 +46,9 @@ class Warehouse(): replenish = db.raw_session.query(ItemReplenishmentLevels).all() for repl in replenish: - db.raw_db.delete(repl) + db.raw_session.delete(repl) - db.raw_db.commit() + db.raw_session.commit() logger.info('Deleted old replenishment levels') @staticmethod @@ -78,8 +78,8 @@ class Warehouse(): JAPP_EWMS_multipel=unit_multiple, ForetagKod=1) - db.raw_db.add(new_level) - db.raw_db.commit() + db.raw_session.add(new_level) + db.raw_session.commit() # TODO: Should be moved to separate project with Lindvalls specific code @@ -107,8 +107,8 @@ def update_shelfs_from_csv(filename='shelf_numbers_20211217.csv'): MultiItemsOnBin=multiitems, JAPP_EWMS_AllowMultipleBatchesOnBin=multiitems, ForetagKod=1) - db.raw_db.merge(n1) - db.raw_db.commit() + db.raw_session.merge(n1) + db.raw_session.commit() logger.info('Succesfully commited shelfs to database') diff --git a/requirements.txt b/requirements.txt index 7993e5f..a53292c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,9 @@ -nose==1.3.7 -Sphinx==3.2.1 -pymssql-py38==2.1.4 -SQLAlchemy==1.3.22 -sqlservice==1.2.1 -PyMySQL==0.10.0 -alembic==1.4.2 -PyYAML==5.3.1 -gtin==0.1.13 \ No newline at end of file +nose>=1.3.7 +Sphinx>=3.2.1 +pymssql>=2.2.7 +SQLAlchemy>=1.3.22 +sqlservice>=2.0.0 +PyMySQL>=0.10.0 +alembic>=1.4.2 +PyYAML>=5.3.1 +gtin>=0.1.13 diff --git a/setup.py b/setup.py index 6c9064a..42e7595 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ from setuptools import setup, find_packages -with open('README.rst') as f: +with open('README.md') as f: readme = f.read() with open('LICENSE') as f: