Merged PR 323: #925 Favicons | #1066 Catch Payer Undefined Error | #1061 View Destroyed Fix | #985 Checkmark Margin |

Related work items: #1066
This commit is contained in:
Sebastian Neumair
2020-09-22 15:07:12 +00:00
committed by Lorenz Hilpert
62 changed files with 1215 additions and 612 deletions

View File

@@ -58,6 +58,7 @@
"apps/sales/src/favicon.ico",
"apps/sales/src/assets",
"apps/sales/src/manifest.webmanifest",
"apps/sales/src/browserconfig.xml",
"apps/sales/src/silent-refresh.html"
],
"styles": [
@@ -577,6 +578,76 @@
}
}
}
},
"@domain/crm": {
"projectType": "library",
"root": "apps/domain/crm",
"sourceRoot": "apps/domain/crm/src",
"prefix": "crm",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "apps/domain/crm/tsconfig.lib.json",
"project": "apps/domain/crm/ng-package.json"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "apps/domain/crm/src/test.ts",
"tsConfig": "apps/domain/crm/tsconfig.spec.json",
"karmaConfig": "apps/domain/crm/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"apps/domain/crm/tsconfig.lib.json",
"apps/domain/crm/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
"@domain/checkout": {
"projectType": "library",
"root": "apps/domain/checkout",
"sourceRoot": "apps/domain/checkout/src",
"prefix": "checkout",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "apps/domain/checkout/tsconfig.lib.json",
"project": "apps/domain/checkout/ng-package.json"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "apps/domain/checkout/src/test.ts",
"tsConfig": "apps/domain/checkout/tsconfig.spec.json",
"karmaConfig": "apps/domain/checkout/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"apps/domain/checkout/tsconfig.lib.json",
"apps/domain/checkout/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
}
},
"defaultProject": "sales"

View File

@@ -0,0 +1,25 @@
# Checkout
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.14.
## Code scaffolding
Run `ng generate component component-name --project checkout` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project checkout`.
> Note: Don't forget to add `--project checkout` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build checkout` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build checkout`, go to the dist folder `cd dist/checkout` and run `npm publish`.
## Running unit tests
Run `ng test checkout` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -0,0 +1,32 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/domain/checkout'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -0,0 +1,7 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/domain/checkout",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -0,0 +1,8 @@
{
"name": "@domain/checkout",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^8.2.14",
"@angular/core": "^8.2.14"
}
}

View File

@@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { CheckoutComponent } from './checkout.component';
describe('CheckoutComponent', () => {
let component: CheckoutComponent;
let fixture: ComponentFixture<CheckoutComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [CheckoutComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(CheckoutComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,16 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'checkout-checkout',
template: `
<p>
checkout works!
</p>
`,
styles: [],
})
export class CheckoutComponent implements OnInit {
constructor() {}
ngOnInit() {}
}

View File

@@ -0,0 +1,9 @@
import { NgModule } from '@angular/core';
import { CheckoutComponent } from './checkout.component';
@NgModule({
declarations: [CheckoutComponent],
imports: [],
exports: [CheckoutComponent],
})
export class CheckoutModule {}

View File

@@ -0,0 +1,12 @@
import { TestBed } from '@angular/core/testing';
import { CheckoutService } from './checkout.service';
describe('CheckoutService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: CheckoutService = TestBed.get(CheckoutService);
expect(service).toBeTruthy();
});
});

View File

@@ -0,0 +1,8 @@
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class CheckoutService {
constructor() {}
}

View File

@@ -0,0 +1,7 @@
/*
* Public API Surface of checkout
*/
export * from './lib/checkout.service';
export * from './lib/checkout.component';
export * from './lib/checkout.module';

View File

@@ -0,0 +1,15 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -0,0 +1,26 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -0,0 +1,17 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -0,0 +1,17 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"checkout",
"camelCase"
],
"component-selector": [
true,
"element",
"checkout",
"kebab-case"
]
}
}

25
apps/domain/crm/README.md Normal file
View File

@@ -0,0 +1,25 @@
# Crm
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.14.
## Code scaffolding
Run `ng generate component component-name --project crm` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project crm`.
> Note: Don't forget to add `--project crm` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build crm` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build crm`, go to the dist folder `cd dist/crm` and run `npm publish`.
## Running unit tests
Run `ng test crm` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -0,0 +1,32 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/domain/crm'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -0,0 +1,7 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../../dist/domain/crm",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -0,0 +1,8 @@
{
"name": "@domain/crm",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^8.2.14",
"@angular/core": "^8.2.14"
}
}

View File

@@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { CrmComponent } from './crm.component';
describe('CrmComponent', () => {
let component: CrmComponent;
let fixture: ComponentFixture<CrmComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [CrmComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(CrmComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,16 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'crm-crm',
template: `
<p>
crm works!
</p>
`,
styles: [],
})
export class CrmComponent implements OnInit {
constructor() {}
ngOnInit() {}
}

View File

@@ -0,0 +1,9 @@
import { NgModule } from '@angular/core';
import { CrmComponent } from './crm.component';
@NgModule({
declarations: [CrmComponent],
imports: [],
exports: [CrmComponent],
})
export class CrmModule {}

View File

@@ -0,0 +1,12 @@
import { TestBed } from '@angular/core/testing';
import { CrmService } from './crm.service';
describe('CrmService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: CrmService = TestBed.get(CrmService);
expect(service).toBeTruthy();
});
});

View File

@@ -0,0 +1,8 @@
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class CrmService {
constructor() {}
}

View File

@@ -0,0 +1,7 @@
/*
* Public API Surface of crm
*/
export * from './lib/crm.service';
export * from './lib/crm.component';
export * from './lib/crm.module';

View File

@@ -0,0 +1,15 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -0,0 +1,26 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -0,0 +1,17 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -0,0 +1,17 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"crm",
"camelCase"
],
"component-selector": [
true,
"element",
"crm",
"kebab-case"
]
}
}

View File

@@ -1,6 +1,9 @@
import { Injectable } from '@angular/core';
import { QueryTokenDTO } from '@swagger/cat';
import { CustomerService as CustomerApiService, PayerService } from '@swagger/crm';
import {
CustomerService as CustomerApiService,
PayerService,
} from '@swagger/crm';
import { map, switchMap, catchError } from 'rxjs/operators';
import { Observable, of, combineLatest, BehaviorSubject } from 'rxjs';
import { CustomerMapping } from '../mappings/customer.mapping';
@@ -28,7 +31,11 @@ import { CustomerFilters } from '../../modules/customer';
})
export class CustomerService {
addAddressError$ = new BehaviorSubject<any>(null);
constructor(private customerService: CustomerApiService, private mapper: CustomerMapping, private payerService: PayerService) {}
constructor(
private customerService: CustomerApiService,
private mapper: CustomerMapping,
private payerService: PayerService
) {}
createCustomer(_customer: User): Observable<User> {
const customer: CustomerDTO = this.mapper.fromUser(_customer);
@@ -97,7 +104,9 @@ export class CustomerService {
filter?: CustomerFilters
): Observable<CustomerSearchResponse> {
const noFilters = filter
? isNullOrUndefined(filter.bonuscard) && isNullOrUndefined(filter.guestaccount) && isNullOrUndefined(filter.onlineshop)
? isNullOrUndefined(filter.bonuscard) &&
isNullOrUndefined(filter.guestaccount) &&
isNullOrUndefined(filter.onlineshop)
? true
: false
: false;
@@ -112,9 +121,15 @@ export class CustomerService {
filter:
filter && !noFilters
? {
['bonuscard']: !isNullOrUndefined(filter.bonuscard) ? String(filter.bonuscard) : undefined,
['guestaccount']: !isNullOrUndefined(filter.guestaccount) ? String(filter.guestaccount) : undefined,
['onlineshop']: !isNullOrUndefined(filter.onlineshop) ? String(filter.onlineshop) : undefined,
['bonuscard']: !isNullOrUndefined(filter.bonuscard)
? String(filter.bonuscard)
: undefined,
['guestaccount']: !isNullOrUndefined(filter.guestaccount)
? String(filter.guestaccount)
: undefined,
['onlineshop']: !isNullOrUndefined(filter.onlineshop)
? String(filter.onlineshop)
: undefined,
}
: undefined,
};
@@ -125,7 +140,9 @@ export class CustomerService {
throw new Error(response.message);
}
return {
customers: response.result.map((t) => this.mapper.customerInfoDTOtoUser(t)),
customers: response.result.map((t) =>
this.mapper.customerInfoDTOtoUser(t)
),
hits: response.hits,
message: response.message,
};
@@ -133,33 +150,44 @@ export class CustomerService {
);
}
getCustomer(customer$: Observable<ResponseArgsOfCustomerDTO>): Observable<User> {
getCustomer(
customer$: Observable<ResponseArgsOfCustomerDTO>
): Observable<User> {
return customer$.pipe(
map((response: ResponseArgsOfCustomerDTO) => {
if (response.error) {
throw new Error(response.message);
}
return {
shippingAddresses: response.result.shippingAddresses.map((addressEnity) => addressEnity.id),
shippingAddresses: response.result.shippingAddresses.map(
(addressEnity) => addressEnity.id
),
user: this.mapper.customerDTOtoUser(response.result),
};
}),
switchMap((customerResult) => {
const user = customerResult.user;
if (!customerResult.shippingAddresses || customerResult.shippingAddresses.length === 0) {
if (
!customerResult.shippingAddresses ||
customerResult.shippingAddresses.length === 0
) {
return of(customerResult.user);
}
const observablesOfShippingAddresses = customerResult.shippingAddresses.map((t) => {
return this.customerService.CustomerGetShippingaddress(t).pipe(
map((response) => {
if (response.error) {
throw new Error(response.message);
}
return response.result;
})
);
});
const shippingAddresses$ = combineLatest(observablesOfShippingAddresses);
const observablesOfShippingAddresses = customerResult.shippingAddresses.map(
(t) => {
return this.customerService.CustomerGetShippingaddress(t).pipe(
map((response) => {
if (response.error) {
throw new Error(response.message);
}
return response.result;
})
);
}
);
const shippingAddresses$ = combineLatest(
observablesOfShippingAddresses
);
return shippingAddresses$.pipe(
switchMap((address: ShippingAddressDTO[]) => {
const updatedUser = user;
@@ -185,34 +213,39 @@ export class CustomerService {
}),
switchMap((customer: User) => {
const updateCustomer = customer;
return this.customerService.CustomerGetAssignedPayersByCustomerId(customer.id).pipe(
map((response) => {
if (response.error) {
throw new Error(response.message);
}
return { customer: customer, assignedPayers: response.result };
}),
switchMap((response) => {
if (Array.isArray(response.assignedPayers) && response.assignedPayers.length > 0) {
const invoiceAddresses = response.assignedPayers.map((t) => {
return {
...this.mapper.fromAssignedPayerDtoToAddress(t),
synced: true,
};
});
const defaultAddress = invoiceAddresses.reduce((ad1, ad2) => {
if (ad1.defaultSince >= ad2.defaultSince) {
return ad1;
}
return ad2;
});
updateCustomer.poossible_invoice_addresses = invoiceAddresses;
updateCustomer.invoice_address = defaultAddress;
}
return this.customerService
.CustomerGetAssignedPayersByCustomerId(customer.id)
.pipe(
map((response) => {
if (response.error) {
throw new Error(response.message);
}
return { customer: customer, assignedPayers: response.result };
}),
switchMap((response) => {
if (
Array.isArray(response.assignedPayers) &&
response.assignedPayers.length > 0
) {
const invoiceAddresses = response.assignedPayers.map((t) => {
return {
...this.mapper.fromAssignedPayerDtoToAddress(t),
synced: true,
};
});
const defaultAddress = invoiceAddresses.reduce((ad1, ad2) => {
if (ad1.defaultSince >= ad2.defaultSince) {
return ad1;
}
return ad2;
});
updateCustomer.poossible_invoice_addresses = invoiceAddresses;
updateCustomer.invoice_address = defaultAddress;
}
return of(updateCustomer);
})
);
return of(updateCustomer);
})
);
})
);
}
@@ -231,7 +264,9 @@ export class CustomerService {
throw new Error(response.message);
}
return {
customers: response.result.map((t) => this.mapper.customerInfoDTOtoUser(t)),
customers: response.result.map((t) =>
this.mapper.customerInfoDTOtoUser(t)
),
hits: 0,
};
})
@@ -259,28 +294,32 @@ export class CustomerService {
isDefault: true,
};
if (shippingAddress.synced === true) {
return this.customerService.CustomerModifyShippingAddressFlag(params).pipe(
map((response) => {
if (response.error) {
throw new Error(response.message);
}
return response.result;
})
);
return this.customerService
.CustomerModifyShippingAddressFlag(params)
.pipe(
map((response) => {
if (response.error) {
throw new Error(response.message);
}
return response.result;
})
);
} else {
return this.addShippingAddress(customerId, {
...shippingAddress,
id: null,
}).pipe(
switchMap(() => {
return this.customerService.CustomerModifyShippingAddressFlag(params).pipe(
map((response) => {
if (response.error) {
throw new Error(response.message);
}
return response.result;
})
);
return this.customerService
.CustomerModifyShippingAddressFlag(params)
.pipe(
map((response) => {
if (response.error) {
throw new Error(response.message);
}
return response.result;
})
);
})
);
}
@@ -332,7 +371,10 @@ export class CustomerService {
if (!isNullOrUndefined(shippingAddress.id)) {
const params = {
shippingAddressId: shippingAddress.id,
shippingAddress: this.mapper.fromAddressToShippingAddressDTO(shippingAddress, !isNullOrUndefined(shippingAddress.id)),
shippingAddress: this.mapper.fromAddressToShippingAddressDTO(
shippingAddress,
!isNullOrUndefined(shippingAddress.id)
),
customerId: customerId,
};
return this.customerService.CustomerUpdateShippingAddress(params).pipe(
@@ -360,7 +402,10 @@ export class CustomerService {
);
} else {
const params = {
shippingAddress: this.mapper.fromAddressToShippingAddressDTO(shippingAddress, !isNullOrUndefined(shippingAddress.id)),
shippingAddress: this.mapper.fromAddressToShippingAddressDTO(
shippingAddress,
!isNullOrUndefined(shippingAddress.id)
),
customerId: customerId,
};
return this.customerService.CustomerCreateShippingAddress(params).pipe(
@@ -420,15 +465,27 @@ export class CustomerService {
payerId: payerResponse.result.id,
isDefault: true,
};
return this.customerService.CustomerAddPayerReference(referenceParamsparams).pipe(
map((response) => {
if (response.error) {
throw new Error(response.message);
}
this.addAddressError$.next(undefined);
return response.result.payer.data;
})
);
return this.customerService
.CustomerAddPayerReference(referenceParamsparams)
.pipe(
map((response) => {
if (response.error) {
throw new Error(response.message);
}
if (!response.result || !response.result.payer) {
throw new Error(
response.message ||
'Beim Anlegen der Rechnungsadress-Referenz ist ein Fehler aufgetreten.'
);
}
this.addAddressError$.next(undefined);
return response.result.payer.data;
}),
catchError((err) => {
throw new Error(err.message);
})
);
})
);
} else {
@@ -466,7 +523,10 @@ export class CustomerService {
if (response.error) {
throw new Error(response.message);
}
return response.result.map((t, index) => <Country>{ index, id: t.id, key: t.isO3166_A_3, value: t.name });
return response.result.map(
(t, index) =>
<Country>{ index, id: t.id, key: t.isO3166_A_3, value: t.name }
);
})
);
}

View File

@@ -73,6 +73,8 @@ export class ProductResultsComponent implements OnInit, OnDestroy, AfterViewInit
radioButtonGroup: RadioButtonGroup;
acrhiveFilter: boolean;
timoutScheisseUmwerk: any;
get areFiltersNegative() {
if (this.selectedFilterMode) {
return this.selectedFilterMode === Side.RIGHT;
@@ -184,7 +186,7 @@ export class ProductResultsComponent implements OnInit, OnDestroy, AfterViewInit
this.loading = false;
this.cdr.detectChanges();
setTimeout(() => {
this.timoutScheisseUmwerk = setTimeout(() => {
this.cdr.detectChanges();
this.scroller.checkViewportSize();
}, 500);
@@ -388,5 +390,7 @@ export class ProductResultsComponent implements OnInit, OnDestroy, AfterViewInit
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
clearTimeout(this.timoutScheisseUmwerk);
}
}

View File

@@ -9,7 +9,7 @@ import {
Output,
EventEmitter,
} from '@angular/core';
import { AutocompleteDTO } from '@swagger/oms/lib';
import { AutocompleteDTO } from '@swagger/oms';
import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
import { ResultItemComponent } from './result-item';
import { AutocompleteOptions } from '../../defs';

View File

@@ -1,5 +1,5 @@
import { Component, ChangeDetectionStrategy, Input, HostBinding, Output, EventEmitter } from '@angular/core';
import { AutocompleteDTO } from '@swagger/oms/lib';
import { AutocompleteDTO } from '@swagger/oms';
import { Highlightable } from '@angular/cdk/a11y';
@Component({

View File

@@ -1,4 +1,4 @@
import { VATType } from '@swagger/oms/lib';
import { VATType } from '@swagger/oms';
export const VatTypeName = new Map<VATType, string>([
[0, ''],

View File

@@ -8,7 +8,7 @@ import { FormGroup, FormArray } from '@angular/forms';
import { ProcessingStatusPipe, PickUpDateOptionsToDisplayValuesPipe, ProcessingStatusOptionsPipe } from '../../pipes';
import { DatePipe } from '@angular/common';
import { ShelfNavigationService } from '../../shared/services';
import { OrderItemProcessingStatusValue } from '@swagger/oms/lib';
import { OrderItemProcessingStatusValue } from '@swagger/oms';
import { ErrorService } from 'apps/sales/src/app/core/error/component/error.service';
@Component({

View File

@@ -5,7 +5,7 @@ import { ShelfNavigationService } from '../../shared/services';
import { filter, map, distinctUntilChanged, shareReplay, take, withLatestFrom, first } from 'rxjs/operators';
import { isNullOrUndefined } from 'util';
import { DatePipe } from '@angular/common';
import { OrderItemProcessingStatusValue } from '@swagger/oms/lib';
import { OrderItemProcessingStatusValue } from '@swagger/oms';
import { ShelfEditFormService } from '../../services/shelf-edit-form.service';
import { ProcessingStatusOptionsPipe, ProcessingStatusPipe, PickUpDateOptionsToDisplayValuesPipe } from '../../pipes';
import { ErrorService } from 'apps/sales/src/app/core/error/component/error.service';

View File

@@ -2,7 +2,7 @@ import { Component, ChangeDetectionStrategy, Input, TemplateRef, OnInit } from '
import { HistoryStateFacade } from '@shelf-store/history';
import { DetailsFacade } from '@shelf-store/details';
import { OrderDetailsCardInput } from '../../../components/order-details-card';
import { OrderItemListItemDTO, OrderItemProcessingStatusValue } from '@swagger/oms/lib';
import { OrderItemListItemDTO, OrderItemProcessingStatusValue } from '@swagger/oms';
import { Observable } from 'rxjs';
import { map, filter, shareReplay, take } from 'rxjs/operators';

View File

@@ -1,5 +1,5 @@
<div class="isa-flex isa-font-weight-bold isa-font-color-customer">
<div *ngFor="let feature of features$ | async">
<div *ngFor="let feature of features$ | async" class="isa-mr-28">
<lib-icon name="Check_f"></lib-icon>
{{ feature.description }}
</div>

View File

@@ -1,5 +1,5 @@
import { Pipe, PipeTransform } from '@angular/core';
import { VATDTO } from '@swagger/checkout/lib';
import { VATDTO } from '@swagger/checkout';
@Pipe({
name: 'vatDtoToVatType',

View File

@@ -9,12 +9,9 @@ import {
DeleteLastPreviousPath,
ClearBreadcrumbs,
} from 'apps/sales/src/app/core/store/actions/breadcrumb.actions';
import {
ChangeCurrentRoute,
AddProcess,
} from 'apps/sales/src/app/core/store/actions/process.actions';
import { ChangeCurrentRoute, AddProcess } from 'apps/sales/src/app/core/store/actions/process.actions';
import { Breadcrumb } from 'apps/sales/src/app/core/models/breadcrumb.model';
import { OrderItemListItemDTO } from '@swagger/oms/lib';
import { OrderItemListItemDTO } from '@swagger/oms';
import { ProcessSelectors } from 'apps/sales/src/app/core/store/selectors/process.selectors';
import { Process } from 'apps/sales/src/app/core/models/process.model';
@@ -51,11 +48,7 @@ export class ShelfNavigationService {
}
}
navigateToEdit(order: {
orderNumber?: string;
compartmentCode?: string;
processingStatus?: number;
}) {
navigateToEdit(order: { orderNumber?: string; compartmentCode?: string; processingStatus?: number }) {
if (!order) {
return this.navigateToSearch();
}
@@ -66,11 +59,7 @@ export class ShelfNavigationService {
this.navigateToRoute(path, breadcrumb);
}
updateDetailsNavigation(order: {
orderNumber?: string;
compartmentCode?: string;
processingStatus?: number;
}) {
updateDetailsNavigation(order: { orderNumber?: string; compartmentCode?: string; processingStatus?: number }) {
if (!order) {
return this.navigateToSearch();
}
@@ -88,13 +77,7 @@ export class ShelfNavigationService {
this.replaceRoute(path, breadcrumb);
}
navigateToResultList({
searchQuery,
numberOfHits,
}: {
searchQuery: string;
numberOfHits: number;
}) {
navigateToResultList({ searchQuery, numberOfHits }: { searchQuery: string; numberOfHits: number }) {
this.createTab();
const path = '/shelf/results';
const breadcrumb = this.getResultListBreadcrumb(searchQuery, numberOfHits);
@@ -102,10 +85,7 @@ export class ShelfNavigationService {
}
navigateToHistory(orderitem: OrderItemListItemDTO) {
this.navigateToRoute(
this.getHistoryPath(orderitem),
`Historie ${orderitem.orderItemSubsetId}`
);
this.navigateToRoute(this.getHistoryPath(orderitem), `Historie ${orderitem.orderItemSubsetId}`);
}
getHistoryPath(data: {
@@ -122,24 +102,14 @@ export class ShelfNavigationService {
}
}
updateResultPageBreadcrumb(data: {
numberOfHits: number;
searchQuery: string;
}) {
updateResultPageBreadcrumb(data: { numberOfHits: number; searchQuery: string }) {
this.store.dispatch(new DeleteBreadcrumbsForProcess(1));
this.store.dispatch(
new AddBreadcrumb(
{ name: 'Warenausgabe', path: '/shelf/search' },
'shelf'
)
);
this.store.dispatch(new AddBreadcrumb({ name: 'Warenausgabe', path: '/shelf/search' }, 'shelf'));
const path = '/shelf/results';
this.store.dispatch(
new AddBreadcrumb(
{
name: `${data.searchQuery} (${data.numberOfHits} ${
data.numberOfHits > 1 ? 'Ergebnisse' : 'Ergebnis'
})`,
name: `${data.searchQuery} (${data.numberOfHits} ${data.numberOfHits > 1 ? 'Ergebnisse' : 'Ergebnis'})`,
path,
},
'shelf'
@@ -149,22 +119,15 @@ export class ShelfNavigationService {
private replaceRoute(route: string, breadcrumbName: string) {
this.router.navigate([route]);
this.store.dispatch(
new UpdateCurrentBreadcrumbName(breadcrumbName, 'shelf')
);
this.store.dispatch(new UpdateCurrentBreadcrumbName(breadcrumbName, 'shelf'));
}
private resetBreadcrumbs(): void {
this.store.dispatch(new ClearBreadcrumbs('shelf'));
this.store.dispatch(
new AddBreadcrumb({ name: 'Warenausgabe', path: '/shelf' }, 'shelf', true)
);
this.store.dispatch(new AddBreadcrumb({ name: 'Warenausgabe', path: '/shelf' }, 'shelf', true));
}
private async navigateToRoute(
route: string,
breadcrumbName: string
): Promise<boolean> {
private async navigateToRoute(route: string, breadcrumbName: string): Promise<boolean> {
this.store.dispatch(
new AddBreadcrumb(
<Breadcrumb>{
@@ -195,9 +158,7 @@ export class ShelfNavigationService {
this.store.dispatch(new PopLastBreadcrumbs(this.getEditBreadCrumb()));
if (previous) {
this.store.dispatch(
new PopLastBreadcrumbs(this.getDetailsBreadcrumb(previous))
);
this.store.dispatch(new PopLastBreadcrumbs(this.getDetailsBreadcrumb(previous)));
}
await this.navigateToDetails(data, { replaceLastVisited });
@@ -219,9 +180,7 @@ export class ShelfNavigationService {
}
) {
if (previous) {
this.store.dispatch(
new PopLastBreadcrumbs(this.getDetailsBreadcrumb(previous))
);
this.store.dispatch(new PopLastBreadcrumbs(this.getDetailsBreadcrumb(previous)));
}
this.navigateToDetails(data, { replaceLastVisited: true });
}
@@ -230,17 +189,11 @@ export class ShelfNavigationService {
this.store.dispatch(new DeleteLastPreviousPath());
}
private getResultListBreadcrumb(
searchQuery: string,
numberOfHits: number
): string {
private getResultListBreadcrumb(searchQuery: string, numberOfHits: number): string {
return `${searchQuery} (${numberOfHits} Ergebnisse)`;
}
getDetailsBreadcrumb(data: {
orderNumber?: string;
compartmentCode?: string;
}): string {
getDetailsBreadcrumb(data: { orderNumber?: string; compartmentCode?: string }): string {
if (data.compartmentCode) {
return `${data.compartmentCode}`;
}
@@ -251,12 +204,7 @@ export class ShelfNavigationService {
return 'Bearbeiten';
}
private getDetailsPath(data: {
orderNumber?: string;
compartmentCode?: string;
processingStatus?: number;
edit?: boolean;
}): string {
private getDetailsPath(data: { orderNumber?: string; compartmentCode?: string; processingStatus?: number; edit?: boolean }): string {
let url = '';
if (data.compartmentCode) {
url = `/shelf/details/compartment/${data.compartmentCode}/${data.processingStatus}`;
@@ -272,8 +220,7 @@ export class ShelfNavigationService {
}
private createTab() {
const processExists =
this.store.selectSnapshot(ProcessSelectors.getProcessesCount) > 0;
const processExists = this.store.selectSnapshot(ProcessSelectors.getProcessesCount) > 0;
if (!processExists) {
this.createProcess();
}
@@ -314,27 +261,15 @@ export class ShelfNavigationService {
return false;
}
if (
current.orderNumber &&
previous.orderNumber &&
current.orderNumber !== previous.orderNumber
) {
if (current.orderNumber && previous.orderNumber && current.orderNumber !== previous.orderNumber) {
return true;
}
if (
current.compartmentCode &&
previous.compartmentCode &&
current.compartmentCode !== previous.compartmentCode
) {
if (current.compartmentCode && previous.compartmentCode && current.compartmentCode !== previous.compartmentCode) {
return true;
}
if (
current.processingStatus &&
previous.processingStatus &&
current.processingStatus !== previous.processingStatus
) {
if (current.processingStatus && previous.processingStatus && current.processingStatus !== previous.processingStatus) {
return true;
}

View File

@@ -4,18 +4,13 @@ import { BranchSelectors } from 'apps/sales/src/app/core/store/selectors/branch.
import { Observable, NEVER } from 'rxjs';
import { switchMap, map, take, catchError } from 'rxjs/operators';
import { CollectingShelfService } from 'apps/sales/src/app/core/services/collecting-shelf.service';
import {
AutocompleteTokenDTO,
ResponseArgsOfIEnumerableOfAutocompleteDTO,
} from '@swagger/oms/lib';
import { AutocompleteTokenDTO, ResponseArgsOfIEnumerableOfAutocompleteDTO } from '@swagger/oms';
import { SearchStateFacade } from '@shelf-store';
import { CustomerService } from '@sales/core-services';
@Injectable({ providedIn: 'root' })
export class ShelfSearchFacadeService {
@Select(BranchSelectors.getUserBranch) currentUserBranchId$: Observable<
string
>;
@Select(BranchSelectors.getUserBranch) currentUserBranchId$: Observable<string>;
constructor(
private readonly customerService: CustomerService,
@@ -52,12 +47,9 @@ export class ShelfSearchFacadeService {
allowCustomerCardSearch: true,
}
) {
const searchQuery = await this.getSearchQuery(
this.getBarcodeSearchQuery(barcode),
{
allowCustomerCardSearch: options.allowCustomerCardSearch,
}
);
const searchQuery = await this.getSearchQuery(this.getBarcodeSearchQuery(barcode), {
allowCustomerCardSearch: options.allowCustomerCardSearch,
});
if (!this.isValidSearchQuery(searchQuery)) {
return;
@@ -67,18 +59,13 @@ export class ShelfSearchFacadeService {
return this.requestSearch(true);
}
searchForAutocomplete(
queryString: string,
options: { selectedFilters?: { [key: string]: string } } = {}
) {
searchForAutocomplete(queryString: string, options: { selectedFilters?: { [key: string]: string } } = {}) {
const searchQuery = queryString.trim();
const autoCompleteQuery: AutocompleteTokenDTO = this.generateAutocompleteToken(
{
queryString: searchQuery,
filter: options.selectedFilters || {},
take: 5,
}
);
const autoCompleteQuery: AutocompleteTokenDTO = this.generateAutocompleteToken({
queryString: searchQuery,
filter: options.selectedFilters || {},
take: 5,
});
if (!this.isValidSearchQuery(searchQuery)) {
return NEVER;
@@ -91,10 +78,7 @@ export class ShelfSearchFacadeService {
return this.searchStateFacade.fetchResult({ isNewSearch });
}
private getSearchQuery(
queryString: string,
options: { allowCustomerCardSearch: boolean }
): Promise<string> {
private getSearchQuery(queryString: string, options: { allowCustomerCardSearch: boolean }): Promise<string> {
if (options.allowCustomerCardSearch && this.isCustomerCard(queryString)) {
return this.getCustomerNumber(queryString);
}
@@ -116,16 +100,8 @@ export class ShelfSearchFacadeService {
};
}
private requestAutocompleteSearch(
autocompleteToken: AutocompleteTokenDTO
): Observable<ResponseArgsOfIEnumerableOfAutocompleteDTO> {
return this.currentUserBranchId$.pipe(
switchMap(() =>
this.collectingShelfService.searchWarenausgabeAutocomplete(
autocompleteToken
)
)
);
private requestAutocompleteSearch(autocompleteToken: AutocompleteTokenDTO): Observable<ResponseArgsOfIEnumerableOfAutocompleteDTO> {
return this.currentUserBranchId$.pipe(switchMap(() => this.collectingShelfService.searchWarenausgabeAutocomplete(autocompleteToken)));
}
private isValidSearchQuery(queryString: string): boolean {
@@ -146,9 +122,7 @@ export class ShelfSearchFacadeService {
.searchCustomer(customerCardNumber.trim())
.pipe(
map((response) => response.customers),
map((customers) =>
customers[0] ? customers[0].customerNumber : customerCardNumber
),
map((customers) => (customers[0] ? customers[0].customerNumber : customerCardNumber)),
catchError(() => customerCardNumber),
take(1)
)

View File

@@ -4,7 +4,7 @@ import { Article, File } from '../../defs';
import { Observable, of } from 'rxjs';
import { Store, select } from '@ngrx/store';
import { DisplayInfoDTO } from '@swagger/eis/lib';
import { DisplayInfoDTO } from '@swagger/eis';
import { selectTaskById } from 'apps/sales/src/app/store/branch/task-calendar/task-calendar.selectors';
@Component({

View File

@@ -1,5 +1,5 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DisplayInfoDTO } from '@swagger/eis/lib';
import { DisplayInfoDTO } from '@swagger/eis';
import { Task } from '../defs';
import { fromDisplayInfoToTask } from '../../../store/branch/task-calendar/mappings';

View File

@@ -1,4 +1,4 @@
import { DisplayInfoDTO } from '@swagger/eis/lib';
import { DisplayInfoDTO } from '@swagger/eis';
import { fromDisplayInfoToTask } from './task-mapper';
import { getColorForTask } from 'apps/sales/src/app/modules/task-calendar/helpers';
import { CalendarItem } from 'apps/sales/src/app/modules/task-calendar/defs';

View File

@@ -2,7 +2,7 @@ import { fromProcessStatusToTaskStatus } from './task-status.mapper';
import { taskTypeMapper } from './task-type-mapper';
import { fromTimeToTimeWindow } from './time-window.mapper';
import { taskIsAllDay, taskIsMultiDay } from './task-duration.mapper';
import { DisplayInfoDTO } from '@swagger/eis/lib';
import { DisplayInfoDTO } from '@swagger/eis';
import { Task } from 'apps/sales/src/app/modules/task-calendar/defs';
export function fromDisplayInfoToTask(source: DisplayInfoDTO): Task {

View File

@@ -1,5 +1,5 @@
import { Task } from 'apps/sales/src/app/modules/task-calendar/defs';
import { ProcessingStatus } from '@swagger/eis/lib';
import { ProcessingStatus } from '@swagger/eis';
export function fromProcessStatusToTaskStatus(processingStatus: ProcessingStatus): Task['status'] {
// tslint:disable: no-bitwise

View File

@@ -1,4 +1,4 @@
import { CustomerDTO } from '@swagger/crm/lib';
import { CustomerDTO } from '@swagger/crm';
import { Customer } from '../defs';
import { customerDtoToCustomerBaseData } from './customer-dto-to-customer-base-data.mapper';
import { customerDtoToCustomerAddresses } from './customer-dto-to-customer-addresses.mapper';

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 975 B

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -0,0 +1,133 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1024.000000pt" height="1024.000000pt" viewBox="0 0 1024.000000 1024.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M720 5370 l0 -580 125 0 125 0 0 250 0 250 231 -2 230 -3 2 -245 2
-245 123 -3 122 -3 0 581 0 581 -122 -3 -123 -3 -2 -215 -2 -215 -230 -3 -231
-2 0 220 0 220 -125 0 -125 0 0 -580z"/>
<path d="M5840 5740 l0 -211 -37 39 c-76 79 -222 104 -340 60 -81 -30 -171
-121 -201 -203 -55 -150 -47 -335 20 -468 57 -113 167 -179 308 -185 102 -4
157 15 219 77 l41 41 0 -50 0 -51 105 3 c58 2 105 6 105 11 0 4 0 264 0 577
l0 570 -110 0 -110 0 0 -210z m-110 -288 c101 -51 143 -202 100 -364 -33 -120
-176 -172 -281 -103 -140 92 -118 415 31 474 40 16 112 13 150 -7z"/>
<path d="M7010 5370 l0 -580 105 0 105 0 0 52 0 51 36 -37 c62 -64 106 -81
214 -81 88 0 101 3 162 33 75 37 125 89 163 168 38 80 48 144 43 278 -5 129
-18 177 -75 259 -59 85 -199 146 -311 135 -62 -6 -156 -49 -193 -89 l-29 -31
0 211 0 211 -110 0 -110 0 0 -580z m517 64 c100 -82 121 -278 42 -397 -38 -58
-80 -80 -149 -80 -103 0 -169 66 -188 188 -9 58 -2 158 13 200 15 38 56 85 93
105 56 31 140 23 189 -16z"/>
<path d="M8760 5370 l0 -580 115 0 115 0 0 580 0 580 -115 0 -115 0 0 -580z"/>
<path d="M2848 5635 c-179 -49 -282 -251 -250 -488 13 -104 40 -165 97 -226
122 -130 344 -142 463 -24 l42 42 0 -67 c-1 -128 -25 -181 -100 -219 -49 -25
-103 -29 -162 -11 -40 12 -88 58 -88 84 0 11 -22 14 -115 14 -131 0 -131 0
-94 -80 56 -123 165 -180 349 -180 159 0 273 40 341 120 74 86 73 81 77 583
l3 447 -106 0 -105 0 0 -56 0 -57 -40 46 c-69 78 -189 106 -312 72z m242 -185
c53 -27 88 -83 101 -159 12 -75 -1 -155 -33 -214 -33 -59 -67 -80 -137 -85
-52 -4 -67 -1 -105 22 -139 81 -134 380 8 442 46 20 120 17 166 -6z"/>
<path d="M3765 5633 c-188 -68 -285 -213 -285 -428 0 -134 41 -244 121 -323
146 -144 407 -157 563 -28 43 35 100 122 111 169 l7 27 -104 0 -105 0 -24 -37
c-37 -56 -71 -76 -136 -81 -109 -7 -184 58 -199 172 l-7 46 297 0 296 0 0 58
c-1 180 -88 335 -227 404 -59 29 -78 33 -162 35 -73 3 -108 -1 -146 -14z m221
-173 c39 -25 69 -71 78 -122 l7 -38 -181 0 c-99 0 -180 3 -180 8 0 27 25 86
47 113 58 69 154 85 229 39z"/>
<path d="M4752 5635 c-52 -16 -115 -58 -142 -94 l-19 -26 -1 58 0 57 -110 0
-110 0 0 -420 0 -420 115 0 115 0 0 258 c0 141 5 273 10 292 11 41 61 94 103
109 80 30 171 -3 194 -69 8 -24 12 -125 12 -312 l1 -278 116 0 116 0 -4 333
c-3 294 -6 337 -22 375 -24 56 -96 118 -159 137 -62 18 -157 18 -215 0z"/>
<path d="M8175 5631 c-193 -66 -307 -266 -277 -489 31 -234 184 -373 412 -375
163 -2 293 71 358 200 44 87 47 83 -76 83 l-110 0 -12 -31 c-38 -91 -190 -120
-271 -51 -34 28 -63 84 -73 145 l-7 37 302 0 301 0 -6 68 c-9 96 -25 159 -54
222 -28 60 -100 138 -153 166 -89 46 -241 57 -334 25z m200 -160 c65 -30 105
-86 105 -147 l0 -24 -175 0 c-173 0 -175 0 -175 22 0 35 39 106 71 129 59 41
114 48 174 20z"/>
<path d="M1762 5298 c3 -324 4 -334 26 -380 48 -97 140 -148 269 -148 86 0
155 28 215 87 l48 47 0 -57 0 -58 105 3 105 3 0 415 0 415 -110 3 -110 3 0
-248 c0 -264 -6 -306 -47 -362 -67 -88 -220 -80 -259 14 -11 27 -14 93 -14
315 l0 280 -116 0 -115 0 3 -332z"/>
<path d="M6152 5293 c3 -307 5 -341 22 -373 51 -98 144 -150 265 -150 93 0
154 23 214 81 28 27 53 49 55 49 2 0 2 -24 1 -52 l-3 -53 107 -3 107 -3 0 421
0 420 -109 0 -109 0 -4 -263 c-3 -259 -3 -263 -29 -312 -35 -69 -84 -97 -162
-92 -49 3 -63 8 -90 35 l-32 32 -3 300 -3 300 -115 0 -115 0 3 -337z"/>
<path d="M8842 4478 c-18 -18 -14 -46 7 -58 15 -7 23 -6 35 6 21 21 20 41 -3
54 -24 13 -24 13 -39 -2z"/>
<path d="M8988 4479 c-39 -22 -5 -79 34 -58 21 11 24 39 6 57 -14 14 -18 14
-40 1z"/>
<path d="M3480 4247 l0 -237 88 0 c98 0 148 18 194 66 70 75 77 223 15 315
-37 56 -91 78 -201 86 l-96 6 0 -236z m211 160 c49 -32 74 -88 74 -167 0 -121
-52 -178 -170 -188 l-65 -5 0 192 0 191 64 0 c49 0 71 -5 97 -23z"/>
<path d="M4830 4245 l0 -235 125 0 c118 0 125 1 125 20 0 19 -7 20 -100 20
l-100 0 0 215 0 215 -25 0 -25 0 0 -235z"/>
<path d="M6811 4466 c-26 -31 14 -71 45 -45 8 7 14 22 12 33 -4 26 -40 33 -57
12z"/>
<path d="M8430 4245 l0 -235 25 0 25 0 0 108 c0 123 16 170 63 187 36 12 78
-10 88 -45 4 -14 7 -76 8 -137 1 -106 2 -113 21 -113 19 0 20 7 20 139 0 131
-1 142 -22 166 -28 31 -85 43 -128 25 -16 -7 -30 -16 -30 -21 0 -5 -4 -9 -10
-9 -6 0 -10 35 -10 85 0 84 0 85 -25 85 l-25 0 0 -235z"/>
<path d="M9578 4463 c-3 -4 -2 -79 0 -165 4 -147 5 -158 23 -158 18 0 19 10
21 145 1 80 2 153 2 163 1 17 -38 31 -46 15z"/>
<path d="M7338 4393 c-3 -44 -5 -48 -30 -51 -38 -4 -40 -42 -3 -42 l25 0 0
-126 c0 -69 4 -134 10 -144 20 -37 120 -37 120 1 0 16 -5 18 -25 13 -47 -12
-55 7 -55 137 l0 119 40 0 c33 0 40 3 40 20 0 17 -7 20 -40 20 l-40 0 0 50 c0
43 -3 50 -19 50 -17 0 -20 -8 -23 -47z"/>
<path d="M3983 4336 c-30 -14 -53 -42 -53 -65 0 -21 42 -11 62 14 38 48 134
19 126 -37 -2 -18 -16 -25 -69 -38 -36 -9 -78 -24 -92 -33 -47 -31 -53 -120
-10 -153 42 -32 118 -29 152 5 19 19 19 19 24 0 3 -10 13 -19 24 -19 17 0 18
10 15 142 -3 134 -5 144 -27 167 -29 30 -105 38 -152 17z m135 -198 c-4 -40
-11 -57 -32 -75 -33 -28 -79 -30 -106 -3 -41 41 -17 84 62 111 80 28 81 27 76
-33z"/>
<path d="M4335 4336 c-31 -13 -55 -51 -55 -86 0 -31 41 -67 105 -90 33 -12 65
-26 72 -32 36 -29 -6 -88 -62 -88 -37 0 -75 28 -75 55 0 9 -9 15 -25 15 -34 0
-33 -31 3 -70 55 -61 177 -47 207 23 26 63 0 107 -79 133 -94 30 -119 61 -78
97 36 32 112 11 112 -31 0 -7 11 -12 25 -12 29 0 31 10 10 49 -24 47 -99 64
-160 37z"/>
<path d="M5229 4327 c-47 -31 -69 -79 -69 -152 0 -110 51 -170 145 -170 46 0
58 4 84 29 55 53 27 80 -31 31 -56 -47 -126 -21 -146 54 -5 22 -7 43 -4 46 3
3 54 5 114 5 l108 0 0 35 c0 113 -113 181 -201 122z m106 -23 c19 -8 45 -55
45 -84 0 -19 -6 -20 -86 -20 l-86 0 6 33 c11 56 69 91 121 71z"/>
<path d="M5583 4334 c-36 -18 -58 -62 -49 -99 7 -29 53 -60 111 -76 73 -20 95
-59 55 -99 -39 -39 -130 -14 -130 35 0 9 -10 15 -26 15 -24 0 -25 -3 -19 -27
10 -43 43 -71 91 -79 85 -12 149 29 149 96 0 50 -24 75 -89 96 -67 21 -96 40
-96 63 0 26 32 51 66 51 35 0 47 -8 63 -37 12 -23 51 -32 51 -13 0 27 -32 69
-61 79 -43 15 -78 14 -116 -5z"/>
<path d="M5931 4332 c-90 -49 -107 -221 -29 -293 36 -35 87 -45 138 -30 35 10
80 51 80 72 0 18 -40 8 -64 -16 -57 -57 -156 -4 -156 84 0 20 5 21 115 21 113
0 115 0 115 23 0 116 -106 191 -199 139z m113 -44 c15 -13 29 -38 32 -55 l7
-33 -85 0 c-47 0 -87 3 -91 6 -9 9 20 75 41 90 26 20 68 17 96 -8z"/>
<path d="M6340 4343 c-8 -3 -25 -15 -37 -26 l-23 -20 0 21 c0 17 -6 22 -26 22
-24 0 -26 -3 -20 -31 3 -17 6 -92 6 -165 0 -127 1 -134 20 -134 19 0 20 7 20
104 0 120 11 161 51 181 38 20 65 19 89 -5 18 -18 20 -33 20 -150 l0 -130 25
0 25 0 0 124 c0 67 -5 137 -11 155 -17 48 -84 74 -139 54z"/>
<path d="M7030 4332 c-27 -13 -37 -26 -44 -55 -14 -53 13 -85 94 -115 35 -12
70 -28 77 -34 34 -28 -7 -88 -60 -88 -40 0 -77 24 -77 51 0 14 -7 19 -25 19
-33 0 -33 -29 0 -69 46 -54 165 -51 201 5 21 31 20 90 -1 114 -10 11 -40 27
-69 36 -93 30 -118 61 -80 98 32 33 114 9 114 -32 0 -7 11 -12 25 -12 29 0 31
10 10 49 -25 49 -102 65 -165 33z"/>
<path d="M7798 4335 c-34 -19 -48 -44 -48 -84 0 -40 23 -60 107 -91 62 -23 68
-28 71 -57 6 -60 -76 -86 -123 -38 -14 13 -25 29 -25 35 0 5 -9 10 -20 10 -29
0 -26 -45 4 -75 46 -46 149 -45 192 2 28 30 32 87 9 120 -8 12 -39 29 -68 38
-88 28 -98 35 -95 69 2 23 10 33 29 40 37 13 78 0 91 -29 7 -16 20 -25 33 -25
18 0 21 5 18 24 -12 61 -113 96 -175 61z"/>
<path d="M8139 4327 c-47 -31 -69 -80 -69 -150 0 -98 41 -159 115 -173 68 -12
124 23 140 89 6 24 5 27 -19 27 -19 0 -26 -5 -26 -18 0 -25 -41 -62 -69 -62
-58 0 -91 50 -91 135 0 87 33 135 94 135 25 0 66 -41 66 -66 0 -15 35 -19 44
-6 2 4 -4 26 -14 49 -28 64 -108 83 -171 40z"/>
<path d="M8870 4331 c-75 -40 -103 -163 -57 -251 53 -100 181 -106 239 -11 18
28 23 51 23 106 0 55 -5 78 -23 106 -40 65 -116 86 -182 50z m122 -50 c32 -28
33 -32 33 -106 0 -74 -1 -78 -33 -106 -38 -34 -69 -37 -104 -9 -37 28 -51 72
-46 137 4 48 10 61 37 85 40 36 72 36 113 -1z"/>
<path d="M9290 4343 c-8 -3 -25 -15 -37 -26 l-23 -20 0 21 c0 17 -6 22 -26 22
-22 0 -25 -3 -20 -22 3 -13 6 -87 6 -165 0 -134 1 -143 19 -143 17 0 19 10 23
118 4 124 13 152 55 171 35 16 61 13 83 -9 18 -18 20 -33 20 -150 l0 -130 25
0 25 0 0 124 c0 67 -5 137 -11 155 -17 48 -84 74 -139 54z"/>
<path d="M6810 4175 l0 -165 25 0 25 0 0 165 0 165 -25 0 -25 0 0 -165z"/>
<path d="M9572 4068 c-32 -32 8 -80 48 -58 34 18 19 70 -20 70 -9 0 -21 -5
-28 -12z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="/assets/icons/mstile-150x150.png"/>
<TileColor>#da532c</TileColor>
</tile>
</msapplication>
</browserconfig>

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@@ -7,9 +7,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,600,700" rel="stylesheet" />
<link rel="apple-touch-icon" sizes="180x180" href="/assets/icons/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/assets/icons/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/assets/icons/favicon-16x16.png" />
<link rel="mask-icon" href="/assets/icons/safari-pinned-tab.svg" color="#5bbad5" />
<link rel="manifest" href="manifest.webmanifest" crossorigin="use-credentials" />
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,600,700" rel="stylesheet" />
<meta name="theme-color" content="#1976d2" />
<style>
.app-loader {

View File

@@ -2,118 +2,128 @@
"name": "Hugendubel Instore Mitarbeiter App",
"short_name": "Hima",
"start_url": "https://isa-integration.paragon-data.net/",
"theme_color": "#1976d2",
"background_color": "#fafafa",
"display": "fullscreen",
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone",
"lang": "de",
"icons": [
{
"src": "assets/icons/ios/ios-appicon-76-76.png",
"sizes": "76x76",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-appicon-120-120.png",
"sizes": "120x120",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-appicon-152-152.png",
"sizes": "152x152",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-appicon-180-180.png",
"sizes": "180x180",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-appicon-1024-1024.png",
"sizes": "1024x1024",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-launchimage-640-960.png",
"sizes": "640x960",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-launchimage-640-1136.png",
"sizes": "640x1136",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-launchimage-750-1334.png",
"sizes": "750x1334",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-launchimage-768-1024.png",
"sizes": "768x1024",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-launchimage-1024-768.png",
"sizes": "1024x768",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-launchimage-1242-2208.png",
"sizes": "1242x2208",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-launchimage-1334-750.png",
"sizes": "1334x750",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-launchimage-1536-2048.png",
"sizes": "1536x2048",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-launchimage-2048-1536.png",
"sizes": "2048x1536",
"type": "image/png"
},
{
"src": "assets/icons/ios/ios-launchimage-2208-1242.png",
"sizes": "2208x1242",
"type": "image/png"
},
{
"src": "assets/icons/android/android-launchericon-48-48.png",
"sizes": "48x48",
"type": "image/png"
},
{
"src": "assets/icons/android/android-launchericon-72-72.png",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "assets/icons/android/android-launchericon-96-96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "assets/icons/android/android-launchericon-128-128.png",
"sizes": "128x128",
"type": "image/png"
},
{
"src": "assets/icons/android/android-launchericon-144-144.png",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "assets/icons/android/android-launchericon-192-192.png",
"src": "/assets/icons/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "assets/icons/android/android-launchericon-512-512.png",
"src": "/assets/icons/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-appicon-76-76.png",
"sizes": "76x76",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-appicon-120-120.png",
"sizes": "120x120",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-appicon-152-152.png",
"sizes": "152x152",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-appicon-180-180.png",
"sizes": "180x180",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-appicon-1024-1024.png",
"sizes": "1024x1024",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-launchimage-640-960.png",
"sizes": "640x960",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-launchimage-640-1136.png",
"sizes": "640x1136",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-launchimage-750-1334.png",
"sizes": "750x1334",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-launchimage-768-1024.png",
"sizes": "768x1024",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-launchimage-1024-768.png",
"sizes": "1024x768",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-launchimage-1242-2208.png",
"sizes": "1242x2208",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-launchimage-1334-750.png",
"sizes": "1334x750",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-launchimage-1536-2048.png",
"sizes": "1536x2048",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-launchimage-2048-1536.png",
"sizes": "2048x1536",
"type": "image/png"
},
{
"src": "/assets/icons/ios/ios-launchimage-2208-1242.png",
"sizes": "2208x1242",
"type": "image/png"
},
{
"src": "/assets/icons/android/android-launchericon-48-48.png",
"sizes": "48x48",
"type": "image/png"
},
{
"src": "/assets/icons/android/android-launchericon-72-72.png",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "/assets/icons/android/android-launchericon-96-96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "/assets/icons/android/android-launchericon-128-128.png",
"sizes": "128x128",
"type": "image/png"
},
{
"src": "/assets/icons/android/android-launchericon-144-144.png",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "/assets/icons/android/android-launchericon-192-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/assets/icons/android/android-launchericon-512-512.png",
"sizes": "512x512",
"type": "image/png"
}

452
package-lock.json generated
View File

File diff suppressed because it is too large Load Diff

View File

@@ -8,23 +8,8 @@
"test:isa": "ng test sales",
"lint": "ng lint",
"e2e": "ng e2e",
"build": "npm-run-all -l -n build:lib:* build:sales:dev",
"build-prod": "npm-run-all -l -n build:lib:* build:sales:prod",
"build:sales:dev": "ng build --configuration=development",
"build:sales:prod": "ng build --prod",
"build:lib": "npm-run-all -l -n build:lib:*",
"build:lib:native-container": "ng build native-container",
"build:lib:sso": "ng build sso",
"build:lib:ui": "ng build ui",
"build:lib:isa-remission": "ng build @isa/remission",
"build:lib:swagger-availability": "ng build @swagger/availability",
"build:lib:swagger-cat": "ng build @swagger/cat",
"build:lib:swagger-checkout": "ng build @swagger/checkout",
"build:lib:swagger-crm": "ng build @swagger/crm",
"build:lib:swagger-isa": "ng build @swagger/isa",
"build:lib:swagger-oms": "ng build @swagger/oms",
"build:lib:swagger-print": "ng build @swagger/print",
"build:lib:swagger-eis": "ng build @swagger/eis",
"build": "ng build --configuration=development",
"build-prod": "ng build --prod",
"gen:swagger": "npm-run-all -l -n gen:swagger:*",
"gen:swagger:availability": "ng-swagger-gen --config ng-swagger-gen/availability.json",
"gen:swagger:cat": "ng-swagger-gen --config ng-swagger-gen/cat.json",

View File

@@ -39,58 +39,31 @@
"apps/sales/src/app/core/services/index.ts"
],
"@swagger/availability": [
"dist/swagger/availability"
],
"@swagger/availability/*": [
"dist/swagger/availability/*"
"apps/swagger/availability/src/public-api.ts"
],
"@swagger/checkout": [
"dist/swagger/checkout"
],
"@swagger/checkout/*": [
"dist/swagger/checkout/*"
"apps/swagger/checkout/src/public-api.ts"
],
"@swagger/crm": [
"dist/swagger/crm"
],
"@swagger/crm/*": [
"dist/swagger/crm/*"
"apps/swagger/crm/src/public-api.ts"
],
"@swagger/isa": [
"dist/swagger/isa"
],
"@swagger/isa/*": [
"dist/swagger/isa/*"
"apps/swagger/isa/src/public-api.ts"
],
"@swagger/oms": [
"dist/swagger/oms"
],
"@swagger/oms/*": [
"dist/swagger/oms/*"
"apps/swagger/oms/src/public-api.ts"
],
"@swagger/print": [
"dist/swagger/print"
],
"@swagger/print/*": [
"dist/swagger/print/*"
"apps/swagger/print/src/public-api.ts"
],
"@swagger/cat-search": [
"dist/swagger/cat-search"
],
"@swagger/cat-search/*": [
"dist/swagger/cat-search/*"
"apps/swagger/cat-search/src/public-api.ts"
],
"@swagger/cat": [
"dist/swagger/cat"
],
"@swagger/cat/*": [
"dist/swagger/cat/*"
"apps/swagger/cat/src/public-api.ts"
],
"@swagger/eis": [
"dist/swagger/eis"
],
"@swagger/eis/*": [
"dist/swagger/eis/*"
"apps/swagger/eis/src/public-api.ts"
],
"shared": [
"libs/shared/src"
@@ -99,10 +72,7 @@
"libs/shared/src/*"
],
"native-container": [
"dist/native-container"
],
"native-container/*": [
"dist/native-container/*"
"apps/native-container/src/public-api.ts"
],
"@shelf-store": [
"apps/sales/src/app/store/customer/shelf"
@@ -114,10 +84,13 @@
"apps/sales/src/app/modules/ui/*"
],
"@isa/remission": [
"dist/isa/remission"
"apps/isa/remission/src/public-api.ts"
],
"@isa/remission/*": [
"dist/isa/remission/*"
"@domain/crm": [
"apps/domain/crm/src/public-api.ts"
],
"@domain/checkout": [
"apps/domain/checkout/src/public-api.ts"
]
}
}