use SL::DB::Project;
use SL::DB::Default;
use SL::DB::Unit;
+use SL::DB::Price;
use SL::Helper::DateTime;
use SL::Helper::CreatePDF qw(:all);
sub action_customer_vendor_changed {
my ($self) = @_;
- if ($self->cv eq 'customer') {
- $self->order->customer(SL::DB::Manager::Customer->find_by_or_create(id => $::form->{cv_id}));
-
- } elsif ($self->cv eq 'vendor') {
- $self->order->vendor(SL::DB::Manager::Vendor->find_by_or_create(id => $::form->{cv_id}));
- }
+ my $cv_method = $self->cv;
- if ($self->order->{$self->cv}->contacts && scalar @{ $self->order->{$self->cv}->contacts } > 0) {
+ if ($self->order->$cv_method->contacts && scalar @{ $self->order->$cv_method->contacts } > 0) {
$self->js->show('#cp_row');
} else {
$self->js->hide('#cp_row');
}
- if ($self->order->{$self->cv}->shipto && scalar @{ $self->order->{$self->cv}->shipto } > 0) {
+ if ($self->order->$cv_method->shipto && scalar @{ $self->order->$cv_method->shipto } > 0) {
$self->js->show('#shipto_row');
} else {
$self->js->hide('#shipto_row');
}
+ $self->order->taxzone_id($self->order->$cv_method->taxzone_id);
+
+ if ($self->order->is_sales) {
+ $self->order->taxincluded(defined($self->order->$cv_method->taxincluded_checked)
+ ? $self->order->$cv_method->taxincluded_checked
+ : $::myconfig{taxincluded_checked});
+ }
+
+ $self->_recalc();
+
$self->js
- ->replaceWith('#order_cp_id', $self->build_contact_select)
- ->replaceWith('#order_shipto_id', $self->build_shipto_select)
- ->val('#order_taxzone_id', $self->order->{$self->cv}->taxzone_id)
- ->focus('#order_' . $self->cv . '_id')
- ->render($self);
+ ->replaceWith('#order_cp_id', $self->build_contact_select)
+ ->replaceWith('#order_shipto_id', $self->build_shipto_select)
+ ->val( '#order_taxzone_id', $self->order->taxzone_id)
+ ->val( '#order_taxincluded', $self->order->taxincluded)
+ ->focus( '#order_' . $self->cv . '_id');
+
+ $self->_js_redisplay_amounts_and_taxes;
+ $self->js->render();
}
sub action_add_item {
my $cv_method = $self->cv;
my $cv_discount = $self->order->$cv_method? $self->order->$cv_method->discount : 0.0;
+ my $price = $item->sellprice;
+ $price ||= ($self->order->$cv_method && $self->order->$cv_method->klass)
+ ? (SL::DB::Manager::Price->find_by(parts_id => $part->id, pricegroup_id => $self->order->$cv_method->klass)->price || $part->sellprice)
+ : $part->sellprice;
+
my %new_attr;
$new_attr{part} = $part;
$new_attr{description} = $part->description if ! $item->description;
$new_attr{qty} = 1.0 if ! $item->qty;
$new_attr{unit} = $part->unit;
- $new_attr{sellprice} = $part->sellprice if ! $item->sellprice;
+ $new_attr{sellprice} = $price;
$new_attr{discount} = $cv_discount if ! $item->discount;
# add_custom_variables adds cvars to an orderitem with no cvars for saving, but
my ($self) = @_;
my $rows_as_html;
- foreach my $tax (@{ $self->{taxes} }) {
+ foreach my $tax (sort { $a->{tax}->rate cmp $b->{tax}->rate } @{ $self->{taxes} }) {
$rows_as_html .= $self->p->render('order/tabs/_tax_row', TAX => $tax, TAXINCLUDED => $self->order->taxincluded);
}
return $rows_as_html;