GAEO de お小遣い管理(4)

第1回 プロジェクト作成
第2回 共通部品とログイン画面
第3回 ユーザ登録画面
と来まして、第4回はメインのお小遣い情報管理画面「SmMain」を作ります。

お小遣い情報管理画面「SmMain」index.html

お小遣い情報の登録・一覧画面を作成します。
場所は「/application/templates/smmain/」の直下です。
入力欄と、登録分の一覧を表示します。

{% extends "../base.html" %}
{% block title %}おこづかい管理{% endblock %}
{% block content %}
<p>
  <form action="/smmain/insert" method="post">
    <fieldset>
      <select name="item">
      {% for it in itemList %}
        <option value="{{ it.itemNm }}">{{ it.itemNm }}</option>
      {% endfor %}
      </select>
      <input type="text" name="money" /><br>
      <label>メモ:</label>
      <input type="text" name="memo" /><br>
      <input type="radio" name="inout" value="0">IN
      <input type="radio" name="inout" value="1" checked>OUT
      <input type="hidden" name="allTotal" value="{{ allTotal }}">
      <input type="submit" value="登録">
    </fieldset>
  </form>
</p>
<hr>
<p>
  <a href="/items">項目編集</a> 
  <a href="/logout">logout</a>
  <Table border="1" cellpadding="2" cellspacing="0">
    <thead>
      <tr>
        <th>日付</th>
        <th>項目</th>
        <th>収入</th>
        <th>支出</th>
        <th>金額</th>
        <th>メモ</th>
      </tr>
    </thead>
    <tbody>
    {% for li in lists %}
      <tr>
        <td>{{ li.updtime|date:"Y/m/d (D) H:i" }}</td>
        <td>{{ li.item }}</td>
        {% ifequal li.inout 0 %}
        <td id="yen" name="yen">{{ li.yen }}</td>
        <td> </td>
        {% else %}
        <td> </td>
        <td id="yen" name="yen">{{ li.yen }}</td>
        {% endifequal %}
        <td id="yen" name="yen">{{ li.total }}</td>
        <td>{{ li.memo }}</td>
      </tr>
    {% endfor %}
    </tbody>
    <tfoot>
      <tr>
        <th colspan="2"> </th>
        <th colspan="2">合計</th>
        <td id="yen" name="yen">{{ allTotal }}</td>
        <td> </td>
      </tr>
    </tfoot>
  </Table>
</p>
{% endblock %}

お小遣い情報管理画面「SmMain」smmain.py

一覧の表示処理と、登録処理を作ります。
場所は「/application/controller」の直下。

# -*- coding: utf-8 -*-
import logging
from google.appengine.ext import db
from gaeo.controller import BaseController
from model.items import Items
from model.smmain import Smmain
from const import CstUserCol

class SmmainController(BaseController):
    # 表示処理
    def index(self):
        # セッションチェック
        if self.session.has_key(CstUserCol.USER_ID) is False:
            self.redirect("/logout")
        elif len(str(self.session[CstUserCol.USER_ID])) == 0:
            self.redirect("/logout")
            
        # 項目名
        self.itemList = db.GqlQuery("SELECT * FROM Items " \
                                    " WHERE userID = :1" \
                                    " ORDER BY orderNo",
                                    self.session[CstUserCol.USER_ID])
        # 出納一覧
        self.lists = db.GqlQuery("SELECT * FROM Smmain " \
                                 " WHERE userID = :1" \
                                 " ORDER BY updtime",
                                 self.session[CstUserCol.USER_ID])
        # 合計金額取得
        self.allTotal = 0
        for li in self.lists :
            if li.inout == 0 :
                self.allTotal += li.yen
            else :
                self.allTotal -= li.yen

    # 登録処理
    def insert(self):
        # セッションチェック
        if self.session.has_key(CstUserCol.USER_ID) is False:
            self.redirect("/logout")
        elif len(str(self.session[CstUserCol.USER_ID])) == 0:
            self.redirect("/logout")
                    
        # 入力値取得
        itemNM = self.params['item']
        money = self.params['money']
        text = self.params['memo']
        inOrout = self.params['inout']
        allTotal = self.params['allTotal']
        if inOrout == "1" :
            total = int(allTotal) - int(money)
        else :
            total = int(allTotal) + int(money)
            
        # データ登録
        Smmain(userID = int(self.session[cstUserCol.USER_ID]),
               item = itemNM,
               yen = int(money),
               memo = text,
               inout = int(inOrout),
               total = total
              ).put()
        
        self.redirect('/smmain')

これでお小遣い情報の登録は可能になりましたが、項目リストが空のままです。
なので、次は項目管理「Item」を作成します。


ちなみに、登録される時間はローカルの時間ではなく、GAE上での時間(アメリカ?)なので
変な時間で登録されても驚かないでくださいw
でも、せめて1ヶ月毎か1週間毎に表示するようにすれば良かったかも・・・。