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 @@ {{ index != null ? 'Edit' : 'Add' }}
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 460adc747a..ff5e527ec9 100644
--- a/ui/admin/src/app/libraries/library/library.component.html
+++ b/ui/admin/src/app/libraries/library/library.component.html
@@ -28,7 +28,7 @@ Library