use Support::TestSetup;
use Carp;
use Test::Exception;
+use SL::DBUtils qw(check_trgm);
use SL::Dev::ALL;
+use SL::Dev::Part qw(new_part);
+use SL::Dev::Shop qw(new_shop new_shop_part new_shop_order);
+use SL::Dev::CustomerVendor qw(new_customer);
use SL::DB::Shop;
use SL::DB::ShopOrder;
use SL::DB::ShopOrderItem;
use Data::Dumper;
my ($shop, $shop_order, $shop_part, $part, $customer, $employee);
+my ($transdate);
sub reset_state {
my %params = @_;
clear_up();
- $shop = SL::Dev::Shop::new_shop->save;
- $part = SL::Dev::Part::new_part->save;
- $shop_part = SL::Dev::Shop::new_shop_part(part => $part, shop => $shop)->save;
+ $transdate = DateTime->today_local;
+ $transdate->set_year(2019) if $transdate->year == 2020; # use year 2019 in 2020, because of tax rate change in Germany
+
+ $shop = new_shop->save;
+ $part = new_part->save;
+ $shop_part = new_shop_part(part => $part, shop => $shop)->save;
$employee = SL::DB::Manager::Employee->current || croak "No employee";
- $customer = SL::Dev::CustomerVendor::new_customer(
- name => 'Evil Inc',
- street => 'Evil Street',
- zipcode => '66666',
- email => 'evil@evilinc.com'
- )->save;
+ $customer = new_customer( name => 'Evil Inc',
+ street => 'Evil Street',
+ zipcode => '66666',
+ email => 'evil@evilinc.com'
+ )->save;
}
-sub save_shorcontroller_to_string {
+sub save_shopcontroller_to_string {
my $output;
- open(my $outputFH, '<', \$output) or die "OUTPUT";
+ open(my $outputFH, '>', \$output) or die "OUTPUT";
my $oldFH = select $outputFH;
- my $shor_controller = SL::Controller::ShopOrder->new;
- $shor_controller->action_transfer;
+ my $shop_controller = SL::Controller::ShopOrder->new;
+ $shop_controller->action_transfer;
select $oldFH;
close $outputFH;
$::form->{import_id} = $params{import_id};
$::form->{customer} = $params{customer};
my $test_name = 'Test Controller Action Transfer';
- save_shorcontroller_to_string();
+ save_shopcontroller_to_string();
my @links_record = RecordLinks->get_links( 'from_table' => 'shop_orders',
'from_id' => $params{import_id},
'to_table' => 'oe',
reset_state();
+my $trgm = check_trgm($::form->get_standard_dbh());
+
my $shop_trans_id = 1;
-$shop_order = SL::Dev::Shop::new_shop_order(
+$shop_order = new_shop_order(
shop => $shop,
+ transfer_date => $transdate,
shop_trans_id => $shop_trans_id,
+ order_date => $transdate->datetime,
amount => 59.5,
billing_lastname => 'Schmidt',
billing_firstname => 'Sven',
billing_company => 'Evil Inc',
- billing_street => 'Evil Street',
+ billing_street => 'Evil Street 666',
billing_zipcode => $customer->zipcode,
- billing_email => $customer->email,
+ billing_email => 'email',
);
my $shop_order_item = SL::DB::ShopOrderItem->new(
is($fuzzy_customers->[0]->name, 'Evil Inc', 'matched customer Evil Inc');
note('adding a not-so-similar customer');
-my $customer_different = SL::Dev::CustomerVendor::new_customer(
+my $customer_different = new_customer(
name => "Different Name",
street => 'Good Straet', # difference large enough from "Evil Street"
zipcode => $customer->zipcode,
$fuzzy_customers = $shop_order->check_for_existing_customers;
is(scalar @{ $fuzzy_customers }, 1, 'still only found 1 matching customer (zipcode equal + street dissimilar');
-note('adding a similar customer');
-my $customer_similar = SL::Dev::CustomerVendor::new_customer(
+note('adding 2 similar customers and 1 dissimilar but same email');
+my $customer_similar = new_customer(
name => "Different Name",
- street => 'Good Street', # difference not large enough from "Evil Street", street matches
+ street => 'Evil Street 666', # difference not large enough from "Evil Street", street matches
zipcode => $customer->zipcode,
email => "foo",
)->save;
+my $customer_similar_2 = new_customer(
+ name => "Different Name",
+ street => 'Evil Straet', # difference not large enough from "Evil Street", street matches
+ zipcode => $customer->zipcode,
+ email => "foofoo",
+)->save;
+my $customer_same_email = new_customer(
+ name => "Different Name",
+ street => 'Angel Way', # difference large enough from "Evil Street", street not matches , same email
+ zipcode => $customer->zipcode,
+ email => 'email',
+)->save;
+my $customers = SL::DB::Manager::Customer->get_all();
+
$fuzzy_customers = $shop_order->check_for_existing_customers;
-is(scalar @{ $fuzzy_customers }, 2, 'found 2 matching customers (zipcode equal + street similar)');
+if($trgm){
+ is(scalar @{ $fuzzy_customers }, 4, 'found 4 matching customers (zipcode equal + street similar + same email) trgm_pg is installed');
+}else{
+ is(scalar @{ $fuzzy_customers }, 3, 'found 3 matching customers (zipcode equal + %street% + same email) trgm_pg is not installed, could be 4 with trgm_pg');
+}
is($shop->description , 'testshop' , 'shop description ok');
is($shop_order->shop_id , $shop->id , "shop_id ok");
note('testing convert_to_sales_order');
-my $order = $shop_order->convert_to_sales_order(employee => $employee, customer => $customer);
+my $order = $shop_order->convert_to_sales_order(employee => $employee, customer => $customer, transdate => $shop_order->order_date);
$order->calculate_prices_and_taxes;
$order->save;