View | Details | Raw Unified | Return to bug 10402
Collapse All | Expand All

(-)a/C4/Bookseller.pm (-4 / +14 lines)
Lines 252-263 sub ModBookseller { Link Here
252
        $data->{'id'}
252
        $data->{'id'}
253
    );
253
    );
254
    $contacts ||= $data->{'contacts'};
254
    $contacts ||= $data->{'contacts'};
255
    my $contactquery = "DELETE FROM aqcontacts WHERE booksellerid = ?";
256
    my @contactparams = ($data->{'id'});
255
    if ($contacts) {
257
    if ($contacts) {
256
        $contacts->[0] = C4::Bookseller::Contact->new( $contacts->[0] )
258
        foreach my $contact (@$contacts) {
257
          unless ref $contacts->[0] eq 'C4::Bookseller::Contact';
259
            $contact = C4::Bookseller::Contact->new( $contact )
258
        $contacts->[0]->bookseller($data->{'id'});
260
                unless ref $contacts->[0] eq 'C4::Bookseller::Contact';
259
        $contacts->[0]->save();
261
            $contact->bookseller($data->{'id'});
262
            $contact->save();
263
            push @contactparams, $contact->id if $contact->id;
264
        }
265
        if ($#contactparams > 0) {
266
            $contactquery .= ' AND id NOT IN (' . ('?, ' x ($#contactparams - 1)) . '?);';
267
        }
260
    }
268
    }
269
    $sth = $dbh->prepare($contactquery);
270
    $sth->execute(@contactparams);
261
    return;
271
    return;
262
}
272
}
263
273
(-)a/C4/Bookseller/Contact.pm (-34 / +43 lines)
Lines 63-72 Contact's e-mail address. Link Here
63
63
64
Notes about contact.
64
Notes about contact.
65
65
66
=item primary
66
=item rank
67
67
68
Flag to indicate whether a contact is "primary" or not. Initially unused since
68
Ranking of the contact so that the contact can be given the correct
69
each bookseller can have only one contact.
69
priority in display.
70
70
71
=item bookseller
71
=item bookseller
72
72
Lines 81-87 use C4::Context; Link Here
81
81
82
use base qw(Class::Accessor);
82
use base qw(Class::Accessor);
83
83
84
__PACKAGE__->mk_accessors(qw(id name position phone altphone fax email notes primary bookseller));
84
__PACKAGE__->mk_accessors(qw(id name position phone altphone fax email notes rank bookseller));
85
85
86
=head1 METHODS
86
=head1 METHODS
87
87
Lines 90-96 __PACKAGE__->mk_accessors(qw(id name position phone altphone fax email notes pri Link Here
90
    my @contacts = @{C4::Bookseller::Contact->get_from_bookseller($booksellerid)};
90
    my @contacts = @{C4::Bookseller::Contact->get_from_bookseller($booksellerid)};
91
91
92
Returns a reference to an array of C4::Bookseller::Contact objects for the
92
Returns a reference to an array of C4::Bookseller::Contact objects for the
93
specified bookseller.
93
specified bookseller. This will always return at least one item, though that one
94
item may be an empty contact.
94
95
95
=cut
96
=cut
96
97
Lines 100-115 sub get_from_bookseller { Link Here
100
    return unless $bookseller;
101
    return unless $bookseller;
101
102
102
    my @contacts;
103
    my @contacts;
103
    my $query = "SELECT contact AS name, contpos AS position, contphone AS phone, contaltphone AS altphone, contfax AS fax, contemail AS email, contnotes AS notes, id AS bookseller FROM aqbooksellers WHERE id = ?";
104
    my $query = "SELECT * FROM aqcontacts WHERE booksellerid = ?";
104
    # When we have our own table, we can use: my $query = "SELECT * FROM aqcontacts WHERE bookseller = ?";
105
    my $dbh = C4::Context->dbh;
105
    my $dbh = C4::Context->dbh;
106
    my $sth = $dbh->prepare($query);
106
    my $sth = $dbh->prepare($query);
107
    $sth->execute($bookseller);
107
    $sth->execute($bookseller);
108
    while (my $rec = $sth->fetchrow_hashref()) {
108
    while (my $rec = $sth->fetchrow_hashref()) {
109
        $rec->{'primary'} = 1;
110
        push @contacts, $class->new($rec);
109
        push @contacts, $class->new($rec);
111
    }
110
    }
112
111
112
    push @contacts, $class->new() unless @contacts;
113
113
    return \@contacts;
114
    return \@contacts;
114
}
115
}
115
116
Lines 123-143 because there is no separate table from which contacts can be fetched. Link Here
123
124
124
=cut
125
=cut
125
126
126
#sub fetch {
127
sub fetch {
127
#    my ($class, $id) = @_;
128
    my ($class, $id) = @_;
128
#
129
129
#    my $rec = { };
130
    my $rec = { };
130
#    if ($id) {
131
    if ($id) {
131
#        my $query = "SELECT * FROM aqcontacts WHERE id = ?";
132
        my $query = "SELECT * FROM aqcontacts WHERE id = ?";
132
#        my $dbh = C4::Context->dbh;
133
        my $dbh = C4::Context->dbh;
133
#        my $sth = $dbh->prepare($query);
134
        my $sth = $dbh->prepare($query);
134
#        $sth->execute($id);
135
        $sth->execute($id);
135
#        $rec = $sth->fetchrow_hashref();
136
        $rec = $sth->fetchrow_hashref();
136
#    }
137
    }
137
#    my $self = $class->SUPER::new($rec);
138
    my $self = $class->new($rec);
138
#    bless $self, $class;
139
    bless $self, $class;
139
#    return $self;
140
    return $self;
140
#}
141
}
141
142
142
=head2 save
143
=head2 save
143
144
Lines 151-171 sub save { Link Here
151
    my ($self) = @_;
152
    my ($self) = @_;
152
153
153
    my $query;
154
    my $query;
154
#    if ($self->id) {
155
    my @params = ($self->name, $self->position, $self->phone, $self->altphone, $self->fax, $self->email, $self->notes, $self->rank, $self->bookseller);
155
#        $query = 'UPDATE aqcontacts SET name = ?, position = ?, phone = ?, altphone = ?, fax = ?, email = ?, notes = ?, primary = ? WHERE id = ?;';
156
    if ($self->id) {
156
#    } else {
157
        $query = 'UPDATE aqcontacts SET name = ?, position = ?, phone = ?, altphone = ?, fax = ?, email = ?, notes = ?, rank = ?, booksellerid = ? WHERE id = ?;';
157
#        $query = 'INSERT INTO aqcontacts (name, position, phone, altphone, fax, email, notes, primary) VALUES (?, ?, ?, ?, ? ,? ,?, ?);';
158
        push @params, $self->id;
158
#    }
159
    if ($self->bookseller) {
160
        $query = 'UPDATE aqbooksellers SET contact = ?, contpos = ?, contphone = ?, contaltphone = ?, contfax = ?, contemail = ?, contnotes = ? WHERE id = ?;';
161
    } else {
159
    } else {
162
        return;
160
        $query = 'INSERT INTO aqcontacts (name, position, phone, altphone, fax, email, notes, rank, booksellerid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);';
163
    }
161
    }
164
    my $dbh = C4::Context->dbh;
162
    my $dbh = C4::Context->dbh;
165
    my $sth = $dbh->prepare($query);
163
    my $sth = $dbh->prepare($query);
166
    $sth->execute($self->name, $self->position, $self->phone, $self->altphone, $self->fax, $self->email, $self->notes, $self->bookseller);
164
    $sth->execute(@params);
167
    #$self->id = $dbh->last_insert_id(undef, undef, 'aqcontacts', undef);
165
    $self->id($dbh->{'mysql_insertid'}) unless $self->id;
168
    return $self->bookseller;
166
    return $self->id;
167
}
168
169
sub delete {
170
    my ($self) = @_;
171
172
    return unless $self->id;
173
174
    my $dbh = C4::Context->dbh;
175
    my $sth = $dbh->prepare("DELETE FROM aqcontacts WHERE id = ?;");
176
    $sth->execute($self->id);
177
    return;
169
}
178
}
170
179
171
=head1 AUTHOR
180
=head1 AUTHOR
(-)a/installer/data/mysql/kohastructure.sql (-7 / +21 lines)
Lines 2739-2753 CREATE TABLE `aqbooksellers` ( -- information about the vendors listed in acquis Link Here
2739
  `notes` mediumtext, -- order notes
2739
  `notes` mediumtext, -- order notes
2740
  `bookselleremail` mediumtext, -- vendor email
2740
  `bookselleremail` mediumtext, -- vendor email
2741
  `booksellerurl` mediumtext, -- unused in Koha
2741
  `booksellerurl` mediumtext, -- unused in Koha
2742
  `contact` varchar(100) default NULL, -- name of contact at vendor
2743
  `postal` mediumtext, -- vendor postal address (all lines)
2742
  `postal` mediumtext, -- vendor postal address (all lines)
2744
  `url` varchar(255) default NULL, -- vendor web address
2743
  `url` varchar(255) default NULL, -- vendor web address
2745
  `contpos` varchar(100) default NULL, -- contact person's position
2746
  `contphone` varchar(100) default NULL, -- contact's phone number
2747
  `contfax` varchar(100) default NULL,  -- contact's fax number
2748
  `contaltphone` varchar(100) default NULL, -- contact's alternate phone number
2749
  `contemail` varchar(100) default NULL, -- contact's email address
2750
  `contnotes` mediumtext, -- notes related to the contact
2751
  `active` tinyint(4) default NULL, -- is this vendor active (1 for yes, 0 for no)
2744
  `active` tinyint(4) default NULL, -- is this vendor active (1 for yes, 0 for no)
2752
  `listprice` varchar(10) default NULL, -- currency code for list prices
2745
  `listprice` varchar(10) default NULL, -- currency code for list prices
2753
  `invoiceprice` varchar(10) default NULL, -- currency code for invoice prices
2746
  `invoiceprice` varchar(10) default NULL, -- currency code for invoice prices
Lines 2843-2848 CREATE TABLE `aqbudgets_planning` ( Link Here
2843
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2836
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2844
2837
2845
--
2838
--
2839
-- Table structure for table 'aqcontacts'
2840
--
2841
2842
DROP TABLE IF EXISTS aqcontacts;
2843
CREATE TABLE aqcontacts (
2844
  id int(11) NOT NULL auto_increment, -- primary key and unique number assigned by Koha
2845
  name varchar(100) default NULL, -- name of contact at vendor
2846
  position varchar(100) default NULL, -- contact person's position
2847
  phone varchar(100) default NULL, -- contact's phone number
2848
  altphone varchar(100) default NULL, -- contact's alternate phone number
2849
  fax varchar(100) default NULL,  -- contact's fax number
2850
  email varchar(100) default NULL, -- contact's email address
2851
  notes mediumtext, -- notes related to the contact
2852
  primary BOOLEAN not NULL default 0, -- whether the specified contact is primary or not
2853
  booksellerid int(11) not NULL,
2854
  PRIMARY KEY  (id),
2855
  CONSTRAINT booksellerid_fk2 FOREIGN KEY (booksellerid)
2856
       REFERENCES aqbooksellers (id) ON DELETE CASCADE ON UPDATE CASCADE
2857
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2858
2859
--
2846
-- Table structure for table 'aqcontract'
2860
-- Table structure for table 'aqcontract'
2847
--
2861
--
2848
2862
(-)a/installer/data/mysql/updatedatabase.pl (-1 / +29 lines)
Lines 6990-6995 if ( CheckVersion($DBversion) ) { Link Here
6990
    SetVersion($DBversion);
6990
    SetVersion($DBversion);
6991
}
6991
}
6992
6992
6993
$DBversion = "3.13.00.XXX";
6994
if ( CheckVersion($DBversion) ) {
6995
    $dbh->do("CREATE TABLE aqcontacts (
6996
        id int(11) NOT NULL auto_increment,
6997
        name varchar(100) default NULL,
6998
        position varchar(100) default NULL,
6999
        phone varchar(100) default NULL,
7000
        altphone varchar(100) default NULL,
7001
        fax varchar(100) default NULL,
7002
        email varchar(100) default NULL,
7003
        notes mediumtext,
7004
        rank SMALLINT not NULL default 0,
7005
        booksellerid int(11) not NULL,
7006
        PRIMARY KEY  (id),
7007
        CONSTRAINT booksellerid_fk2 FOREIGN KEY (booksellerid)
7008
            REFERENCES aqbooksellers (id) ON DELETE CASCADE ON UPDATE CASCADE
7009
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;");
7010
    $dbh->do("INSERT INTO aqcontacts (name, position, phone, altphone, fax,
7011
            email, notes, booksellerid)
7012
        SELECT contact, contpos, contphone, contaltphone, contfax, contemail,
7013
            contnotes, id FROM aqbooksellers;");
7014
    $dbh->do("ALTER TABLE aqbooksellers DROP COLUMN contact,
7015
        DROP COLUMN contpos, DROP COLUMN contphone,
7016
        DROP COLUMN contaltphone, DROP COLUMN contfax,
7017
        DROP COLUMN contemail, DROP COLUMN contnotes;");
7018
    print "Upgrade to $DBversion done (Bug 10402: Move bookseller contacts to separate table)\n";
7019
    SetVersion($DBversion);
7020
}
7021
6993
7022
6994
=head1 FUNCTIONS
7023
=head1 FUNCTIONS
6995
7024
6996
- 

Return to bug 10402