initial import
[Business-OnlinePayment-PPIPayMover.git] / lib / Business / OnlinePayment / PPIPayMover / TransactionRequest.pm
1 use strict;\r
2 package Business::OnlinePayment::PPIPayMover::TransactionRequest;\r
3 use Business::OnlinePayment::PPIPayMover::constants;\r
4 use Business::OnlinePayment::PPIPayMover::AdditionalField;\r
5 use Business::OnlinePayment::PPIPayMover::TransactionResponse;\r
6 1;\r
7 \r
8 sub new {\r
9   my $class = shift;\r
10   my $self = {};\r
11   $self->{AdditionalFields} = [];\r
12   $self->{strError} = "";\r
13   $self->{strParamSeparator} = "&";\r
14   \r
15   bless $self, $class;\r
16   return $self;\r
17 }\r
18 \r
19 \r
20 # *\r
21 # * A method to add a single additional field to the TransactionRequest or TransactionRequest subclass\r
22 # * (such as CreditCardRequest).\r
23 # * <P>\r
24 # * @param additionalField An AdditionalField object containing a name and a value. The name must be\r
25 # * unique. That is, one TransactionRequest object can contain only one additional field with a given name.\r
26 # * <P>\r
27 # * @see AdditionalField\r
28 # */\r
29 sub SetAdditionalField {\r
30   my $self = shift;\r
31   my $additionalField = shift; # take only one AdditionalField object arguement\r
32   foreach (@{$self->{AdditionalFields}}) {\r
33     if ($additionalField->equals($_)) {\r
34       $self->{strError} .= "TransactionRequest.setAddtionalField: name already used";\r
35       return CCR_ERROR;\r
36     }\r
37   }\r
38   ${$self->{AdditionalFields}}[$#{$self->{AdditionalFields}} + 1] = $additionalField;\r
39   return CCR_NO_ERROR;\r
40 }\r
41 \r
42 \r
43 #**\r
44 # * A method to add multiple additional fields to the TransactionRequest or TransactionRequest subclass\r
45 # * (such as CreditCardRequest).\r
46 # * <P>\r
47 # * @param additionalFields An Vector of AdditionalField objects, each containing a name and a value.\r
48 # * The parameter cannot be NULL and the Vector must be non-empty.\r
49 # * <P>\r
50 # * @see AdditionalField\r
51 # */\r
52 sub SetAdditionalFields {\r
53   my $self = shift;\r
54   my $additionalFields = shift; # take one AdditionalField array arguement\r
55   my $size = @$additionalFields;\r
56   if ($size == 0) {\r
57     $self->{strError} .= "TransactionRequest.setAdditionalFields passed empty vector";\r
58     return CCR_ERROR;\r
59   }\r
60   \r
61   foreach (@$additionalFields) {\r
62     if (defined($_)) {$self->SetAdditionalField($_)}\r
63   }\r
64   \r
65   return CCR_NO_ERROR;\r
66 }\r
67 \r
68 #**\r
69 # * A method to retrieve an additional field\r
70 # * @return Returns an AdditionalField object or NULL if name is unkown\r
71 # */\r
72 sub GetAdditionalField {\r
73   my $self = shift;\r
74   my $name = shift; # use name as arguement to get additional field arguememt\r
75   foreach (@{$self->{AdditionalFields}}) {\r
76     if ($name = $_->getName) { return $_ }\r
77   }\r
78   return undef;\r
79 }\r
80 \r
81 \r
82 #**\r
83 # * A method to retrieve a Vector of AdditionalField objects\r
84 # * @return Returns a Vector of AdditionalField objects or NULL\r
85 # */\r
86 sub GetAdditionalFields{\r
87   my $self = shift;\r
88   return @{$self->{AdditionalFields}};\r
89 }\r
90 \r
91 \r
92 #**\r
93 # * A method for Transaction Server developers that is not used by merchant developers.\r
94 # * <P>\r
95 # * This method should be overwritten by subclasses, but the subclasses\r
96 # * version of this method MUST CALL super.writeRequest(out).\r
97 # */\r
98 sub WriteRequest {\r
99   my $self = shift;\r
100   my $PostString = shift; #arguement as a pointer to string\r
101   my $size = @{$self->{AdditionalFields}};\r
102   if ($size == 0) {\r
103     return CCR_ERROR;\r
104   }\r
105   \r
106   foreach (@{$self->{AdditionalFields}}) {\r
107     if (defined($_)) {\r
108       $_->write($PostString);\r
109     }\r
110   }\r
111   return CCR_NO_ERROR;\r
112 }\r
113 \r
114 sub GetTransResponseObject {\r
115   my $self = shift;\r
116   my $InString = shift; # use one string arguement\r
117   return new Business::OnlinePayment::PPIPayMover::TransactionResponse($InString);\r
118 }\r