Hi guys,
I've been fiddling with Perl for the past 2months and still I have difficulty with it, I've read 3books already but I'm kinda in the deep end cause I'm in a working environment. I'm currently working on this:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
#all variables starting with 'i' are inputs from a seperate screen
require cfg ; #module specifiying frequently used paths
if ($local eq 'n') {
use lib "/home/gevens/cgi-bin/ecco/modules" ;
use lib "/home/gevens/cgi-bin/ecco/html/agent" ;
}
else
{
use lib "C:/Program Files/Apache Group/Apache2/cgi-bin/ecco/modules" ;
use lib "C:/Program Files/Apache Group/Apache2/cgi-bin/ecco/html/agent" ;
}
use Fcntl qw(:flock); #CPAN Modules
use Date::Calc qw(:all);
use CGI::Minimal;
use CGI::Carp qw(fatalsToBrowser);
use Mail::Sendmail;
use MIME::Base64;
#------------------------------------------------------------------------------------------
$title = "RATES CHECK SPREADSHEET";
#------------------------------------------------------------------------------------------
if (($username ne '000') #agent sign-ons
and ($username ne '001')) {
exit;
}
$q = CGI::Minimal -> new();
$action = $q -> param('action') || ''; #input action
$iregionall = $q -> param('iregionall') || ''; #input region
$iselldd = $q -> param('iselldd') || ''; #input sell date
$isellmm = $q -> param('isellmm') || ''; #input sell month
$isellyy = $q -> param('isellyy') || ''; #input sell year
$istartdd = $q -> param('istartdd') || ''; #input start date
$istartmm = $q -> param('istartmm') || ''; #input start month
$istartyy = $q -> param('istartyy') || ''; #input start year
$ienddd = $q -> param('ienddd') || ''; #input end date
$iendmm = $q -> param('iendmm') || ''; #input end month
$iendyy = $q -> param('iendyy') || ''; #input end year
($iregion, $ifoldern) = split (/\:/, $iregionall) ; #split the inout region and folder by ':'
$iregion_selected = $iregion;
$isellccyymmdd = "20$isellyy$isellmm$iselldd"; #input sell date
$istartccyymmdd = "20$istartyy$istartmm$istartdd"; #input start date
$iendccyymmdd = "20$iendyy$iendmm$ienddd"; #input end date
$filename = "RATES-$iregion.CSV"; #specifying the region file and thus providing the output for the spreadsheet
$filename2 = "RATES-$iregion-SUPP.CSV";
#------------------------------------------------------------------------------------------
&today; #sub-routine calculating dates
if ($action eq "") { #if form blank leave message
$iselldd = $now_dd; #PLEASE ENTER DETAILS
$isellmm = $now_mm;
$isellyy = $now_yy;
$istartdd = 'dd' ;
$istartmm = 'mm' ;
$istartyy = 'yy' ;
$ienddd = 'dd' ;
$iendmm = 'mm' ;
$iendyy = 'yy' ;
$msg = "PLEASE ENTER DETAILS";
&screen1;
}
if ($action eq "sprdsht5") { #if statement when form is completed, input action = sprdsht 5 yields true
&check_fields ; #calls sub-routine checking fields
&load_suppliers ; #calls sub-routine loading suppliers
&read_tariff1 ; #calls sub-routine reading tarrifs
&print_array; #calls sub-routine printing sorted array
&email1; #calls e-mail sub-routine that defines e-mail content
$msg = "THE SPREADSHEET HAS BEEN EMAILED TO YOU...";
&screen1; #sub-routine calling module with HTML content
}
exit;
#------------------------------------------------------------------------------------------
sub check_fields {
#------------------------------------------------------------------------------------------
$error = "";
&dcheck("SELL FROM DATE", "$iselldd", "$isellmm", "$isellyy");
&dcheck("FROM DATE", "$istartdd", "$istartmm", "$istartyy");
&dcheck("TO DATE", "$ienddd", "$iendmm", "$iendyy");
if ($error){ $msg = $error ; &screen1 ; exit; }
#------------------------------------------------------------------------------------------
}
#------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------
sub push_the_first_array {
#------------------------------------------------------------------------------------------
&prices1; #sub-routine containing price calculations
#print "<BR>$tcode - $tariff1{$tcode},$tariff2{$tcode},$tariff3{$tcode},$tariff4{$tcode},$thotel";
if (lc $tptnr eq 'bbb') {
$sort_key_tptnr = 'AAA' ;
}
else
{
$sort_key_tptnr = 'ZZZ' ;
}
$sort_key = "$tstartccyymmdd$tendccyymmdd$troomtyp$tstaymin$sort_key_tptnr" ;
#print "<BR>$sort_key";
if ($tmaxchd > 1) {
$print_tshareage = "($tshareage)";
}
else
{
$print_tshareage = "";
}
$sort_line = "$tariff1{$tcode},$tariff2{$tcode},$tariff3{$tcode},$tariff4{$tcode},$thotel,$sort_key,$tstartccyymmdd,$tendccyymmdd,$troomtyp,$tminocc,$tmaxadu,$tmaxchd $print_tshareage,$tminage,$tstaymin,$tstaymax,$tntsfree,$sgl_room_ttl,$dbl_room_ttl,$tpl_room_ttl,$qad_room_ttl,$qin_room_ttl,$sex_room_ttl,$tchdpola,$cha_room_ttl,$tchdpolb,$chb_room_ttl,$tchdpolc,$chc_room_ttl,$tsellcur,$twkend,$tcode,$tpricenote";
#print "<BR> $sort_line";
push @thearray, $sort_line;
&print_hotel_details;
#------------------------------------------------------------------------------------------
}
#------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------
sub print_array {
#------------------------------------------------------------------------------------------
$print_S1FILE .= "REGION:$ifoldern, DATE RANGE:$istartdd.$istartmm.$istartyy - $ienddd.$iendmm.$iendyy,\n";
$print_S1FILE .= "Start Date,End Date,Room Type,Stay,Min Occ,Max Adult,Max Child,Min Age,Min Stay,Max Stay,Free Nts,Sell Curr,Dbl/Twn,Single,Triple,Quad,Quin,Sext,Child Policy A,Child Supp A,Child Policy B,Child Supp B,Child Policy C,Child Supp C,Note,\n" ;
@sorted1 = sort @thearray;
foreach $array1line (@sorted1) {
($sort_stariff1,$sort_stariff2,$sort_stariff3,$sort_stariff4,$sort_hotel,$sort_key,$sort_start,$sort_end,$sort_roomtyp,$sort_minocc,$sort_tmaxadu,$sort_tmaxchd,$sort_minage,$sort_tstaymin,$sort_tstaymax,$sort_freents,$sort_sgl_room_ttl,$sort_dbl_room_ttl,$sort_tpl_room_ttl,$sort_qad_room_ttl,$sort_qin_room_ttl,$sort_sex_room_ttl,$sort_tchdpola,$sort_cha_room_ttl,$sort_tchdpolb,$sort_chb_room_ttl,$sort_tchdpolc,$sort_chc_room_ttl,$sort_tsellcur,$sort_twkend,$sort_tcode,$sort_tpricenote) = split(/\,/, $array1line);
$test = "$sort_hotel$sort_roomtyp$sort_start$sort_tstaymin$sort_twkend";
unless ($done{$test}) {
&print_it_out ;
$done{$test} = 'y' ;
}
}
#------------------------------------------------------------------------------------------
}
#------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------
sub print_it_out {
#------------------------------------------------------------------------------------------
#print "<BR>************* $sort_stariff1,$sort_stariff2,$sort_stariff3,$sort_stariff4,$sort_hotel,$sort_key,$sort_start";
if ($header1 ne $sort_stariff1) {
$print_S1FILE .= "\n$sort_stariff1\n";
$header1 = $sort_stariff1;
}
if ($header2 ne $sort_stariff2) {
$print_S1FILE .= "\n$sort_stariff2\n";
$header2 = $sort_stariff2;
}
if ($header3 ne $sort_stariff3) {
$print_S1FILE .= "$sort_stariff3\n";
$header3 = $sort_stariff3;
}
if ($header4 ne "$sort_hotel-$sort_stariff4") {
$print_S1FILE .= "$sort_hotel\n";
$header4 = "$sort_hotel-$sort_stariff4";
$current_date_start = ' ';
$current_date_end = ' ';
}
if ($current_date_start ne $sort_start) {
$current_date_start = $sort_start;
$print_date_start = substr($sort_start,6,2) . "." . substr($sort_start,4,2) . ".". substr($sort_start,2,2);
}
else
{
$print_date_start = ' ';
}
if ($current_date_end ne $sort_end) {
$current_date_end = $sort_end;
$print_date_end = $sort_end;
$print_date_end = substr($sort_end,6,2) . "." . substr($sort_end,4,2) . ".". substr($sort_end,2,2);
}
else
{
$print_date_end = ' ';
}
if ($sort_twkend) {
$twkend = $sort_twkend ; # use $twkend just for the purpose of calling &twkend to get $wkend_name for printing
&twkend ;
# $sort_roomtyp = "$sort_roomtyp - $wkend_name" ;
}
if (lc $sort_tchdpola eq 'n/a') {
$print_tchdpola = $sort_tchdpola ;
}
else
{
if ($sort_tchdpola eq $sort_tchdpolb) {
$print_tchdpola = "First ($sort_tchdpola)";
}
else
{
$print_tchdpola = "($sort_tchdpola)";
}
}
if (lc $sort_tchdpolb eq 'n/a') {
$print_tchdpolb = $sort_tchdpolb ;
}
else
{
if ($sort_tchdpola eq $sort_tchdpolb) {
$print_tchdpolb = "Second ($sort_tchdpolb)";
}
else
{
$print_tchdpolb = "($sort_tchdpolb)";
}
}
if (lc $sort_tchdpolc eq 'n/a') {
$print_tchdpolc = $sort_tchdpolc ;
}
else
{
$print_tchdpolc = "($sort_tchdpolc)" ;
}
$print_S1FILE .= "$print_date_start,$print_date_end,$sort_roomtyp,$wkend_name,$sort_minocc,$sort_tmaxadu,$sort_tmaxchd,$sort_minage,$sort_tstaymin,$sort_tstaymax,$sort_freents,$sort_tsellcur,$sort_dbl_room_ttl,$sort_sgl_room_ttl,$sort_tpl_room_ttl,$sort_qad_room_ttl,$sort_qin_room_ttl,$sort_sex_room_ttl,$print_tchdpola,$sort_cha_room_ttl,$print_tchdpolb,$sort_chb_room_ttl,$print_tchdpolc,$sort_chc_room_ttl,$sort_tpricenote,\n" ;
$wkend_name = '' ; # use $twkend just for purpose of calling &twkend and printing - now it needs to be reset to blank (used for printing only)
#------------------------------------------------------------------------------------------
}
#------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------
sub read_tariff1 {
#------------------------------------------------------------------------------------------
$tariff1file = "$hotelpath/$iregion/$tariff1"; #defines the tarrif file
#print "<BR>-$tariff1file---";
open (H1FILE, "$tariff1file") ; #opens the tarrif file
if ($local eq 'n') { flock (H1FILE, LOCK_SH) or die "can't lock $tariff1file: $!"; } #file locked if program is run
while (<H1FILE>) { #starts the loop while file is opened:
chomp; #chomps the file by lines
@linex = split(/\,/); #split lines by slashes putting each line in an array
&tfields; #module with sub-routine with fields of tarrif file
$tcode = lc $tcode; #put codes in lower-case
&date_range_check ; #check the date range
}
close (H1FILE); #close the FILE
#------------------------------------------------------------------------------------------
}
#------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------
sub date_range_check {
#------------------------------------------------------------------------------------------
$tsellfccyymmdd = "20$tsellfyymmdd" ; #add the 20 in front of the date
$tselltccyymmdd = "20$tselltyymmdd" ;
$tstartccyymmdd = "20$tstartyymmdd" ;
$tendccyymmdd = "20$tendyymmdd" ;
if (($isellccyymmdd < $tsellfccyymmdd) or ($isellccyymmdd > $tselltccyymmdd)) { return ; }
if ($tptnr) {
if (lc $tptnr ne 'flc') { return ; } #defines the partner logged on
}
if ((($istartccyymmdd >= $tstartccyymmdd) and ($istartccyymmdd <= $tendccyymmdd)) #if input date is >= input start and tour start and input end <= tour end
or (($tstartccyymmdd >= $istartccyymmdd) and ($iendccyymmdd >= $tstartccyymmdd))) { #or tour start date >= input start and input end <= tarrif start
&push_the_first_array ; #call sub-routine
}
#------------------------------------------------------------------------------------------
}
#------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------
sub print_hotel_details {
#------------------------------------------------------------------------------------------
unless ($done_address{$tcode} eq 'y') {
$print_canxpol = '';
&canxpol($sbillcode{$tcode},'flc',$istartdd,$istartmm) ;
$print_S2FILE .= "$thotel ($sstar{$tcode}) , Address : ,$sadd1{$tcode}, $sadd2{$tcode}, $sadd3{$tcode}, $sadd4{$tcode}, $spcode{$tcode}, $sctry{$tcode}\n";
$print_S2FILE .= ", Phone : ,$sphone{$tcode},\n";
$print_S2FILE .= ", Fax : ,$sfax{$tcode},\n";
$print_S2FILE .= ", Child Policy :, $snote{$tcode}\n";
$print_S2FILE .= ",$print_canxpol\n";
$print_S2FILE .= "\n";
$done_address{$tcode} = 'y';
}
#------------------------------------------------------------------------------------------
}
#------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------
sub screen1 {
#------------------------------------------------------------------------------------------
require flcsprdsht5 ;
exit;
#------------------------------------------------------------------------------------------
}
#------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------
sub load_suppliers {
#------------------------------------------------------------------------------------------
$supplier1file = "$supplierpath/$iregion/suppliers.csv";
open (S1FILE, "$supplier1file") ;
if ($local eq 'n') { flock (S1FILE, LOCK_SH) or die "can't lock $supplier1file: $!"; }
while (<S1FILE>) {
chomp;
@linex = split(/\,/);
&sfields;
$lc_scode = lc $scode;
# $name{$lc_scode} = $sname;
$tariff1{$lc_scode} = $stariff1;
$tariff2{$lc_scode} = $stariff2;
$tariff3{$lc_scode} = $stariff3;
$tariff4{$lc_scode} = $stariff4;
$sstar{$lc_scode} = $sstar;
$sadd1{$lc_scode} = $sadd1;
$sadd2{$lc_scode} = $sadd2;
$sadd3{$lc_scode} = $sadd3;
$sadd4{$lc_scode} = $sadd4;
$spcode{$lc_scode} = $spcode;
$sphone{$lc_scode} = $sphone;
$sfax{$lc_scode} = $sfax;
$sctry{$lc_scode} = $sctry;
$sbillcode{$lc_scode} = $sbillcode;
$snote{$lc_scode} = $snote;
}
close (S1FILE);
#------------------------------------------------------------------------------------------
}
#------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------
sub email1 {
#------------------------------------------------------------------------------------------
if ($local eq 'y') {
open(MAIL,">$mailprog") or die "opening $mailprog failed: $!";
}
else
{
open(MAIL,"|$mailprog -t") or die "opening $mailprog failed: $!";
}
my $boundary = "====" . time() . "====";
print MAIL "To: asamsodien\@eccotours.biz\n";
#print MAIL "To: tim.winkworth\@flightcentre.co.uk\n";
print MAIL <<ENDOFTEXT;
From: Website <website\@domian.biz>
Subject: Rates Check Spreadsheet - $ifoldern
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="$boundary"
--$boundary
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Hi $username,
Here is the information that you requested from the website.
--$boundary
Content-Type: application/octet-stream; name="Rates-$iregion.csv" #calls the input region thus printing the tarrif file of
#specified region that has been input in the screen file
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="Rates-$iregion.csv"
$print_S1FILE
--$boundary
Content-Type: application/octet-stream; name="Suppliers-$iregion.csv" #reads supplier file and spits out the contact details
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="Suppliers-$iregion.csv"
$print_S2FILE
--$boundary--
ENDOFTEXT
close (MAIL);
#------------------------------------------------------------------------------------------
}
#------------------------------------------------------------------------------------------
use canxpol; #module with cancellation policy
use twkend;
use sfields; #module defining supplier.CSV file into recognizable variables
use tfields; #module with tarrif fields defined as recognizable variables
use fchecks;
use dcheck; #checks dates
use today; #prints todays date
use prices1;
exit;
I need to call a another CSV file by maipulating this one in order to spit out data that'll just be from the specified CSV fiile the problem lies at the top of the code where the $iregion is defined as the input and ultimately output. I need to determine a way to call the other CSV file instead of the one called $iregion. Our coder of this is on leave so I couldn't get an answer from him. I know this prob looks and sounds confusing but can anyone help me in terms of where to start, I'm really frustrated :(