@barcoding/widget-piecework-in 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barcoding-widget-piecework-in.mjs","sources":["../../src/lib/piece-work-in-form/piece-work-in-form.component.ts","../../src/lib/piece-work-in-form/piece-work-in-form.component.html","../../src/lib/config/config.component.ts","../../src/lib/config/modal.html","../../src/lib/widget-piecework-in.component.ts","../../src/lib/widget-piecework-in.component.html","../../src/lib/widget-piecework-in.module.ts","../../src/public-api.ts","../../src/barcoding-widget-piecework-in.ts"],"sourcesContent":["import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, Validators, FormGroup } from '@angular/forms';\nimport { FocusService } from '@barcoding/frontend-core';\nimport {\n FaultCategoryControllerService,\n FaultControllerService,\n FaultsCategoryWithRelations,\n FaultWithRelations,\n PieceWorkLineWithRelations,\n SessionWithRelations,\n User,\n UserControllerService,\n UserWithRelations,\n} from '@barcoding/sdk';\nimport { Store } from '@ngxs/store';\nimport { AuthState } from '@barcoding/auth-core';\nimport { PieceWorkLineControllerService } from '@barcoding/sdk';\n\n@Component({\n selector: 'piece-work-in-form',\n styles: [\n `\n kendo-textbox-container {\n width: 100%;\n }\n\n .h_t {\n font: normal normal normal 10px/40px IBM Plex Sans;\n letter-spacing: 0px;\n color: #666666;\n opacity: 1;\n }\n\n .v_t {\n font: normal normal normal 18px/40px IBM Plex Sans;\n letter-spacing: 0px;\n color: #666666;\n opacity: 1;\n }\n\n .spacer {\n display: flex;\n flex-grow: 1;\n }\n `,\n ],\n templateUrl: 'piece-work-in-form.component.html',\n})\nexport class PieceWorkInForm implements OnInit, OnDestroy {\n line: PieceWorkLineWithRelations;\n public finish = false;\n public qty_in = 0;\n constructor(\n private focusService: FocusService,\n private pieceWorkLineApi: PieceWorkLineControllerService,\n public dialogRef: MatDialogRef<PieceWorkInForm>,\n private store: Store,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) {\n this.line = Object.assign({}, data.line);\n this.qty_in = this.line.out - this.line.in;\n }\n\n ngOnInit() {\n this.focusService.unFocus();\n }\n\n ngOnDestroy() {\n this.focusService.setFocus();\n }\n cancel() {\n this.dialogRef.close();\n }\n\n save(qty_in, finish) {\n this.pieceWorkLineApi\n .find({\n filter: JSON.stringify({\n where: { piecework_id: this.line.piecework_id },\n }),\n })\n .subscribe(lines => {\n let isFinished = false;\n const totalLines = lines.length;\n let totalFinishedLines = 0;\n\n lines.forEach(line => {\n if (line.piecework_line_status_id === 2) {\n totalFinishedLines++;\n }\n });\n if (qty_in === this.line.out) {\n totalFinishedLines++;\n }\n if (totalFinishedLines === totalLines) {\n isFinished = true;\n }\n\n this.dialogRef.close({\n qty_in,\n finish,\n isFinished,\n });\n });\n }\n}\n","<div fxLayout=\"column\" style=\"width: 100%\" fxLayoutAlign=\" none\">\n <h4>Piece Work</h4>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <div fxLayout=\"column\" fxLayoutAlign=\"space-between none\">\n <span class=\"h_t\">Assembly Name</span>\n <span class=\"v_t\">{{ line.part?.part_number }}</span>\n </div>\n\n <div class=\"spacer\"></div>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"space-between none\">\n <span class=\"h_t\">Mode</span>\n <span class=\"v_t\">{{ line.mode?.controller }}</span>\n </div>\n\n <div class=\"spacer\"></div>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"space-between none\">\n <span class=\"h_t\">Allocated Time</span>\n <span class=\"v_t\">--</span>\n </div>\n </div>\n <form class=\"k-form\" autocomplete=\"off\" #pieceWork=\"ngForm\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\" fxLayoutGap=\"20px\">\n <kendo-floatinglabel fxFlex=\"80%\" text=\"Qty\">\n <kendo-numerictextbox\n [format]=\"'n0'\"\n style=\"width: 100%\"\n [min]=\"1\"\n required\n [(ngModel)]=\"qty_in\"\n [name]=\"'in'\"\n [max]=\"line.out\"\n type=\"number\"></kendo-numerictextbox>\n </kendo-floatinglabel>\n <mat-checkbox fxFlexAlign=\"center\" name=\"finish\" [(ngModel)]=\"finish\">\n Finish\n </mat-checkbox>\n </div>\n </form>\n</div>\n<div\n style=\"margin-top: 25px\"\n fxLayoutGap=\"10px\"\n fxLayout=\"row\"\n fxLayoutAlign=\"end none\">\n <button (click)=\"cancel()\" mat-raised-button color=\"danger\">Cancel</button>\n <button\n (click)=\"save(qty_in, finish)\"\n [disabled]=\"!pieceWork.valid\"\n mat-raised-button\n class=\"save_button\"\n color=\"primary\">\n Save\n </button>\n</div>\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport {\n ExternalDashboardControllerService,\n ExternalDashboardWithRelations,\n} from '@barcoding/sdk';\n@Component({\n selector: 'assignmentFormDialog',\n templateUrl: 'modal.html',\n styleUrls: ['./style.css'],\n})\nexport class PieceworkInConfigModal implements OnInit {\n public config: any = {};\n constructor(\n public dialogRef: MatDialogRef<PieceworkInConfigModal>,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) {\n this.config = Object.assign({}, data.currentConfig);\n }\n\n ngOnInit() {}\n\n save(config) {\n this.dialogRef.close(config);\n }\n\n onNoClick(): void {\n this.dialogRef.close();\n }\n}\n","<form class=\"k-form\" autocomplete=\"off\" #configForm=\"ngForm\">\n <div fxLayout=\"column\" fxLayoutAlign=\"space-between none\">\n <div fxLayout=\"column\" fxLayoutAlign=\" stretch\">\n <fieldset>\n <legend>Main</legend>\n <label fxFlex class=\"k-form-field\">\n <span>Current User</span>\n <kendo-switch\n name=\"current_user\"\n [(ngModel)]=\"config.current_user\"\n [onLabel]=\"'Yes'\"\n [offLabel]=\"'No'\"\n ></kendo-switch>\n </label>\n </fieldset>\n </div>\n\n <div\n fxLayoutGap=\"20px\"\n style=\"margin-top: 10px\"\n fxLayout=\"row\"\n fxLayoutAlign=\"space-around end\"\n >\n <button fxFlex (click)=\"onNoClick()\" mat-raised-button>Cancel</button>\n <button\n fxFlex\n [disabled]=\"!configForm.form.valid\"\n (click)=\"save(config)\"\n color=\"primary\"\n mat-raised-button\n >\n Save\n </button>\n </div>\n </div>\n</form>\n","import {\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Select, Store } from '@ngxs/store';\nimport {\n ConfigInterfaceDashboard,\n WidgetInterface,\n WidgetParams,\n} from '@barcoding/gridster-core';\nimport {\n ModeAccessViewWithRelations,\n ModeControllerService,\n ModeWithRelations,\n ModuleWithRelations,\n PieceWorkLineControllerService,\n PieceWorkLineStatusControllerControllerService,\n PieceWorkLineStatusWithRelations,\n PieceWorkLineWithRelations,\n PieceworkTransactionStatusControllerService,\n PieceworkTransactionStatusWithRelations,\n PieceWorkWithRelations,\n UserControllerService,\n UserWithRelations,\n WidgetConfigWithRelations,\n} from '@barcoding/sdk';\nimport { PieceWorkFrontState } from '@barcoding/module-piecework';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport {\n ResetStorePieceWork,\n FindPieceWorkEmployee,\n} from '@barcoding/module-piecework';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AuthState } from '@barcoding/auth-core';\nimport { PieceWorkInForm } from './piece-work-in-form/piece-work-in-form.component';\nimport {\n ChangeStatePieceWork,\n isMode,\n ModeState,\n PieceWorkState,\n PieceWorkCollect,\n} from '@barcoding/frontend-core';\nimport { ModuleState } from '@barcoding/core';\nimport { PieceworkInConfigModal } from './config/config.component';\nimport {\n CompositeFilterDescriptor,\n FilterDescriptor,\n} from '@progress/kendo-data-query';\nimport { DataStateChangeEvent } from '@progress/kendo-angular-grid';\nimport { PageEvent } from '@angular/material/paginator';\n\nexport interface PieceWorkInFilters {\n pw_id?: number;\n document?: string;\n user?: UserWithRelations;\n mode?: ModeWithRelations;\n status?: PieceWorkLineStatusWithRelations;\n}\n\n@Component({\n selector: 'widget-piece-work-in',\n styleUrls: ['./widget-piecework-in.component.scss'],\n templateUrl: './widget-piecework-in.component.html',\n})\nexport class WidgetPieceworkInComponent\n extends ConfigInterfaceDashboard\n implements OnInit, OnDestroy, WidgetInterface\n{\n public configChanged$: Subject<any> = new Subject<any>();\n public myConfigSubscription: Subscription;\n public isAdmin = false;\n public item: WidgetConfigWithRelations;\n public params: WidgetParams;\n public filters: any = {\n logic: 'and',\n filters: [\n {\n field: 'piecework_line_status_id',\n value: 1,\n },\n ],\n };\n displayedColumns = [\n 'pw_line',\n 'employee',\n 'document',\n 'assembly',\n 'mode',\n 'unit_price',\n 'percentage',\n 'qty',\n 'in',\n 'finish',\n 'total',\n 'status',\n ]; // column display value\n dataSource: MatTableDataSource<any>;\n @Select(PieceWorkState.pieceworks) pieceworks$: Observable<\n PieceWorkLineWithRelations[]\n >;\n @Select(PieceWorkState.total) total$: Observable<number>;\n\n public pieceworkSubscription: Subscription;\n public employee = null;\n public status = 1;\n public object;\n public barcodes: Array<string> = [];\n public users: UserWithRelations[] = [];\n public objectSubscription: Subscription;\n public statuses: PieceWorkLineStatusWithRelations[] = [];\n public currentUserConfig;\n public state: Observable<any>;\n public stateSubscription: Subscription;\n @Select(PieceWorkState.state) state$: Observable<DataStateChangeEvent>;\n public modes: ModeWithRelations[] = [];\n public defaultItemMode: any = { id: null, controller: 'Show all...' };\n public defaultItemStatus: any = { id: null, name: 'Show all...' };\n\n constructor(\n public modeApi: ModeControllerService,\n private userApi: UserControllerService,\n public store: Store,\n private cdr: ChangeDetectorRef,\n public dialog: MatDialog,\n private statusesApi: PieceWorkLineStatusControllerControllerService,\n private pieceWorkLineApi: PieceWorkLineControllerService\n ) {\n super(dialog, PieceworkInConfigModal, store, '60%');\n }\n\n getValue(field: string, isMultiLine: boolean = false) {\n if (!this.filters) {\n return null;\n }\n\n if (!this.filters.filters) {\n return null;\n }\n const data: any = this.filters.filters.find(\n (value: FilterDescriptor) => value.field === field\n );\n\n if (isMultiLine) {\n if (data && data.value && data.value.length) {\n return data.value.join('\\n');\n }\n }\n\n return data ? data.value : '';\n }\n ngOnInit() {\n this.modeApi\n .find({ filter: JSON.stringify({ where: { is_piecework: true } }) })\n .subscribe(_ => {\n this.modes = _;\n });\n\n this.statusesApi.find().subscribe(_ => {\n this.statuses = _;\n });\n const currentUser = this.store.selectSnapshot<UserWithRelations>(\n AuthState.user\n );\n // example of default filter on start\n // this.filters.filters.push({\n // operator: 'eq',\n // field: 'piecework_id',\n // value: 200,\n // });\n // this.store.dispatch(\n // new ChangeStatePieceWork({\n // skip: 0,\n // sort: [{ field: 'id', dir: 'desc' }],\n // take: 10,\n // filter: this.filters,\n // })\n // );\n this.stateSubscription = this.state$.subscribe(_ => {\n if (_.filter) {\n this.filters = _.filter;\n }\n });\n\n const mode = this.store.selectSnapshot<ModeAccessViewWithRelations | {}>(\n ModeState.mode\n );\n\n const currentModule = this.store.selectSnapshot<ModuleWithRelations>(\n ModuleState.module\n );\n\n if (currentModule) {\n const isAdmin = currentUser.groups.find(\n value => value.module_group_id === currentModule.admin_group_id\n );\n if (isAdmin) {\n this.isAdmin = true;\n }\n }\n\n if (mode && isMode(mode)) {\n const isAdminMode = currentUser.groups.find(\n value => value.module_group_id === mode.admin_group_id\n );\n const isModeratorMode = currentUser.groups.find(\n value => value.module_group_id === mode.moderator_group_id\n );\n console.log(isAdminMode, isModeratorMode);\n if (isModeratorMode || isAdminMode) {\n this.isAdmin = true;\n }\n }\n\n const currentUserConfig =\n this.item.config && this.item.config.current_user ? true : false;\n if (currentUserConfig) {\n this.isAdmin = false;\n }\n\n console.log(`isAdmin: ${this.isAdmin}`);\n\n if (!this.isAdmin) {\n const currentUser = this.store.selectSnapshot<UserWithRelations>(\n AuthState.user\n );\n\n this.users.push(currentUser);\n\n const filters: any = {\n logic: 'and',\n filters: [\n {\n field: 'piecework_line_status_id',\n value: 1,\n },\n {\n field: 'user_id',\n value: currentUser.id,\n },\n ],\n };\n this.store.dispatch(\n new ChangeStatePieceWork({\n skip: 0,\n sort: [{ field: 'id', dir: 'desc' }],\n take: 10,\n filter: filters,\n })\n );\n }\n\n if (this.isAdmin) {\n this.displayedColumns = [\n 'pw_line',\n 'employee',\n 'document',\n 'mode',\n 'percentage',\n 'qty',\n 'finish',\n 'total',\n 'status',\n 'actions',\n ]; // column display value\n }\n\n /**\n * example set filter outside\n */\n // setTimeout(() => {\n // const filters: CompositeFilterDescriptor = {\n // logic: 'and',\n // filters: [\n // {\n // operator: 'eq',\n // field: 'piecework_id',\n // value: 202,\n // },\n // ],\n // };\n // this.store.dispatch(\n // new ChangeStatePieceWork({\n // skip: 0,\n // sort: [{ field: 'id', dir: 'desc' }],\n // take: 10,\n // filter: filters,\n // })\n // );\n // }, 8000);\n\n this.pieceworkSubscription = this.pieceworks$.subscribe(_ => {\n const data = _.map(value => {\n return {\n ...value,\n formIn: value.out - value.in,\n };\n });\n this.dataSource = new MatTableDataSource(data);\n });\n }\n\n getMax(row: PieceWorkLineWithRelations) {\n return row.out - row.in;\n }\n\n registerIn(row: PieceWorkLineWithRelations, qty_in: number, finish) {\n console.log(row, qty_in);\n this.pieceWorkLineApi\n .find({\n filter: JSON.stringify({\n where: { piecework_id: row.piecework_id },\n }),\n })\n .subscribe(lines => {\n let isFinished = false;\n const totalLines = lines.length;\n let totalFinishedLines = 0;\n\n lines.forEach(line => {\n if (line.piecework_line_status_id === 2) {\n totalFinishedLines++;\n }\n });\n if (qty_in === row.out) {\n totalFinishedLines++;\n }\n if (totalFinishedLines === totalLines) {\n isFinished = true;\n }\n\n const user_id = this.store.selectSnapshot<UserWithRelations>(\n AuthState.user\n ).id;\n const finishObject = finish ? qty_in : 0;\n this.store.dispatch(\n new PieceWorkCollect(\n row.piecework_id,\n qty_in,\n row.id,\n user_id,\n finishObject,\n isFinished\n )\n );\n });\n }\n\n buildBarcodeList(value: string) {\n this.barcodes = value\n .split('\\n')\n .filter(value => value != null && value.length > 0)\n .map(value => value.trim());\n console.log(this.barcodes);\n }\n\n valueChange(field, event) {\n console.log(`valueChange: ${field}, ${event}`);\n\n if (!this.filters.filters) {\n this.filters.filters = [];\n }\n\n const filterExists = this.filters.filters.findIndex(\n (value: FilterDescriptor) => value.field === field\n );\n\n if (filterExists >= 0) {\n this.filters.filters[filterExists].value = event;\n } else {\n this.filters.filters.push({\n operator: 'eq',\n field,\n value: event,\n });\n }\n\n this.store.dispatch(\n new ChangeStatePieceWork({\n skip: 0,\n sort: [{ field: 'id', dir: 'desc' }],\n take: 10,\n filter: this.filters,\n })\n );\n }\n\n filterChange(event) {\n if (event) {\n this.userApi\n .find({\n filter: JSON.stringify({\n limit: 5,\n where: { full_name: { like: `%${event}%` } },\n }),\n })\n .subscribe(_ => {\n this.users = _;\n });\n }\n }\n\n ngOnDestroy() {\n if (this.pieceworkSubscription) {\n this.pieceworkSubscription.unsubscribe();\n }\n if (this.myConfigSubscription) {\n this.myConfigSubscription.unsubscribe();\n }\n if (this.objectSubscription) {\n this.objectSubscription.unsubscribe();\n }\n\n if (this.stateSubscription) {\n this.stateSubscription.unsubscribe();\n }\n this.store.dispatch(new ResetStorePieceWork());\n super.destroy();\n }\n\n openInForm(row: PieceWorkLineWithRelations) {\n const dialogRef = this.dialog.open(PieceWorkInForm, {\n width: '40%',\n data: { line: row },\n });\n dialogRef.afterClosed().subscribe(data => {\n if (data) {\n const user_id = this.store.selectSnapshot<UserWithRelations>(\n AuthState.user\n ).id;\n const finish = data.finish ? data.qty_in : 0;\n this.store.dispatch(\n new PieceWorkCollect(\n row.piecework_id,\n data.qty_in,\n row.id,\n user_id,\n finish,\n data.isFinished\n )\n );\n }\n });\n }\n\n changePage(event: PageEvent) {\n const take = event.pageSize;\n const skip = event.pageIndex > 0 ? event.pageIndex * event.pageSize : 0;\n\n this.store.dispatch(\n new ChangeStatePieceWork({\n skip,\n sort: [{ field: 'id', dir: 'desc' }],\n take,\n filter: this.filters,\n })\n );\n }\n\n formatCurrency(value, currency) {\n const region = currency.region;\n const symbol = currency.symbol;\n\n return value\n ? value.toLocaleString(region, { style: 'currency', currency: symbol })\n : 0;\n }\n}\n@Pipe({ name: 'formatTime' })\nexport class FormatTime implements PipeTransform {\n convertTime(input, separator) {\n const pad = input => {\n return input < 10 ? '0' + input : input;\n };\n return [\n pad(Math.floor(input / 3600)),\n pad(Math.floor((input % 3600) / 60)),\n pad(Math.floor(input % 60)),\n ].join(typeof separator !== 'undefined' ? separator : ':');\n }\n\n transform(value: any): any {\n return value ? this.convertTime(value, ':') : '00:00:00';\n }\n}\n","<div fxLayout=\"column\" fxLayoutGap=\"20px\">\n <label fxFlex class=\"k-form-field\">\n <form class=\"k-form\" id=\"piecework_in_form\">\n <div fxLayout=\"row\" fxLayoutGap=\"8px\" fxLayoutAlign=\"start center\">\n <label fxFlex class=\"k-form-field\">\n <span>Barcode</span>\n <kendo-textarea\n placeholder=\"Scan barcodes here\"\n [resizable]=\"'vertical'\"\n [rows]=\"3\"\n [value]=\"getValue('barcodes', true)\"\n (valueChange)=\"buildBarcodeList($event)\"\n flow=\"vertical\"\n >\n </kendo-textarea>\n </label>\n <button\n fxFlex=\"50px\"\n (click)=\"valueChange('barcodes', barcodes)\"\n matTooltip=\"Filter\"\n [matTooltipPosition]=\"'above'\"\n mat-icon-button\n color=\"primary\"\n aria-label=\"Example icon button with a heart icon\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n <div fxLayout=\"row\" fxLayoutGap=\"8px\" fxLayoutAlign=\"start center\">\n <label fxFlex=\"25%\" class=\"k-form-field\">\n <span>PW ID</span>\n <input\n style=\"width: 100%\"\n kendoTextBox\n [value]=\"getValue('piecework_id')\"\n (input)=\"valueChange('piecework_id', $event.target.value)\"\n name=\"piecework_id\"\n type=\"text\"\n />\n </label>\n\n <!-- <label fxFlex=\"20%\" class=\"k-form-field\">\n <span>Barcode</span>\n <kendo-textarea\n [style.marginBottom.px]=\"10\"\n placeholder=\"Event name\"\n resizable=\"auto\"\n flow=\"horizontal\"\n >\n </kendo-textarea>\n\n <!-- <input\n style=\"width: 100%\"\n kendoTextBox\n [value]=\"getValue('barcode')\"\n (input)=\"valueChange('barcode', $event.target.value)\"\n name=\"barcode\"\n type=\"text\"\n /> -->\n\n <label fxFlex=\"25%\" class=\"k-form-field\">\n <span>Employee</span>\n <kendo-combobox\n style=\"width: 100%\"\n name=\"user_id\"\n [value]=\"getValue('user_id')\"\n [filterable]=\"true\"\n (filterChange)=\"filterChange($event)\"\n (valueChange)=\"valueChange('user_id', $event)\"\n [data]=\"users\"\n [textField]=\"'full_name'\"\n [disabled]=\"!isAdmin\"\n [valueField]=\"'id'\"\n [valuePrimitive]=\"true\"\n >\n </kendo-combobox>\n </label>\n\n <label fxFlex=\"25%\" class=\"k-form-field\">\n <span>Mode</span>\n <kendo-dropdownlist\n [defaultItem]=\"defaultItemMode\"\n [data]=\"modes\"\n [value]=\"getValue('mode_id')\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"valueChange('mode_id', $event)\"\n [textField]=\"'controller'\"\n [valueField]=\"'id'\"\n name=\"true\"\n >\n </kendo-dropdownlist>\n </label>\n\n <label fxFlex=\"25%\" class=\"k-form-field\">\n <span>Status</span>\n <kendo-dropdownlist\n [defaultItem]=\"defaultItemStatus\"\n [data]=\"statuses\"\n [value]=\"getValue('piecework_line_status_id')\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"valueChange('piecework_line_status_id', $event)\"\n [textField]=\"'name'\"\n [valueField]=\"'id'\"\n name=\"true\"\n >\n </kendo-dropdownlist>\n </label>\n </div>\n </form>\n </label>\n\n <mat-table #table [dataSource]=\"dataSource\">\n <ng-container cdkColumnDef=\"pw_line\">\n <mat-header-cell *cdkHeaderCellDef>PW</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n <span>{{ row.piecework?.id }}/{{ row.piecework_order_line }}</span>\n </mat-cell>\n </ng-container>\n <ng-container cdkColumnDef=\"employee\">\n <mat-header-cell *cdkHeaderCellDef>Employee</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n <span>{{ row?.piecework?.prepared_for?.full_name }}</span>\n </mat-cell>\n </ng-container>\n <ng-container cdkColumnDef=\"document\">\n <mat-header-cell *cdkHeaderCellDef>Document</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n <span>{{ row.document?.barcode }}</span>\n </mat-cell>\n </ng-container>\n <ng-container cdkColumnDef=\"assembly\">\n <mat-header-cell *cdkHeaderCellDef>Assembly</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n <span>{{ row.part?.part_number }}</span>\n </mat-cell>\n </ng-container>\n <!-- <ng-container cdkColumnDef=\"qty_max\">\n <mat-header-cell *cdkHeaderCellDef>Qty</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n <span>{{ getMaxQtyLeftForRow(row)}}</span>\n </mat-cell>\n </ng-container> -->\n <ng-container cdkColumnDef=\"mode\">\n <mat-header-cell *cdkHeaderCellDef>Mode</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n <span>{{ row.mode?.controller }}</span>\n </mat-cell>\n </ng-container>\n <ng-container cdkColumnDef=\"unit_price\">\n <mat-header-cell *cdkHeaderCellDef>Unit Price</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n {{ formatCurrency(row.unit_price, row.currency) }}\n </mat-cell>\n </ng-container>\n <ng-container cdkColumnDef=\"percentage\">\n <mat-header-cell *cdkHeaderCellDef>Job %</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n {{ row.work_percentage | percent }}\n </mat-cell>\n </ng-container>\n\n <ng-container cdkColumnDef=\"qty\">\n <mat-header-cell *cdkHeaderCellDef>Out / In</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n {{ row.out }} / {{ !row.in ? 0 : row.in }}\n </mat-cell>\n </ng-container>\n\n <ng-container cdkColumnDef=\"in\">\n <mat-header-cell *cdkHeaderCellDef>Qty In</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n {{ !row.in ? 0 : row.in }}\n </mat-cell>\n </ng-container>\n\n <ng-container cdkColumnDef=\"finish\">\n <mat-header-cell *cdkHeaderCellDef>Qty Finish</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n {{ row.finish }}\n </mat-cell>\n </ng-container>\n\n <ng-container cdkColumnDef=\"status\">\n <mat-header-cell *cdkHeaderCellDef>Status</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n {{ row.line_status?.name }}\n </mat-cell>\n </ng-container>\n\n <ng-container cdkColumnDef=\"total\">\n <mat-header-cell *cdkHeaderCellDef>Total</mat-header-cell>\n <mat-cell *cdkCellDef=\"let row\">\n <span>{{ formatCurrency(row.value, row.currency) }}</span>\n </mat-cell>\n </ng-container>\n\n <ng-container cdkColumnDef=\"actions\">\n <mat-header-cell [ngClass]=\"'actionColumn'\" *cdkHeaderCellDef\n >Actions</mat-header-cell\n >\n <mat-cell [ngClass]=\"'actionColumn'\" *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"row.piecework_line_status_id == 1\">\n <div fxLayout=\"row\" fxLayoutGap=\"8px\" fxLayoutAlign=\"start center\">\n <kendo-numerictextbox\n [format]=\"'n0'\"\n style=\"width: 100%\"\n [min]=\"1\"\n [(ngModel)]=\"row.formIn\"\n [name]=\"'in_' + row.id\"\n [max]=\"getMax(row)\"\n type=\"number\"\n ></kendo-numerictextbox>\n <mat-checkbox\n matTooltip=\"Finish\"\n [matTooltipPosition]=\"'above'\"\n fxFlexAlign=\"center\"\n [name]=\"'finish_' + row.id\"\n [(ngModel)]=\"row.formFinish\"\n >\n </mat-checkbox>\n <button\n [disabled]=\"row.in == row.out || row.formIn > row.out - row.in\"\n matTooltip=\"Save\"\n (click)=\"registerIn(row, row.formIn, row.formFinish)\"\n [matTooltipPosition]=\"'above'\"\n mat-icon-button\n color=\"warn\"\n aria-label=\"Example icon button with a heart icon\"\n >\n <mat-icon>save</mat-icon>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"row.piecework_line_status_id == 2\">\n <span>Line finished</span>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <mat-header-row *cdkHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *cdkRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n <mat-paginator\n #paginator\n [length]=\"total$ | async\"\n [pageIndex]=\"0\"\n (page)=\"changePage($event)\"\n [pageSize]=\"10\"\n [pageSizeOptions]=\"[5, 10, 25, 100]\"\n >\n </mat-paginator>\n</div>\n","import { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTableModule } from '@angular/material/table';\nimport { PieceWorkFrontState } from '@barcoding/module-piecework';\nimport { NgxsModule } from '@ngxs/store';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { InputsModule, SwitchModule } from '@progress/kendo-angular-inputs';\nimport { DynamicComponentLoaderModule } from '@barcoding/gridster-core';\nimport { PieceWorkState } from '@barcoding/frontend-core';\nimport { PieceworkInConfigModal } from './config/config.component';\nimport { PieceWorkInForm } from './piece-work-in-form/piece-work-in-form.component';\nimport {\n FormatTime,\n WidgetPieceworkInComponent,\n} from './widget-piecework-in.component';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@NgModule({\n declarations: [\n WidgetPieceworkInComponent,\n FormatTime,\n PieceWorkInForm,\n PieceworkInConfigModal,\n ],\n imports: [\n CommonModule,\n FlexLayoutModule,\n MatDialogModule,\n CdkTableModule,\n MatTableModule,\n MatButtonModule,\n MatCheckboxModule,\n MatPaginatorModule,\n MatIconModule,\n FormsModule,\n InputsModule,\n MatTooltipModule,\n DropDownsModule,\n InputsModule,\n FormsModule,\n SwitchModule,\n NgxsModule.forFeature([PieceWorkFrontState, PieceWorkState]),\n DynamicComponentLoaderModule.forChild(WidgetPieceworkInComponent),\n ],\n exports: [WidgetPieceworkInComponent],\n})\nexport class WidgetPieceworkInModule {}\n","/*\n * Public API Surface of widget-piecework-in\n */\n\nexport * from './lib/widget-piecework-in.component';\nexport * from './lib/widget-piecework-in.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { MatDialogRef } from '@angular/material/dialog';
2
+ import { OnInit } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export declare class PieceworkInConfigModal implements OnInit {
5
+ dialogRef: MatDialogRef<PieceworkInConfigModal>;
6
+ data: any;
7
+ config: any;
8
+ constructor(dialogRef: MatDialogRef<PieceworkInConfigModal>, data: any);
9
+ ngOnInit(): void;
10
+ save(config: any): void;
11
+ onNoClick(): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<PieceworkInConfigModal, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<PieceworkInConfigModal, "assignmentFormDialog", never, {}, {}, never, never>;
14
+ }
@@ -0,0 +1,24 @@
1
+ import { OnInit, OnDestroy } from '@angular/core';
2
+ import { MatDialogRef } from '@angular/material/dialog';
3
+ import { FocusService } from '@barcoding/frontend-core';
4
+ import { PieceWorkLineWithRelations } from '@barcoding/sdk';
5
+ import { Store } from '@ngxs/store';
6
+ import { PieceWorkLineControllerService } from '@barcoding/sdk';
7
+ import * as i0 from "@angular/core";
8
+ export declare class PieceWorkInForm implements OnInit, OnDestroy {
9
+ private focusService;
10
+ private pieceWorkLineApi;
11
+ dialogRef: MatDialogRef<PieceWorkInForm>;
12
+ private store;
13
+ data: any;
14
+ line: PieceWorkLineWithRelations;
15
+ finish: boolean;
16
+ qty_in: number;
17
+ constructor(focusService: FocusService, pieceWorkLineApi: PieceWorkLineControllerService, dialogRef: MatDialogRef<PieceWorkInForm>, store: Store, data: any);
18
+ ngOnInit(): void;
19
+ ngOnDestroy(): void;
20
+ cancel(): void;
21
+ save(qty_in: any, finish: any): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<PieceWorkInForm, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<PieceWorkInForm, "piece-work-in-form", never, {}, {}, never, never>;
24
+ }
@@ -0,0 +1,71 @@
1
+ import { ChangeDetectorRef, OnDestroy, OnInit, PipeTransform } from '@angular/core';
2
+ import { MatTableDataSource } from '@angular/material/table';
3
+ import { Store } from '@ngxs/store';
4
+ import { ConfigInterfaceDashboard, WidgetInterface, WidgetParams } from '@barcoding/gridster-core';
5
+ import { ModeControllerService, ModeWithRelations, PieceWorkLineControllerService, PieceWorkLineStatusControllerControllerService, PieceWorkLineStatusWithRelations, PieceWorkLineWithRelations, UserControllerService, UserWithRelations, WidgetConfigWithRelations } from '@barcoding/sdk';
6
+ import { Observable, Subject, Subscription } from 'rxjs';
7
+ import { MatDialog } from '@angular/material/dialog';
8
+ import { DataStateChangeEvent } from '@progress/kendo-angular-grid';
9
+ import { PageEvent } from '@angular/material/paginator';
10
+ import * as i0 from "@angular/core";
11
+ export interface PieceWorkInFilters {
12
+ pw_id?: number;
13
+ document?: string;
14
+ user?: UserWithRelations;
15
+ mode?: ModeWithRelations;
16
+ status?: PieceWorkLineStatusWithRelations;
17
+ }
18
+ export declare class WidgetPieceworkInComponent extends ConfigInterfaceDashboard implements OnInit, OnDestroy, WidgetInterface {
19
+ modeApi: ModeControllerService;
20
+ private userApi;
21
+ store: Store;
22
+ private cdr;
23
+ dialog: MatDialog;
24
+ private statusesApi;
25
+ private pieceWorkLineApi;
26
+ configChanged$: Subject<any>;
27
+ myConfigSubscription: Subscription;
28
+ isAdmin: boolean;
29
+ item: WidgetConfigWithRelations;
30
+ params: WidgetParams;
31
+ filters: any;
32
+ displayedColumns: string[];
33
+ dataSource: MatTableDataSource<any>;
34
+ pieceworks$: Observable<PieceWorkLineWithRelations[]>;
35
+ total$: Observable<number>;
36
+ pieceworkSubscription: Subscription;
37
+ employee: any;
38
+ status: number;
39
+ object: any;
40
+ barcodes: Array<string>;
41
+ users: UserWithRelations[];
42
+ objectSubscription: Subscription;
43
+ statuses: PieceWorkLineStatusWithRelations[];
44
+ currentUserConfig: any;
45
+ state: Observable<any>;
46
+ stateSubscription: Subscription;
47
+ state$: Observable<DataStateChangeEvent>;
48
+ modes: ModeWithRelations[];
49
+ defaultItemMode: any;
50
+ defaultItemStatus: any;
51
+ constructor(modeApi: ModeControllerService, userApi: UserControllerService, store: Store, cdr: ChangeDetectorRef, dialog: MatDialog, statusesApi: PieceWorkLineStatusControllerControllerService, pieceWorkLineApi: PieceWorkLineControllerService);
52
+ getValue(field: string, isMultiLine?: boolean): any;
53
+ ngOnInit(): void;
54
+ getMax(row: PieceWorkLineWithRelations): number;
55
+ registerIn(row: PieceWorkLineWithRelations, qty_in: number, finish: any): void;
56
+ buildBarcodeList(value: string): void;
57
+ valueChange(field: any, event: any): void;
58
+ filterChange(event: any): void;
59
+ ngOnDestroy(): void;
60
+ openInForm(row: PieceWorkLineWithRelations): void;
61
+ changePage(event: PageEvent): void;
62
+ formatCurrency(value: any, currency: any): any;
63
+ static ɵfac: i0.ɵɵFactoryDeclaration<WidgetPieceworkInComponent, never>;
64
+ static ɵcmp: i0.ɵɵComponentDeclaration<WidgetPieceworkInComponent, "widget-piece-work-in", never, {}, {}, never, never>;
65
+ }
66
+ export declare class FormatTime implements PipeTransform {
67
+ convertTime(input: any, separator: any): string;
68
+ transform(value: any): any;
69
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormatTime, never>;
70
+ static ɵpipe: i0.ɵɵPipeDeclaration<FormatTime, "formatTime">;
71
+ }
@@ -0,0 +1,24 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./widget-piecework-in.component";
3
+ import * as i2 from "./piece-work-in-form/piece-work-in-form.component";
4
+ import * as i3 from "./config/config.component";
5
+ import * as i4 from "@angular/common";
6
+ import * as i5 from "@angular/flex-layout";
7
+ import * as i6 from "@angular/material/dialog";
8
+ import * as i7 from "@angular/cdk/table";
9
+ import * as i8 from "@angular/material/table";
10
+ import * as i9 from "@angular/material/button";
11
+ import * as i10 from "@angular/material/checkbox";
12
+ import * as i11 from "@angular/material/paginator";
13
+ import * as i12 from "@angular/material/icon";
14
+ import * as i13 from "@angular/forms";
15
+ import * as i14 from "@progress/kendo-angular-inputs";
16
+ import * as i15 from "@angular/material/tooltip";
17
+ import * as i16 from "@progress/kendo-angular-dropdowns";
18
+ import * as i17 from "@ngxs/store";
19
+ import * as i18 from "@barcoding/gridster-core";
20
+ export declare class WidgetPieceworkInModule {
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<WidgetPieceworkInModule, never>;
22
+ static ɵmod: i0.ɵɵNgModuleDeclaration<WidgetPieceworkInModule, [typeof i1.WidgetPieceworkInComponent, typeof i1.FormatTime, typeof i2.PieceWorkInForm, typeof i3.PieceworkInConfigModal], [typeof i4.CommonModule, typeof i5.FlexLayoutModule, typeof i6.MatDialogModule, typeof i7.CdkTableModule, typeof i8.MatTableModule, typeof i9.MatButtonModule, typeof i10.MatCheckboxModule, typeof i11.MatPaginatorModule, typeof i12.MatIconModule, typeof i13.FormsModule, typeof i14.InputsModule, typeof i15.MatTooltipModule, typeof i16.DropDownsModule, typeof i14.InputsModule, typeof i13.FormsModule, typeof i14.SwitchModule, typeof i17.ɵbc, typeof i18.DynamicComponentLoaderModule], [typeof i1.WidgetPieceworkInComponent]>;
23
+ static ɵinj: i0.ɵɵInjectorDeclaration<WidgetPieceworkInModule>;
24
+ }
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@barcoding/widget-piecework-in",
3
+ "version": "0.0.1",
4
+ "peerDependencies": {
5
+ "@angular/common": "^12.1.2",
6
+ "@angular/core": "^12.1.2"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.2.0",
10
+ "@barcoding/sdk": "latest",
11
+ "@barcoding/core": "latest",
12
+ "@barcoding/backend-core": "latest"
13
+ },
14
+ "module": "fesm2015/barcoding-widget-piecework-in.mjs",
15
+ "es2020": "fesm2020/barcoding-widget-piecework-in.mjs",
16
+ "esm2020": "esm2020/barcoding-widget-piecework-in.mjs",
17
+ "fesm2020": "fesm2020/barcoding-widget-piecework-in.mjs",
18
+ "fesm2015": "fesm2015/barcoding-widget-piecework-in.mjs",
19
+ "typings": "barcoding-widget-piecework-in.d.ts",
20
+ "exports": {
21
+ "./package.json": {
22
+ "default": "./package.json"
23
+ },
24
+ ".": {
25
+ "types": "./barcoding-widget-piecework-in.d.ts",
26
+ "esm2020": "./esm2020/barcoding-widget-piecework-in.mjs",
27
+ "es2020": "./fesm2020/barcoding-widget-piecework-in.mjs",
28
+ "es2015": "./fesm2015/barcoding-widget-piecework-in.mjs",
29
+ "node": "./fesm2015/barcoding-widget-piecework-in.mjs",
30
+ "default": "./fesm2020/barcoding-widget-piecework-in.mjs"
31
+ }
32
+ },
33
+ "sideEffects": false
34
+ }
@@ -0,0 +1,2 @@
1
+ export * from './lib/widget-piecework-in.component';
2
+ export * from './lib/widget-piecework-in.module';