Skip to content

Commit

Permalink
acquisition: implement order views
Browse files Browse the repository at this point in the history
* Adds order and order line brief view.
* Adds order and order line detail view.
* Adds link to acquisition menu.
* Updates vendor html templates to use translate directive instead pipe on title label.

Co-Authored-by: Laurent Dubois <laurent.dubois@itld-solutions.be>
  • Loading branch information
lauren-d committed Jan 27, 2020
1 parent 4de8ce7 commit 55a7c9d
Show file tree
Hide file tree
Showing 22 changed files with 1,060 additions and 175 deletions.
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
"jquery": "^3.4.1",
"lodash-es": "4.17.14",
"moment": "^2.24.0",
"ngx-bootstrap": "^5.2.0",
"ngx-bootstrap": "^5.3.2",
"ngx-toastr": "^10.2.0",
"ngx-toggle-switch": "^2.0.5",
"rxjs": "~6.4.0",
Expand Down
145 changes: 81 additions & 64 deletions projects/admin/src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,70 +15,80 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NgModule, LOCALE_ID } from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {LOCALE_ID, NgModule} from '@angular/core';
import {CoreConfigService, RecordModule, TranslateService} from '@rero/ng-core';
import {UiSwitchModule} from 'ngx-toggle-switch';
import {AppComponent} from './app.component';
import {AppRoutingModule} from './app-routing.module';
import {AppConfigService} from './service/app-config.service';
import {MenuComponent} from './menu/menu.component';
import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';
import {
RecordModule,
CoreConfigService,
TranslateService
} from '@rero/ng-core';
import { UiSwitchModule } from 'ngx-toggle-switch';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { AppConfigService } from './service/app-config.service';
import { MenuComponent } from './menu/menu.component';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { CollapseModule, TabsModule, BsDatepickerModule, BsLocaleService, TypeaheadModule, TooltipModule } from 'ngx-bootstrap';
import { FrontpageComponent } from './frontpage/frontpage.component';
import { FormlyModule } from '@ngx-formly/core';
import { ItemTypesBriefViewComponent } from './record/brief-view/item-types-brief-view.component';
import { CircPoliciesBriefViewComponent } from './record/brief-view/circ-policies-brief-view.component';
import { DocumentsBriefViewComponent } from './record/brief-view/documents-brief-view/documents-brief-view.component';
import { LibrariesBriefViewComponent } from './record/brief-view/libraries-brief-view/libraries-brief-view.component';
import { PatronTypesBriefViewComponent } from './record/brief-view/patron-types-brief-view.component';
import { PatronTypesDetailViewComponent } from './record/detail-view/patron-types-detail-view.component';
import { PatronsBriefViewComponent } from './record/brief-view/patrons-brief-view.component';
import { PersonsBriefViewComponent } from './record/brief-view/persons-brief-view.component';
import { PersonDetailViewComponent } from './record/detail-view/person-detail-view/person-detail-view.component';
import { BioInformationsPipe } from './pipe/bio-informations.pipe';
import { BirthDatePipe } from './pipe/birth-date.pipe';
import { MefTitlePipe } from './pipe/mef-title.pipe';
import { LibraryComponent } from './record/custom-editor/libraries/library.component';
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { ExceptionDatesListComponent } from './record/custom-editor/libraries/exception-dates-list/exception-dates-list.component';
import { ExceptionDatesEditComponent } from './record/custom-editor/libraries/exception-dates-edit/exception-dates-edit.component';
import { CirculationPolicyComponent } from './record/custom-editor/circulation-settings/circulation-policy/circulation-policy.component';
BsDatepickerModule,
BsLocaleService,
CollapseModule,
TabsModule,
TooltipModule,
TypeaheadModule
} from 'ngx-bootstrap';
import {FrontpageComponent} from './frontpage/frontpage.component';
import {FormlyModule} from '@ngx-formly/core';
import {ItemTypesBriefViewComponent} from './record/brief-view/item-types-brief-view.component';
import {CircPoliciesBriefViewComponent} from './record/brief-view/circ-policies-brief-view.component';
import {DocumentsBriefViewComponent} from './record/brief-view/documents-brief-view/documents-brief-view.component';
import {LibrariesBriefViewComponent} from './record/brief-view/libraries-brief-view/libraries-brief-view.component';
import {PatronTypesBriefViewComponent} from './record/brief-view/patron-types-brief-view.component';
import {PatronTypesDetailViewComponent} from './record/detail-view/patron-types-detail-view.component';
import {PatronsBriefViewComponent} from './record/brief-view/patrons-brief-view.component';
import {PersonsBriefViewComponent} from './record/brief-view/persons-brief-view.component';
import {PersonDetailViewComponent} from './record/detail-view/person-detail-view/person-detail-view.component';
import {BioInformationsPipe} from './pipe/bio-informations.pipe';
import {BirthDatePipe} from './pipe/birth-date.pipe';
import {MefTitlePipe} from './pipe/mef-title.pipe';
import {LibraryComponent} from './record/custom-editor/libraries/library.component';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {ExceptionDatesListComponent} from './record/custom-editor/libraries/exception-dates-list/exception-dates-list.component';
import {ExceptionDatesEditComponent} from './record/custom-editor/libraries/exception-dates-edit/exception-dates-edit.component';
import {CirculationPolicyComponent} from './record/custom-editor/circulation-settings/circulation-policy/circulation-policy.component';
import {TranslateLoader as BaseTranslateLoader, TranslateModule} from '@ngx-translate/core';
import {TranslateLoader} from './translate/loader/translate-loader';
import {ItemTypeDetailViewComponent} from './record/detail-view/item-type-detail-view.component';
import {LibraryDetailViewComponent} from './record/detail-view/library-detail-view/library-detail-view.component';
import {DayOpeningHoursComponent} from './record/detail-view/library-detail-view/day-opening-hours/day-opening-hours.component';
import {ExceptionDateComponent} from './record/detail-view/library-detail-view/exception-date/exception-date.component';
import {DocumentDetailViewComponent} from './record/detail-view/document-detail-view/document-detail-view.component';
import {HoldingComponent} from './record/detail-view/document-detail-view/holding/holding.component';
import {HoldingItemComponent} from './record/detail-view/document-detail-view/holding-item/holding-item.component';
import {HoldingsComponent} from './record/detail-view/document-detail-view/holdings/holdings.component';
import {CircPolicyDetailViewComponent} from './record/detail-view/circ-policy-detail-view/circ-policy-detail-view.component';
import {LocationDetailViewComponent} from './record/detail-view/location-detail-view/location-detail-view.component';
import {LocationComponent} from './record/brief-view/libraries-brief-view/location/location.component';
import {ItemDetailViewComponent} from './record/detail-view/item-detail-view/item-detail-view.component';
import {ItemAvailabilityComponent} from './record/item-availability/item-availability.component';
import {ItemTransactionComponent} from './record/detail-view/item-detail-view/item-transaction/item-transaction.component';
import {ItemTransactionsComponent} from './record/detail-view/item-detail-view/item-transactions/item-transactions.component';
import {AuthorNameTranslatePipe} from './pipe/author-name-translate.pipe';
import {PatronDetailViewComponent} from './record/detail-view/patron-detail-view/patron-detail-view.component';
import {RefComponent} from './record/editor/ref/ref.component';
import {RemoteAutocompleteInputTypeComponent} from './record/editor/remote-autocomplete/remote-autocomplete.component';
import {NoCacheHeaderInterceptor} from './interceptor/no-cache-header.interceptor';
import {InterfaceInfoComponent} from './interface-info/interface-info.component';
import {DocumentEditorComponent} from './record/custom-editor/document-editor/document-editor.component';
import {VendorDetailViewComponent} from './record/detail-view/vendor-detail-view/vendor-detail-view.component';
import {VendorBriefViewComponent} from './record/brief-view/vendor-brief-view.component';
import {AddressTypeComponent} from './record/detail-view/address-type/address-type.component';
import {AcquisitionOrderBriefViewComponent} from './record/brief-view/acquisition-order-brief-view.component';
import {
TranslateModule,
TranslateLoader as BaseTranslateLoader
} from '@ngx-translate/core';
import { TranslateLoader } from './translate/loader/translate-loader';
import { ItemTypeDetailViewComponent } from './record/detail-view/item-type-detail-view.component';
import { LibraryDetailViewComponent } from './record/detail-view/library-detail-view/library-detail-view.component';
import { DayOpeningHoursComponent } from './record/detail-view/library-detail-view/day-opening-hours/day-opening-hours.component';
import { ExceptionDateComponent } from './record/detail-view/library-detail-view/exception-date/exception-date.component';
import { DocumentDetailViewComponent } from './record/detail-view/document-detail-view/document-detail-view.component';
import { HoldingComponent } from './record/detail-view/document-detail-view/holding/holding.component';
import { HoldingItemComponent } from './record/detail-view/document-detail-view/holding-item/holding-item.component';
import { HoldingsComponent } from './record/detail-view/document-detail-view/holdings/holdings.component';
import { CircPolicyDetailViewComponent } from './record/detail-view/circ-policy-detail-view/circ-policy-detail-view.component';
import { LocationDetailViewComponent } from './record/detail-view/location-detail-view/location-detail-view.component';
import { LocationComponent } from './record/brief-view/libraries-brief-view/location/location.component';
import { ItemDetailViewComponent } from './record/detail-view/item-detail-view/item-detail-view.component';
import { ItemAvailabilityComponent } from './record/item-availability/item-availability.component';
import { ItemTransactionComponent } from './record/detail-view/item-detail-view/item-transaction/item-transaction.component';
import { ItemTransactionsComponent } from './record/detail-view/item-detail-view/item-transactions/item-transactions.component';
import { AuthorNameTranslatePipe } from './pipe/author-name-translate.pipe';
import { PatronDetailViewComponent } from './record/detail-view/patron-detail-view/patron-detail-view.component';
import { RefComponent } from './record/editor/ref/ref.component';
import { RemoteAutocompleteInputTypeComponent } from './record/editor/remote-autocomplete/remote-autocomplete.component';
import { NoCacheHeaderInterceptor } from './interceptor/no-cache-header.interceptor';
import { InterfaceInfoComponent } from './interface-info/interface-info.component';
import { DocumentEditorComponent } from './record/custom-editor/document-editor/document-editor.component';
import { VendorDetailViewComponent } from './record/detail-view/vendor-detail-view/vendor-detail-view.component';
import { VendorBriefViewComponent } from './record/brief-view/vendor-brief-view.component';
import { AddressTypeComponent } from './record/detail-view/address-type/address-type.component';
AcquisitionOrderDetailViewComponent
} from './record/detail-view/acquisition-order-detail-view/acquisition-order-detail-view.component';
import {
AcquisitionOrderLineDetailViewComponent
} from './record/detail-view/acquisition-order-line-detail-view/acquisition-order-line-detail-view.component';
import {
AcquisitionOrderLinesComponent
} from './record/detail-view/acquisition-order-detail-view/order-lines/acquisition-order-lines.component';

@NgModule({
declarations: [
Expand Down Expand Up @@ -133,7 +143,11 @@ import { AddressTypeComponent } from './record/detail-view/address-type/address-
InterfaceInfoComponent,
VendorDetailViewComponent,
VendorBriefViewComponent,
AddressTypeComponent
AddressTypeComponent,
AcquisitionOrderDetailViewComponent,
AcquisitionOrderBriefViewComponent,
AcquisitionOrderLineDetailViewComponent,
AcquisitionOrderLinesComponent
],
imports: [
AppRoutingModule,
Expand Down Expand Up @@ -211,7 +225,10 @@ import { AddressTypeComponent } from './record/detail-view/address-type/address-
RefComponent,
RemoteAutocompleteInputTypeComponent,
VendorDetailViewComponent,
VendorBriefViewComponent
VendorBriefViewComponent,
AcquisitionOrderDetailViewComponent,
AcquisitionOrderBriefViewComponent,
AcquisitionOrderLineDetailViewComponent
],
bootstrap: [AppComponent]
})
Expand Down
4 changes: 4 additions & 0 deletions projects/admin/src/app/menu/menu.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,10 @@ export class MenuComponent implements OnInit {
name: this.translateService.instant('Vendors'),
routerLink: '/records/vendors',
iconCssClass: 'fa fa-briefcase'
}, {
name: this.translateService.instant('Orders'),
routerLink: '/records/acq_orders',
iconCssClass: 'fa fa-shopping-cart'
}]
}, {
name: this.translateService.instant('Admin & Monitoring'),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* RERO ILS UI
* Copyright (C) 2019 RERO
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

import { Component, Input } from '@angular/core';
import { ResultItem } from '@rero/ng-core';

@Component({
selector: 'admin-acquisition-order-brief-view',
template: `
<h5 class="mb-0 card-title">
<a [routerLink]="['/records', 'acq_orders', 'detail', record.metadata.pid]">
{{ record.metadata.order_number }}
</a>
</h5>
`,
styleUrls: []
})
export class AcquisitionOrderBriefViewComponent implements ResultItem {

@Input()
record: any;

@Input()
type: string;

@Input()
detailUrl: { link: string, external: boolean };

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<!--
RERO ILS UI
Copyright (C) 2019 RERO

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, version 3 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<ng-container *ngIf="record$ | async as record">
<h1 class="mb-3">{{ record.metadata.order_number }}</h1>
<article>
<section class="m-2 p-2">
<dl class="row mb-0">
<!-- VENDOR -->
<ng-container *ngIf="record.metadata.vendor">
<dt class="col-sm-3 offset-sm-2 offset-md-0 label-title" translate>
Vendor
</dt>
<dd class="col-sm-7 col-md-8 mb-0">
{{ record.metadata.vendor.pid | getRecord: 'vendors' : 'field' : 'name' | async }}
</dd>
</ng-container>
<!-- ORDER DATE -->
<ng-container *ngIf="record.metadata.order_date">
<dt class="col-sm-3 offset-sm-2 offset-md-0 label-title" translate>
Order date
</dt>
<dd class="col-sm-7 col-md-8 mb-0">
{{ record.metadata.order_date | dateTranslate :'shortDate' }}
</dd>
</ng-container>
<!-- ORDER TYPE -->
<ng-container *ngIf="record.metadata.order_type">
<dt class="col-sm-3 offset-sm-2 offset-md-0 label-title" translate>
Order type
</dt>
<dd class="col-sm-7 col-md-8 mb-0">
{{ record.metadata.order_type | translate }}
</dd>
</ng-container>
<!-- ORDER STATUS -->
<ng-container *ngIf="">
<dt class="col-sm-3 offset-sm-2 offset-md-0 label-title" translate>
Order status
</dt>
<dd class="col-sm-7 col-md-8 mb-0">
{{ record.metadata.order_status | translate }}
</dd>
</ng-container>
<!-- DESCRIPTION -->
<ng-container *ngIf="record.metadata.description">
<dt class="col-sm-3 offset-sm-2 offset-md-0 label-title" translate>
Description
</dt>
<dd class="col-sm-7 col-md-8 mb-0">
{{ record.metadata.description }}
</dd>
</ng-container>
<!-- CURRENCY -->
<ng-container *ngIf="record.metadata.currency">
<dt class="col-sm-3 offset-sm-2 offset-md-0 label-title" translate>
Currency
</dt>
<dd class="col-sm-7 col-md-8 mb-0">
{{ record.metadata.currency }}
</dd>
</ng-container>
<!-- TOTAL AMOUNT -->
<ng-container *ngIf="totalAmount$ | async as totalAmount">
<dt class="col-sm-3 offset-sm-2 offset-md-0 label-title" translate>
Total amount
</dt>
<dd class="col-sm-7 col-md-8 mb-0">
{{ totalAmount | currency:record.metadata.currency:'symbol' }}
</dd>
</ng-container>
</dl>
</section>
</article>

<!-- Order lines -->
<admin-acquisition-order-lines [order]="record" [orderLines$]="orderLines$" (deleteOrderLine)="deleteOrderLine($event)">
</admin-acquisition-order-lines>
</ng-container>
Loading

0 comments on commit 55a7c9d

Please sign in to comment.