Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 7664f50f

Von Moritz Bunkus vor mehr als 10 Jahren hinzugefügt

  • ID 7664f50fac4a789932317d0e0d35e15bc2d7d1c4
  • Vorgänger 284470c1
  • Nachfolger c50f0950

SL::DB::Order, DeliveryOrder: Funktionen zum Umwandeln von Order in DeliveryOrder

Unterschiede anzeigen:

SL/DB/DeliveryOrder.pm
74 74
  goto &transdate;
75 75
}
76 76

  
77
sub new_from {
78
  my ($class, $source, %params) = @_;
79

  
80
  croak("Unsupported source object type '" . ref($source) . "'") unless ref($source) eq 'SL::DB::Order';
81

  
82
  my $terms = $source->can('payment_id') && $source->payment_id ? $source->payment_terms->terms_netto : 0;
83

  
84
  my %args = ( map({ ( $_ => $source->$_ ) } qw(cp_id currency_id customer_id cusordnumber department_id employee_id globalproject_id intnotes language_id notes
85
                                                ordnumber reqdate salesman_id shippingpoint shipvia taxincluded taxzone_id transaction_description vendor_id
86
                                             )),
87
               closed    => 0,
88
               is_sales  => !!$source->customer_id,
89
               delivered => 0,
90
               terms     => $terms,
91
               transdate => DateTime->today_local,
92
            );
93

  
94
  # Custom shipto addresses (the ones specific to the sales/purchase
95
  # record and not to the customer/vendor) are only linked from
96
  # shipto -> delivery_orders. Meaning delivery_orders.shipto_id
97
  # will not be filled in that case. Therefore we have to return the
98
  # new shipto object as a separate object so that the caller can
99
  # save it, too.
100
  my $custom_shipto;
101
  if (!$source->shipto_id && $source->id) {
102
    require SL::DB::Shipto;
103

  
104
    my $old = SL::DB::Manager::Shipto->find_by(trans_id => $source->id);
105
    if ($old) {
106
      $custom_shipto = SL::DB::Shipto->new(
107
        map  { +($_ => $old->$_) }
108
        grep { !m{^ (?: itime | mtime | shipto_id | trans_id ) $}x }
109
        map  { $_->name }
110
        @{ $old->meta->columns }
111
      );
112
    }
113

  
114
  } else {
115
    $args{shipto_id} = $source->shipto_id;
116
  }
117

  
118
  my $delivery_order = $class->new(%args, %params);
119

  
120
  my @items = map {
121
    my $source_item = $_;
122
    SL::DB::DeliveryOrderItem->new(map({ ( $_ => $source_item->$_ ) }
123
                                   qw(base_qty cusordnumber description discount lastcost longdescription marge_price_factor ordnumber parts_id price_factor price_factor_id
124
                                      project_id qty reqdate sellprice serialnumber transdate unit
125
                                   )));
126
  } @{ $source->items_sorted };
127

  
128
  $delivery_order->items(\@items);
129

  
130
  return ($delivery_order, $custom_shipto);
131
}
132

  
77 133
1;
134
__END__
135

  
136
=pod
137

  
138
=encoding utf8
139

  
140
=head1 NAME
141

  
142
SL::DB::DeliveryOrder - Rose model for delivery orders (table
143
"delivery_orders")
144

  
145
=head1 FUNCTIONS
146

  
147
=over 4
148

  
149
=item C<date>
150

  
151
An alias for L</transdate> for compatibility with other sales/purchase models.
152

  
153
=item C<displayable_state>
154

  
155
Returns a human-readable description of the state regarding being
156
closed and delivered.
157

  
158
=item C<items>
159

  
160
An alias for L</deliver_orer_items> for compatibility with other
161
sales/purchase models.
162

  
163
=item C<items_sorted>
164

  
165
Returns the delivery order items sorted by their ID (same order they
166
appear in the frontend delivery order masks).
167

  
168
=item C<new_from $source>
169

  
170
Creates a new C<SL::DB::DeliveryOrder> instance and copies as much
171
information from C<$source> as possible. At the moment only instances
172
of C<SL::DB::Order> (sales quotations, sales orders, requests for
173
quotations and purchase orders) are supported as sources.
174

  
175
The conversion copies order items into delivery order items. Dates are copied
176
as appropriate, e.g. the C<transdate> field will be set to the current date.
177

  
178
Returns one or two objects depending on the context. In list context
179
the new delivery order instance and a shipto instance will be
180
returned. In scalar instance only the delivery order instance is
181
returned.
182

  
183
Custom shipto addresses (the ones specific to the sales/purchase
184
record and not to the customer/vendor) are only linked from C<shipto>
185
to C<delivery_orders>. Meaning C<delivery_orders.shipto_id> will not
186
be filled in that case. That's why a separate shipto object is created
187
and returned.
188

  
189
The objects returned are not saved.
190

  
191
=item C<sales_order>
192

  
193
TODO: Describe sales_order
194

  
195
=item C<type>
196

  
197
Returns a stringdescribing this record's type: either
198
C<sales_delivery_order> or C<purchase_delivery_order>.
199

  
200
=back
201

  
202
=head1 BUGS
203

  
204
Nothing here yet.
205

  
206
=head1 AUTHOR
207

  
208
Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
209

  
210
=cut

Auch abrufbar als: Unified diff