Skip to content
This repository has been archived by the owner on Mar 4, 2020. It is now read-only.

Commit

Permalink
Add Lieferstatus Demo Data
Browse files Browse the repository at this point in the history
Resolve #54
  • Loading branch information
Jan-Ka committed Feb 10, 2020
1 parent 847d92b commit 0568357
Show file tree
Hide file tree
Showing 3 changed files with 4,057 additions and 3,397 deletions.
59 changes: 59 additions & 0 deletions scripts/bug-free-spork_demo_lieferstatus.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
[
{
"status": "laborum consequat incididunt exercitation"
},
{
"status": "laborum ipsum duis nisi labore"
},
{
"status": "magna laborum sunt adipisicing duis"
},
{
"status": "reprehenderit eu velit"
},
{
"status": "officia"
},
{
"status": "veniam sit"
},
{
"status": "nisi adipisicing eiusmod"
},
{
"status": "veniam"
},
{
"status": "esse id duis culpa dolore"
},
{
"status": "dolor nisi elit"
},
{
"status": "veniam enim incididunt mollit"
},
{
"status": "consequat"
},
{
"status": "ex"
},
{
"status": "ad dolore sit nulla"
},
{
"status": "deserunt eiusmod sit anim dolore"
},
{
"status": "mollit nulla ullamco"
},
{
"status": "enim tempor amet voluptate officia"
},
{
"status": "do fugiat nisi sit in"
},
{
"status": "excepteur id consequat velit"
}
]
67 changes: 49 additions & 18 deletions scripts/prepareDemoData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@

import rechnungDemoData from './bug-free-spork_demo_rechnung.json';
import produktDemoData from './bug-free-spork_demo_produkt.json';
import lieferstatusDemoData from './bug-free-spork_demo_lieferstatus.json';

import { IRechnung, IRechnungsposition } from '../shared/shared.module';
import { IRechnung, IRechnungsposition, ILieferstatus } from '../shared/shared.module';

/**
* Copy from rechnung.service.ts
Expand All @@ -23,11 +24,32 @@ interface IJsonProdukt {
'Produkt Betrag Netto': string;
}

interface IJsonLieferstatus {
'status': string;
}

interface IDemoProdukt {
'Produkt Name': string;
'Produkt Betrag Netto': number;
}

interface IGeneratedData {
/**
* Updated Rechnung Array matching the generated new RechnungspositionArray
*/
updatedRechnungArray: IRechnung[];

/**
* Generated Rechnungsposition Array
*/
rechnungspositionArray: IRechnungsposition[];

/**
* Generated Lieferstatus Array
*/
lieferstatusArray: ILieferstatus[];
}

function toDistinctProduktArray(produktArray: IJsonProdukt[]): IDemoProdukt[] {
const result: IDemoProdukt[] = [];
const map = new Map();
Expand Down Expand Up @@ -61,27 +83,27 @@ function reviveRechnungDemoData(importedData: IJsonRechnung[]): IRechnung[] {
});
}

interface IGeneratedData {
/**
* Updated Rechnung Array matching the generated new RechnungspositionArray
*/
updatedRechnungArray: IRechnung[];

/**
* Generated Rechnungsposition Array
*/
rechnungspositionArray: IRechnungsposition[];
/**
* Generates an Integer between two Numbers
* @param min inclusive lower end
* @param max exclusive top end
*/
function randomBetween(min: number, max: number) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min) + min);
}

/**
* Generates a Rechnungposition Array for provided rechnung array
* @param rechnungArray reference to rechnung array
*/
function generate(rechnungArray: IRechnung[], produktArray: IDemoProdukt[]): IGeneratedData {
function generate(rechnungArray: IRechnung[], produktArray: IDemoProdukt[], lieferstatusArray: IJsonLieferstatus[]): IGeneratedData {
const rechnungspositionArray: IRechnungsposition[] = [];
// shallow copy of the input param
// we don't want to change the passed variable by mistake
const updatedRechnungArray = [...rechnungArray];
const generatedLieferstatusArray: ILieferstatus[] = [];

// step through all available Rechnung items
for (const rechnung of updatedRechnungArray) {
Expand All @@ -92,14 +114,14 @@ function generate(rechnungArray: IRechnung[], produktArray: IDemoProdukt[]): IGe

// decide how many produkt we link to a rechnung item
// it will be at least one and up to the amount of provided Produkt
const numPosition = Math.floor(Math.random() * produktArray.length);
const numPosition = randomBetween(0, produktArray.length);
const map = new Map();
let addedProdukt = 0;
let rechnungspositionSum = 0;

while (addedProdukt < numPosition) {
// get a random produkt index
const produktIndex = Math.floor(Math.random() * produktArray.length);
const produktIndex = randomBetween(0, produktArray.length);
const produkt = produktArray[produktIndex];

// skip adding multiple produkts
Expand All @@ -120,27 +142,36 @@ function generate(rechnungArray: IRechnung[], produktArray: IDemoProdukt[]): IGe

// sum of all rechnungsposition items is usually the sum stored inside a rechnung item
rechnung['Betrag Netto'] = rechnungspositionSum;
}

for (const produkt of produktArray) {
const randomStatusNum = randomBetween(0, lieferstatusArray.length);

console.log(`Created ${addedProdukt} Produkt items for ${rechnung['Rechnungs-UID']}`);
generatedLieferstatusArray.push({
'Produkt Name': produkt['Produkt Name'],
Lieferstatus: lieferstatusArray[randomStatusNum].status
});
}

return {
updatedRechnungArray,
rechnungspositionArray
rechnungspositionArray,
lieferstatusArray: generatedLieferstatusArray
};
}

const distinctProduktArray = toDistinctProduktArray(produktDemoData);
const revivedRechnungArray = reviveRechnungDemoData(rechnungDemoData);
const generatedData = generate(revivedRechnungArray, distinctProduktArray);
const generatedData = generate(revivedRechnungArray, distinctProduktArray, lieferstatusDemoData);

console.log('Combined generated Data as JSON');

// we need to normalize some data types to match previously used demo data
// most importantly we want to store numbers in strings to fixate available precision
const normalizedData = {
updatedRechnungArray: [],
rechnungspositionArray: []
rechnungspositionArray: [],
lieferstatusArray: generatedData.lieferstatusArray
};

normalizedData.updatedRechnungArray = generatedData.updatedRechnungArray.map((val) => {
Expand Down
Loading

0 comments on commit 0568357

Please sign in to comment.