package Pear::LocalLoop::Command::dev_transactions; use Mojo::Base 'Mojolicious::Command'; use Mojo::Util 'getopt'; use DateTime; use DateTime::Format::Strptime; has description => 'Input Dev Transaction'; has usage => sub { shift->extract_usage }; sub run { my ( $self, @args ) = @_; getopt \@args, 'f|force' => \my $force, 'd|date=s' => \my $date, 'n|number=i' => \my $number, 'c|count=i' => \my $count; unless ( defined $force ) { say "Will not do anything without force option"; return; } if ( ( defined( $ENV{MOJO_MODE} ) && $ENV{MOJO_MODE} eq 'production' ) || $self->app->mode eq 'production' ) { say "Will not run dev data fixtures in production!"; return; } my $date_formatter = DateTime::Format::Strptime->new( pattern => '%Y-%m-%d' ); my $datetime; if ( defined $date ) { $datetime = $date_formatter->parse_datetime($date); unless ( defined $datetime ) { say "Unrecognised date format, please use 'YYYY-MM-DD' Format"; return; } } else { $datetime = DateTime->today; } my $schema = $self->app->schema; my $user_rs = $schema->resultset('User'); my $organisation_rs = $user_rs->search({ customer_id => undef }); my $dtf = $schema->storage->datetime_parser; my @organisations = $organisation_rs->all; unless ( defined $number ) { $number = 1; } unless ( defined $count ) { $count = 0; } for my $day_sub ( 0 .. $count ) { $datetime->subtract( days => 1 ); for ( 1 .. $number ) { for my $user_result ( $user_rs->all ) { $user_result->create_related( 'transactions', { seller_id => $organisations[int(rand($#organisations))]->organisation_id, value => int(rand(9999)) / 100, proof_image => 'a', purchase_time => $dtf->format_datetime($datetime->clone->add( minutes => int(rand(1440)) )), }); } } } } =head1 SYNOPSIS Usage: APPLICATION dev_transactions [OPTIONS] Options: -f, --force Actually insert the data -d, --date Date to create the transactions on =cut 1;