Initial dev repository
[kcls-web.git] / js / ui / kcls / circ / selfcheck / payment.js
diff --git a/js/ui/kcls/circ/selfcheck/payment.js b/js/ui/kcls/circ/selfcheck/payment.js
new file mode 100644 (file)
index 0000000..a08d0ae
--- /dev/null
@@ -0,0 +1,120 @@
+function PaymentForm() {}\r
+var proto = (typeof(SelfCheckManager) == "undefined" ?\r
+    PaymentForm : SelfCheckManager).prototype;\r
+\r
+proto.drawPayFinesPage = function(patron, total, xacts, onPaymentSubmit) {\r
+    if (typeof(this.authtoken) == "undefined")\r
+        this.authtoken = patron.session;\r
+\r
+    dojo.query("span", "oils-selfck-cc-payment-summary")[0].innerHTML = total;\r
+\r
+       var d = new Date().getFullYear();\r
+    oilsSelfckCCNumber.attr('value', '');\r
+    oilsSelfckCCCVV.attr('value', '');\r
+    oilsSelfckCCMonth.attr('value', '01');\r
+    oilsSelfckCCYear.attr('value', d);\r
+    oilsSelfckCCFName.attr('value', patron.first_given_name());\r
+    oilsSelfckCCLName.attr('value', patron.family_name());\r
+       oilsSelfckCCYear.constraints.min=d;\r
+       oilsSelfckCCYear.constraints.max=d+10;\r
+\r
+    var addr = patron.billing_address() || patron.mailing_address();\r
+\r
+    if (typeof(addr) != "object") {\r
+        /* still don't have usable address? try getting better user object. */\r
+        fieldmapper.standardRequest(\r
+            ["open-ils.actor", "open-ils.actor.user.fleshed.retrieve"], {\r
+                "params": [\r
+                    patron.session, patron.id(), [\r
+                        "billing_address", "mailing_address"\r
+                    ]\r
+                ],\r
+                "async": false,\r
+                "oncomplete": function(r) {\r
+                    var usr = openils.Util.readResponse(r);\r
+                    if (usr)\r
+                        addr = usr.billing_address() || usr.mailing_address();\r
+                }\r
+            }\r
+        );\r
+    }\r
+\r
+    if (addr) {\r
+        oilsSelfckCCStreet.attr('value', addr.street1()+' '+addr.street2());\r
+        oilsSelfckCCCity.attr('value', addr.city());\r
+        oilsSelfckCCState.attr('value', addr.state());\r
+        oilsSelfckCCZip.attr('value', addr.post_code());\r
+    }\r
+\r
+    dojo.connect(oilsSelfckEditDetails, 'onChange',\r
+        function(newVal) {\r
+            dojo.forEach(\r
+                [   oilsSelfckCCFName,\r
+                    oilsSelfckCCLName,\r
+                    oilsSelfckCCStreet,\r
+                    oilsSelfckCCCity,\r
+                    oilsSelfckCCState,\r
+                    oilsSelfckCCZip\r
+                ],\r
+                function(dij) { dij.attr('disabled', !newVal); }\r
+            );\r
+        }\r
+    );\r
+\r
+\r
+    var self = this;\r
+    dojo.connect(oilsSelfckCCSubmit, 'onClick',\r
+        function() {\r
+            /* XXX better to replace this check on progressDialog with some\r
+             * kind of passed-in function to support different use cases */\r
+            if (typeof(progressDialog) != "undefined")\r
+                progressDialog.show(true);\r
+\r
+            self.sendCCPayment(patron, xacts, onPaymentSubmit);\r
+        }\r
+    );\r
+}\r
+\r
+// In this form, this code only supports global on/off credit card\r
+// payments and does not dissallow payments to transactions that started\r
+// at remote locations or transactions that have accumulated billings at\r
+// remote locations that dissalow credit card payments.\r
+// TODO add per-transaction blocks for orgs that do not support CC payments\r
+\r
+proto.sendCCPayment = function(patron, xacts, onPaymentSubmit) {\r
+       this.keepMeLoggedIn();\r
+    var args = {\r
+        userid : patron.id(),\r
+        payment_type : 'credit_card_payment',\r
+        payments : xacts,\r
+        cc_args : {\r
+            where_process : 1,\r
+            //type :  'MasterCard',//oilsSelfckCCType.attr('value'),\r
+            number : oilsSelfckCCNumber.attr('value'),\r
+            cvv2 : oilsSelfckCCCVV.attr('value'),\r
+            expire_year : oilsSelfckCCYear.attr('value'),\r
+            expire_month : oilsSelfckCCMonth.attr('value'),\r
+            billing_first : oilsSelfckCCFName.attr('value'),\r
+            billing_last : oilsSelfckCCLName.attr('value'),\r
+            billing_address : oilsSelfckCCStreet.attr('value'),\r
+            billing_city : oilsSelfckCCCity.attr('value'),\r
+            billing_state : oilsSelfckCCState.attr('value'),\r
+            billing_zip : oilsSelfckCCZip.attr('value')\r
+        }\r
+    }\r
+\r
+    var resp = fieldmapper.standardRequest(\r
+        ['open-ils.circ', 'open-ils.circ.money.payment'],\r
+        {params : [this.authtoken, args, patron.last_xact_id()]}\r
+    );\r
+\r
+    if (typeof(progressDialog) != "undefined")\r
+        progressDialog.hide();\r
+\r
+    if (typeof(onPaymentSubmit) == "function") {\r
+        onPaymentSubmit(resp);\r
+    } else {\r
+        var evt = openils.Event.parse(resp);\r
+        if (evt) alert(evt);\r
+    }\r
+}\r