From 7f273effea74c28c172ec978f53ff7e8d6a9b0e6 Mon Sep 17 00:00:00 2001 From: Bertrand Zuchuat Date: Wed, 12 Dec 2018 10:01:01 +0100 Subject: [PATCH] Libraries: Library creation * NEW: library creation by admin ui * BETTER: Refactoring library form to implement creation Co-authored-by: Peter Weber Signed-off-by: Bertrand Zuchuat --- .../modules/organisations_libraries/utils.py | 10 --- rero_ils/modules/utils.py | 4 +- rero_ils/templates/rero_ils/search.html | 7 ++- run-tests.sh | 2 +- ui/admin/proxy.conf.json | 9 +++ ui/admin/src/app/app.module.ts | 2 +- .../exception-dates-edit.component.html | 2 +- .../app/libraries/libraries-routing.module.ts | 4 ++ .../src/app/libraries/libraries.service.ts | 11 ++-- .../src/app/libraries/library-form.service.ts | 23 +------ ui/admin/src/app/libraries/library.ts | 61 +++++++++++++------ .../libraries/library/library.component.html | 12 ++-- .../libraries/library/library.component.ts | 2 +- .../src/app/libraries/main/main.component.ts | 8 ++- 14 files changed, 90 insertions(+), 67 deletions(-) diff --git a/rero_ils/modules/organisations_libraries/utils.py b/rero_ils/modules/organisations_libraries/utils.py index 791c12d671..ad20bc9a23 100644 --- a/rero_ils/modules/organisations_libraries/utils.py +++ b/rero_ils/modules/organisations_libraries/utils.py @@ -66,16 +66,6 @@ def save_library(data, record_type, record_class, parent_pid=None): library = record_class.get_record_by_pid(pid) library.update(data, dbcommit=False, reindex=False) else: - if 'opening_hours' not in data: - data['opening_hours'] = [ - {"day": "monday", "is_open": False, "times": []}, - {"day": "tuesday", "is_open": False, "times": []}, - {"day": "wednesday", "is_open": False, "times": []}, - {"day": "thursday", "is_open": False, "times": []}, - {"day": "friday", "is_open": False, "times": []}, - {"day": "saturday", "is_open": False, "times": []}, - {"day": "sunday", "is_open": False, "times": []} - ] library = record_class.create(data, dbcommit=False, reindex=False) organisation.add_library(library) library.dbcommit(reindex=True) diff --git a/rero_ils/modules/utils.py b/rero_ils/modules/utils.py index ea63b7e758..004db510ad 100644 --- a/rero_ils/modules/utils.py +++ b/rero_ils/modules/utils.py @@ -82,7 +82,7 @@ def clean_dict_keys(data): if isinstance(data, list): to_return = [] for item in data: - if item is False: + if item is False or item == []: to_return.append(item) else: tmp = clean_dict_keys(item) @@ -94,7 +94,7 @@ def clean_dict_keys(data): if isinstance(data, dict): to_return = {} for k, v in data.items(): - if v is False: + if v is False or v == []: to_return[k] = v else: tmp = clean_dict_keys(v) diff --git a/rero_ils/templates/rero_ils/search.html b/rero_ils/templates/rero_ils/search.html index de3c514353..d2b569c7c4 100644 --- a/rero_ils/templates/rero_ils/search.html +++ b/rero_ils/templates/rero_ils/search.html @@ -63,7 +63,12 @@

{{_(record_type)}}

{%- endblock search_sort_select %} {%- block search_sort_order scoped %} {%- if record_type | resource_can_create and current_user | can_edit %} - {{_('Create')}} + {# TODO: Change this to local template resource to customize the link #} + {%- if record_type == 'lib' %} + {{_('Create')}} + {% else %} + {{_('Create')}} + {% endif %} {% endif %} {%- endblock search_sort_order %} diff --git a/run-tests.sh b/run-tests.sh index f631a2c796..4cfdebe40c 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -36,7 +36,7 @@ fi set -e pipenv check -i 36437 -pipenv run flask utils check_json tests rero_ils data +pipenv run flask utils check_json tests rero_ils/modules data pipenv run pydocstyle rero_ils tests docs pipenv run isort -rc -c -df --skip ui pipenv run check-manifest --ignore ".travis-*,docs/_build*,ui/admin/node_modules*,rero_ils/static/js/rero_ils/admin*" diff --git a/ui/admin/proxy.conf.json b/ui/admin/proxy.conf.json index 74aeee22a1..f142ca699a 100644 --- a/ui/admin/proxy.conf.json +++ b/ui/admin/proxy.conf.json @@ -43,5 +43,14 @@ "pathRewrite": { "^/static": "http://localhost:5000/static" } + }, + "/admin/lib/*": { + "target": "http://localhost:5000", + "secure": false, + "logLevel": "debug", + "changeOrigin": true, + "pathRewrite": { + "^/static": "http://localhost:5000/admin/lib" + } } } diff --git a/ui/admin/src/app/app.module.ts b/ui/admin/src/app/app.module.ts index 5b72fe2da2..317769080b 100644 --- a/ui/admin/src/app/app.module.ts +++ b/ui/admin/src/app/app.module.ts @@ -20,7 +20,7 @@ export function HttpLoaderFactory(http: HttpClient) { if (environment.production) { assets_prefix = '/static/js/rero_ils/admin/'; } - return new TranslateHttpLoader(http, assets_prefix+'assets/i18n/', '.json'); + return new TranslateHttpLoader(http, assets_prefix + 'assets/i18n/', '.json'); } diff --git a/ui/admin/src/app/libraries/exception-dates-edit/exception-dates-edit.component.html b/ui/admin/src/app/libraries/exception-dates-edit/exception-dates-edit.component.html index 02fa61b684..bbc5b75824 100644 --- a/ui/admin/src/app/libraries/exception-dates-edit/exception-dates-edit.component.html +++ b/ui/admin/src/app/libraries/exception-dates-edit/exception-dates-edit.component.html @@ -83,7 +83,7 @@
    diff --git a/ui/admin/src/app/libraries/libraries-routing.module.ts b/ui/admin/src/app/libraries/libraries-routing.module.ts index 9ff095562d..ec7ad77751 100644 --- a/ui/admin/src/app/libraries/libraries-routing.module.ts +++ b/ui/admin/src/app/libraries/libraries-routing.module.ts @@ -3,6 +3,10 @@ import { Routes, RouterModule } from '@angular/router'; import { MainComponent } from './main/main.component'; const routes: Routes = [ + { + path: 'new', + component: MainComponent + }, { path: ':pid', component: MainComponent diff --git a/ui/admin/src/app/libraries/libraries.service.ts b/ui/admin/src/app/libraries/libraries.service.ts index fedb9638da..204d1f1bd4 100644 --- a/ui/admin/src/app/libraries/libraries.service.ts +++ b/ui/admin/src/app/libraries/libraries.service.ts @@ -61,16 +61,17 @@ export class LibrariesService { )); } - save(library: Library, redirectUrl?) { - const library_id = library['id']; + save(library: Library) { + const baseUpdate = '/admin/lib/ajax/update/'; + const baseRedirect = '/libraries/'; if (environment.production) { delete library['id']; } - this.client.put(this.librariesUrl + '/' + library_id, library, httpOptions).subscribe( + this.client.post(baseUpdate, library, httpOptions).subscribe( lib => { this.setCurrentLibrary(lib); - if (environment.production && redirectUrl) { - this.browser.redirect(redirectUrl); + if (environment.production) { + this.browser.redirect(baseRedirect + lib.pid); } } ); diff --git a/ui/admin/src/app/libraries/library-form.service.ts b/ui/admin/src/app/libraries/library-form.service.ts index 32509eaef8..96551a0a47 100644 --- a/ui/admin/src/app/libraries/library-form.service.ts +++ b/ui/admin/src/app/libraries/library-form.service.ts @@ -52,7 +52,7 @@ export class LibraryFormService { const days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']; const openings = []; for (let step = 0; step < 7; step++) { - openings.push(this.buildOpeningHours(false, days[step], [this.buildTimes()])); + openings.push(this.buildOpeningHours(false, days[step], this.fb.array([this.buildTimes()]))); } return openings; } @@ -88,31 +88,14 @@ export class LibraryFormService { }); } - populate(library: Library) { this.form.patchValue({ name: library.name, address: library.address, email: library.email, - code: library.code - }); - - const openings = new FormArray([]); - library.opening_hours.forEach(opening => { - const hours = new FormArray([]); - if (opening.times.length === 0) { - opening.times.push({ - start_time: '00:00', - end_time: '00:00' - }); - } - opening.times.forEach(time => { - hours.push(this.buildTimes(time.start_time, time.end_time)); - }); - - openings.push(this.buildOpeningHours(opening.is_open, opening.day, hours)); + code: library.code, + opening_hours: library.opening_hours }); - this.form.setControl('opening_hours', openings); } setId(id) { this.form.value.id = id; } diff --git a/ui/admin/src/app/libraries/library.ts b/ui/admin/src/app/libraries/library.ts index b73169d59b..066a8329a7 100644 --- a/ui/admin/src/app/libraries/library.ts +++ b/ui/admin/src/app/libraries/library.ts @@ -27,32 +27,59 @@ export interface ExceptionDates { } export class Library { - $schema: string; - id: number; - pid: number; - name: string; - email: string; - address: string; - code: string; + $schema: string = null; + id: number = null; + pid: number = null; + name: string = null; + email: string = null; + address: string = null; + code: string = null; opening_hours: Array; exception_dates?: Array; constructor(obj?: any) { - this.update(obj); - this.opening_hours = this.populateTimes(this.opening_hours); - } - - populateTimes(openinghours) { - for (const hours in openinghours) { - if (openinghours[hours].times.length === 0) { - openinghours[hours].times.push({'start_time': '00:00', 'end_time': '00:00'}); - } + this.$schema = 'https://ils.test.rero.ch/schema/libraries/library-v0.0.1.json'; + this.createOpeningHours(); + if (obj) { + this.update(obj); } - return openinghours; } update(obj) { Object.assign(this, obj); + this.cleanOpeningHours(this.opening_hours); + } + + createOpeningHours() { + const days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']; + const openings = []; + let step = 0; + for (step = 0; step < 7; step++) { + openings.push({ + 'day': days[step], + 'is_open': false, + 'times': [] + }); + } + this.opening_hours = openings; + } + + cleanOpeningHours(openingHours) { + openingHours.forEach(opening => { + const times = []; + for (let step = 0; step < opening.times.length; step++) { + if ( + opening.times[step].start_time !== '00:00' + && opening.times[step].end_time !== '00:00' + ) { + times.push(opening.times[step]); + } + } + if (times.length === 0) { + opening.is_open = false; + } + opening.times = times; + }); } deleteException(index) { diff --git a/ui/admin/src/app/libraries/library/library.component.html b/ui/admin/src/app/libraries/library/library.component.html index 81a329dad6..03a93b4093 100644 --- a/ui/admin/src/app/libraries/library/library.component.html +++ b/ui/admin/src/app/libraries/library/library.component.html @@ -3,7 +3,7 @@

    Library

    - +
    Name is required. @@ -28,7 +28,7 @@

    Library

    - +
    Email format is not correct. @@ -39,7 +39,7 @@

    Library

    - +
    Code is already taken. @@ -61,13 +61,13 @@

    Library

    • -
      +
      - +
      - +