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

(-)a/C4/Bookseller.pm (-4 / +14 lines)
Lines 260-271 sub ModBookseller { Link Here
260
        $data->{'id'}
260
        $data->{'id'}
261
    );
261
    );
262
    $contacts ||= $data->{'contacts'};
262
    $contacts ||= $data->{'contacts'};
263
    my $contactquery = "DELETE FROM aqcontacts WHERE booksellerid = ?";
264
    my @contactparams = ($data->{'id'});
263
    if ($contacts) {
265
    if ($contacts) {
264
        $contacts->[0] = C4::Bookseller::Contact->new( $contacts->[0] )
266
        foreach my $contact (@$contacts) {
265
          unless ref $contacts->[0] eq 'C4::Bookseller::Contact';
267
            $contact = C4::Bookseller::Contact->new( $contact )
266
        $contacts->[0]->bookseller($data->{'id'});
268
                unless ref $contacts->[0] eq 'C4::Bookseller::Contact';
267
        $contacts->[0]->save();
269
            $contact->bookseller($data->{'id'});
270
            $contact->save();
271
            push @contactparams, $contact->id if $contact->id;
272
        }
273
        if ($#contactparams > 0) {
274
            $contactquery .= ' AND id NOT IN (' . ('?, ' x ($#contactparams - 1)) . '?);';
275
        }
268
    }
276
    }
277
    $sth = $dbh->prepare($contactquery);
278
    $sth->execute(@contactparams);
269
    return;
279
    return;
270
}
280
}
271
281
(-)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 2864-2878 CREATE TABLE `aqbooksellers` ( -- information about the vendors listed in acquis Link Here
2864
  `notes` mediumtext, -- order notes
2864
  `notes` mediumtext, -- order notes
2865
  `bookselleremail` mediumtext, -- vendor email
2865
  `bookselleremail` mediumtext, -- vendor email
2866
  `booksellerurl` mediumtext, -- unused in Koha
2866
  `booksellerurl` mediumtext, -- unused in Koha
2867
  `contact` varchar(100) default NULL, -- name of contact at vendor
2868
  `postal` mediumtext, -- vendor postal address (all lines)
2867
  `postal` mediumtext, -- vendor postal address (all lines)
2869
  `url` varchar(255) default NULL, -- vendor web address
2868
  `url` varchar(255) default NULL, -- vendor web address
2870
  `contpos` varchar(100) default NULL, -- contact person's position
2871
  `contphone` varchar(100) default NULL, -- contact's phone number
2872
  `contfax` varchar(100) default NULL,  -- contact's fax number
2873
  `contaltphone` varchar(100) default NULL, -- contact's alternate phone number
2874
  `contemail` varchar(100) default NULL, -- contact's email address
2875
  `contnotes` mediumtext, -- notes related to the contact
2876
  `active` tinyint(4) default NULL, -- is this vendor active (1 for yes, 0 for no)
2869
  `active` tinyint(4) default NULL, -- is this vendor active (1 for yes, 0 for no)
2877
  `listprice` varchar(10) default NULL, -- currency code for list prices
2870
  `listprice` varchar(10) default NULL, -- currency code for list prices
2878
  `invoiceprice` varchar(10) default NULL, -- currency code for invoice prices
2871
  `invoiceprice` varchar(10) default NULL, -- currency code for invoice prices
Lines 2968-2973 CREATE TABLE `aqbudgets_planning` ( Link Here
2968
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2961
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2969
2962
2970
--
2963
--
2964
-- Table structure for table 'aqcontacts'
2965
--
2966
2967
DROP TABLE IF EXISTS aqcontacts;
2968
CREATE TABLE aqcontacts (
2969
  id int(11) NOT NULL auto_increment, -- primary key and unique number assigned by Koha
2970
  name varchar(100) default NULL, -- name of contact at vendor
2971
  position varchar(100) default NULL, -- contact person's position
2972
  phone varchar(100) default NULL, -- contact's phone number
2973
  altphone varchar(100) default NULL, -- contact's alternate phone number
2974
  fax varchar(100) default NULL,  -- contact's fax number
2975
  email varchar(100) default NULL, -- contact's email address
2976
  notes mediumtext, -- notes related to the contact
2977
  rank SMALLINT default 0, -- display rank for the contact
2978
  booksellerid int(11) not NULL,
2979
  PRIMARY KEY  (id),
2980
  CONSTRAINT booksellerid_fk2 FOREIGN KEY (booksellerid)
2981
       REFERENCES aqbooksellers (id) ON DELETE CASCADE ON UPDATE CASCADE
2982
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2983
2984
--
2971
-- Table structure for table 'aqcontract'
2985
-- Table structure for table 'aqcontract'
2972
--
2986
--
2973
2987
(-)a/installer/data/mysql/updatedatabase.pl (-1 / +30 lines)
Lines 8560-8565 if ( CheckVersion($DBversion) ) { Link Here
8560
    SetVersion($DBversion);
8560
    SetVersion($DBversion);
8561
}
8561
}
8562
8562
8563
$DBversion = "3.13.00.XXX";
8564
if ( CheckVersion($DBversion) ) {
8565
    $dbh->do("CREATE TABLE aqcontacts (
8566
        id int(11) NOT NULL auto_increment,
8567
        name varchar(100) default NULL,
8568
        position varchar(100) default NULL,
8569
        phone varchar(100) default NULL,
8570
        altphone varchar(100) default NULL,
8571
        fax varchar(100) default NULL,
8572
        email varchar(100) default NULL,
8573
        notes mediumtext,
8574
        rank SMALLINT default 0,
8575
        booksellerid int(11) not NULL,
8576
        PRIMARY KEY  (id),
8577
        CONSTRAINT booksellerid_fk2 FOREIGN KEY (booksellerid)
8578
            REFERENCES aqbooksellers (id) ON DELETE CASCADE ON UPDATE CASCADE
8579
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;");
8580
    $dbh->do("INSERT INTO aqcontacts (name, position, phone, altphone, fax,
8581
            email, notes, booksellerid)
8582
        SELECT contact, contpos, contphone, contaltphone, contfax, contemail,
8583
            contnotes, id FROM aqbooksellers;");
8584
    $dbh->do("ALTER TABLE aqbooksellers DROP COLUMN contact,
8585
        DROP COLUMN contpos, DROP COLUMN contphone,
8586
        DROP COLUMN contaltphone, DROP COLUMN contfax,
8587
        DROP COLUMN contemail, DROP COLUMN contnotes;");
8588
    print "Upgrade to $DBversion done (Bug 10402: Move bookseller contacts to separate table)\n";
8589
    SetVersion($DBversion);
8590
}
8591
8592
8563
=head1 FUNCTIONS
8593
=head1 FUNCTIONS
8564
8594
8565
=head2 TableExists($table)
8595
=head2 TableExists($table)
8566
- 

Return to bug 10402