Parcourir la source

initial recycle cards working

* still need a lot of cleanup in terms of parameter checking
  and consolidation/refactoring
abetusk il y a 4 ans
Parent
commit
e2206a2d89
3 fichiers modifiés avec 186 ajouts et 12 suppressions
  1. 48 2
      main/app/routes.py
  2. 128 2
      main/app/static/js/popufare_admin.js
  3. 10 8
      main/app/templates/recycle_card.html

+ 48 - 2
main/app/routes.py

@@ -191,8 +191,6 @@ def api_card_info():
 
   args = request.args
 
-  print("....", args)
-
   if 'action' in args:
     if args['action'] == 'search':
       api_req = { "action":"search", "function":"CardInfo" }
@@ -237,11 +235,59 @@ def api_user_info():
 
   return jsonify(res)
 
+###
+###
+
 @app.route("/api/v1/Group")
 def api_group_info():
 
   return jsonify(_cache_get_group())
 
+###
+###
+
+@app.route("/api/v1/RecycleCard")
+def api_recycle_card():
+  res = {}
+  args = request.args
+
+  field_names = ["logical_card_id", "mag_token", "rfid_token", "group",
+                 "pass_rule", "pass_class", "pass_val" ]
+
+  vals = {}
+  for f in field_names:
+    if f in args:
+      vals[f] = args[f]
+
+  api_req = { "function":"RecycleCard", }
+
+  if "logical_card_id" in vals: api_req["logical_card_id"] = vals["logical_card_id"]
+  if "mag_token" in vals: api_req["mag_token"] = vals["mag_token"]
+  if "rfid_token" in vals: api_req["rfid_token"] = vals["rfid_token"]
+
+  print("approute recycle:", vals)
+
+  if "pass_rule" in vals:
+    if vals["pass_class"] == "NRIDE":
+      api_req["pass_class"] = "NRIDE"
+      api_req["nrides_orig"] = vals["pass_val"]
+      api_req["nrides_remain"] = vals["pass_val"]
+      api_req["rule"] = vals["pass_rule"]
+    elif vals["pass_class"] == "NDAY":
+      api_req["pass_class"] = "NDAY"
+      api_req["nday_orig"] = vals["pass_val"]
+      api_req["rule"] = vals["pass_rule"]
+    elif vals["pass_class"] == "OTHER":
+      api_req["pass_class"] = "OTHER"
+      api_req["rule"] = vals["pass_rule"]
+
+  print("approute recycle:", api_req)
+
+  res = api.Request(api_req)
+  return jsonify(res)
+
+###
+###
 
 @app.route("/")
 @app.route("/index")

+ 128 - 2
main/app/static/js/popufare_admin.js

@@ -162,7 +162,9 @@ function api_resp(xhr,extra) {
         }
       }
 
-      else if (extra["ui_function"] === "recycle_card.find") {
+      else if (extra["ui_function"] === "recycle_card.update") {
+
+
         if (dat["result"] === "success") {
           update_message("ui.recycle_card.message", "success", "")
           //recycle_card_fill(dat);
@@ -528,6 +530,123 @@ function manage_user_find_fill(data) {
 // --------------------------------------
 // --------------------------------------
 
+function recycle_card() {
+  var fields = [ "mag_token", "rfid_token_a", "rfid_token_b",
+                 "pass_nride_other",
+                 "pass_nday_other" ];
+  var pass = [ "none", "nride", "nday", "other" ];
+
+  var h_in = {};
+  for (var idx=0; idx<fields.length; idx++) {
+    var field = fields[idx];
+    var val = _get_input_field("ui.recycle_card." + field);
+    if (val && (val.length > 0)) { h_in[field] = val; }
+  }
+
+  var rfid_prefx = "26";
+  if (("rfid_token_a" in h_in) && ("rfid_token_b" in h_in)) {
+    h_in["rfid_token"] = rfid_prefix + ":" + h_in["rfid_token_a"] + ":" + h_in["rfid_token_b"];
+  }
+
+  var pass_kind = "none";
+  for (var ii=0; ii<pass.length; ii++) {
+    var ele = document.getElementById("ui.recycle_card.pass_" + pass[ii]);
+    if (ele.checked) {
+      pass_kind = pass[ii];
+      break;
+    }
+  }
+
+  var group = _get_select("ui.recycle_card.group");
+  var other_rule = _get_select("ui.recycle_card.pass_other_rule");
+
+  var pass_nday_type = _get_select("ui.recycle_card.pass_nday_type");
+  var pass_nday_region = _get_select("ui.recycle_card.pass_nday_region");
+  var pass_nday_quantity = _get_select("ui.recycle_card.pass_nday_quantity");
+
+  var pass_nride_type = _get_select("ui.recycle_card.pass_nride_type");
+  var pass_nride_region = _get_select("ui.recycle_card.pass_nride_region");
+  var pass_nride_quantity = _get_select("ui.recycle_card.pass_nride_quantity");
+
+
+  var dat = {
+    "api_function":"RecycleCard",
+    "ui_function":"recycle.update",
+    "data": [
+      //["mag_token",h_in["mag_token"]],
+      //["rfid_token",h_in["rfid_token"]],
+      ["group",group]
+    ]
+  };
+
+  if ("mag_token" in h_in) {
+    dat.data.push(["mag_token", h_in["mag_token"]]);
+  }
+
+  if ("rfid_token" in h_in) {
+    dat.data.push(["rfid_token", h_in["rfid_token"]]);
+  }
+
+  
+  if (pass_kind == "nday") {
+    pass_rule = group + "-NDAY";
+    dat.data.push( ["pass_rule",pass_rule ] );
+    dat.data.push( ["pass_val", pass_nday_quantity ] );
+    dat.data.push( ["pass_class", "NDAY" ] );
+  }
+
+  else if (pass_kind == "nride") {
+    pass_rule = group + "-NRIDE";
+    dat.data.push( ["pass_rule",  pass_rule ] );
+    dat.data.push( ["pass_val", pass_nride_quantity ] );
+    dat.data.push( ["pass_class", "NRIDE" ] );
+  }
+
+  else if (pass_kind == "other") {
+    pass_rule = other_rule;
+    dat.data.push( ["pass_rule", pass_rule ] );
+    dat.data.push( ["pass_class", "OTHER" ] );
+  }
+
+
+  console.log("recycle:>>>", dat);
+
+  api_req(dat);
+}
+
+function recycle_card_radio(radio_button) {
+  var _rid = ["pass_none", "pass_nride", "pass_nday", "pass_other"];
+
+  for (var ii=0; ii<_rid.length; ii++) {
+    var ele = document.getElementById("ui.recycle_card." + _rid[ii]);
+    ele.checked = false;
+  }
+
+  if (radio_button === "none") {
+    var ele = document.getElementById("ui.recycle_card.pass_none");
+    ele.checked = true;
+  }
+  else if (radio_button === "nride") {
+    var ele = document.getElementById("ui.recycle_card.pass_nride");
+    ele.checked = true;
+  }
+  else if (radio_button === "nday") {
+    var ele = document.getElementById("ui.recycle_card.pass_nday");
+    ele.checked = true;
+  }
+  else if (radio_button === "other") {
+    var ele = document.getElementById("ui.recycle_card.pass_other");
+    ele.checked = true;
+  }
+
+}
+
+// --------------------------------------
+// --------------------------------------
+// --------------------------------------
+// --------------------------------------
+// --------------------------------------
+
 function reissue_card() {
 
   var fields = [ "source_magstripe", "source_rfid_a", "source_rfid_b",
@@ -952,7 +1071,14 @@ function admin_api_init() {
   }
 
   else if (_func === "recycle_card") {
-    _attach_button( "ui.recycle_card.", reissue_card);
+    _attach_button( "ui.recycle_card.recycle", recycle_card);
+
+    _attach_button( "ui.recycle_card.pass_none", (function () { recycle_card_radio("none"); }) );
+    _attach_button( "ui.recycle_card.pass_nride", (function () { recycle_card_radio("nride"); }) );
+    _attach_button( "ui.recycle_card.pass_nday", (function () { recycle_card_radio("nday"); }) );
+    _attach_button( "ui.recycle_card.pass_other", (function () { recycle_card_radio("other"); }) );
+
+    recycle_card_radio("none");
 
     if ("logical_card_id" in _h) {
       api_req({

+ 10 - 8
main/app/templates/recycle_card.html

@@ -44,6 +44,7 @@
               </div>
             </div>
 
+            <!--
             <div class='row rowpop row-shade'>
               <div class='col-6'>Source Group</div>
               <div class='col-6'>
@@ -59,13 +60,14 @@
 
               </div>
             </div>
+            -->
 
-            <div class='row rowpop'>
+            <div class='row rowpop row-shade'>
               <div class='col-6'>Destination Group</div>
               <div class='col-6'>
 
-                <div class='input-group input-group-sm mb-3' id='ui.recycle_card.group'>
-                  <select class='custom-select'>
+                <div class='input-group input-group-sm mb-3' >
+                  <select class='custom-select' id='ui.recycle_card.group'>
                     {% for g in groups %}
                     <option id='{{ g.group_id }}'>{{ g.group_name }}</option>
                     {% endfor %}
@@ -87,7 +89,7 @@
 
         <div class='row '>
           <div class='col-6'>
-            <button type='button' class='btn btn-secondary btn-sm'>Recycle Card</button>
+            <button type='button' id='ui.recycle_card.recycle' class='btn btn-secondary btn-sm'>Recycle Card</button>
           </div>
           <div class='col-6'></div>
         </div>
@@ -180,14 +182,14 @@
             <div class='row rowpop row-shade'>
 
               <div class='col-1'>
-                <input type='radio' aria-label='initial-pass-multi-day'>
+                <input type='radio' aria-label='initial-pass-multi-day' id='ui.recycle_card.pass_nday'>
               </div>
               <div class='col-2'>Multi Day</div>
 
               <div class='col-2'>
 
                 <div class='input-group input-group-sm mb-3'>
-                  <select class='custom-select' id='ui.recycle_card.pass_nday'>
+                  <select class='custom-select' id='ui.recycle_card.pass_nday_type'>
                     <option>Adult</option>
                     <option>Half</option>
                   </select>
@@ -233,13 +235,13 @@
 
             <div class='row rowpop '>
               <div class='col-1'>
-                <input type='radio' aria-label='initial-pass-other'>
+                <input type='radio' aria-label='initial-pass-other' id='ui.recycle_card.pass_other'>
               </div>
               <div class='col-2'>Other</div>
               <div class='col-9'>
 
                 <div class='input-group input-group-sm mb-3'>
-                  <select class='custom-select' id='ui.recycle_card.pass_other'>
+                  <select class='custom-select' id='ui.recycle_card.pass_other_rule'>
                     {% for rc in cache["other_pass"] %}
                       <option id='{{ rc.rulename }}'>{{ rc.rulename }}</option>
                     {% endfor %}