1 package Koha::ERM::Agreement;
3 # This file is part of Koha.
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
21 use Koha::DateUtils qw( dt_from_string );
23 use base qw(Koha::Object);
25 use Koha::ERM::Agreement::Periods;
26 use Koha::ERM::Agreement::UserRoles;
27 use Koha::ERM::Agreement::Licenses;
28 use Koha::ERM::Agreement::Relationships;
29 use Koha::ERM::Agreement::Documents;
33 Koha::ERM::Agreement - Koha ErmAgreement Object class
43 Returns the periods for this agreement
48 my ( $self, $periods ) = @_;
51 my $schema = $self->_result->result_source->schema;
54 $self->periods->delete;
56 for my $period (@$periods) {
57 $self->_result->add_to_erm_agreement_periods($period);
63 my $periods_rs = $self->_result->erm_agreement_periods;
64 return Koha::ERM::Agreement::Periods->_new_from_dbic($periods_rs);
69 Returns the user roles for this agreement
74 my ( $self, $user_roles ) = @_;
77 my $schema = $self->_result->result_source->schema;
80 $self->user_roles->delete;
82 for my $user_role (@$user_roles) {
83 $self->_result->add_to_erm_agreement_user_roles($user_role);
88 my $user_roles_rs = $self->_result->erm_agreement_user_roles;
89 return Koha::ERM::Agreement::UserRoles->_new_from_dbic($user_roles_rs);
92 =head3 agreement_licenses
94 Returns the agreement_licenses for this agreement
98 sub agreement_licenses {
99 my ( $self, $agreement_licenses ) = @_;
101 if ( $agreement_licenses ) {
102 my $schema = $self->_result->result_source->schema;
105 $self->agreement_licenses->delete;
107 for my $agreement_license (@$agreement_licenses) {
108 $self->_result->add_to_erm_agreement_licenses($agreement_license);
113 my $agreement_licenses_rs = $self->_result->erm_agreement_licenses;
114 return Koha::ERM::Agreement::Licenses->_new_from_dbic($agreement_licenses_rs);
117 =head3 agreement_relationships
119 Returns the agreement relationships of this agreement
123 sub agreement_relationships {
124 my ( $self, $relationships ) = @_;
126 if ( $relationships ) {
127 my $schema = $self->_result->result_source->schema;
128 # FIXME naming - is "back link" ok?
130 'supersedes' => 'is-superseded-by',
131 'is-superseded-by' => 'supersedes',
132 'provides_post-cancellation_access_for' => 'has-post-cancellation-access-in',
133 'has-post-cancellation-access-in' => 'provides_post-cancellation_access_for',
134 'tracks_demand-driven_acquisitions_for' => 'has-demand-driven-acquisitions-in',
135 'has-demand-driven-acquisitions-in' => 'tracks_demand-driven_acquisitions_for',
136 'has_backfile_in' => 'has_frontfile_in',
137 'has_frontfile_in' => 'has_backfile_in',
138 'related_to' => 'related_to',
142 $self->agreement_relationships->delete;
143 $self->agreement_back_relationships->delete;
145 for my $relationship (@$relationships) {
146 $self->_result->add_to_erm_agreement_relationships_agreements($relationship);
148 agreement_id => $relationship->{related_agreement_id},
149 related_agreement_id => $self->agreement_id,
150 relationship => $back_links->{$relationship->{relationship}},
151 notes => $relationship->{notes}, # FIXME Is it correct, do we keep the note here?
153 $self->_result->add_to_erm_agreement_relationships_related_agreements($back_link);
158 my $related_agreements_rs = $self->_result->erm_agreement_relationships_agreements;
159 return Koha::ERM::Agreement::Relationships->_new_from_dbic($related_agreements_rs);
162 =head3 agreement_back_relationships
164 # FIXME Naming - how is it called?
165 Returns the reverse relationship
169 sub agreement_back_relationships {
171 my $rs = $self->_result->erm_agreement_relationships_related_agreements;
172 return Koha::ERM::Agreement::Relationships->_new_from_dbic($rs);
177 Returns the documents for this agreement
182 my ( $self, $documents ) = @_;
185 my $schema = $self->_result->result_source->schema;
188 $self->documents->delete;
189 for my $document (@$documents) {
190 if ( $document->{file_content} ) {
191 $document->{file_type} = 'unknown'; # FIXME How to detect file type from base64?
192 $document->{uploaded_on} //= dt_from_string;
194 $self->_result->add_to_erm_agreement_documents($document);
199 my $documents_rs = $self->_result->erm_agreement_documents;
200 return Koha::ERM::Agreement::Documents->_new_from_dbic($documents_rs);
203 =head2 Internal methods
210 return 'ErmAgreement';