以编程方式管理时间的“平衡”(生病/休假)

时间:2010-08-27 14:57:33

标签: python django database-design date time

我正在使用Python / Django,但这更多是关于“数据模型”以及我如何与信息交互 - 我真的只是想知道我是否在这里疯狂。

我正在为我公司的一个小应用程序(约55名员工)工作,这将跟踪可用的假期/病假时间。部分目的是将“自助服务”整合到我们的内联网中,以便员工可以通过电子方式提交“休假请求”,而不是填写并向人力资源部提交纸质。

显然,这个应用程序需要保持每个员工的运行余额,并且将验证员工是否有足够的休假时间用于他们请求的任何内容。

与财务/会计软件一样,我知道我不一定要存储浮动值,或者只保留一个运行余额。

我的想法是使用如下的数据库表结构来存储时间“信用”和“借记”:

Employee | Year | Credit/Debit | Amount | Timestamp

'年'将是信用卡/借记卡所属的年份,因为假期和病假时间每年处理一次,每个员工的运行余额。

要确定员工可用的假期/病假时间,我会获得给定年份的员工的“交易”,并找到余额。

我知道我遗漏了很多信息,但我想知道:这看起来是一种合理的解决方法,因为它需要非常准确,我完全过于复杂了吗?

4 个答案:

答案 0 :(得分:2)

如果您认为您的解决方案很复杂,那就不是了。将病假/休假日建模为与员工关联的帐户是一个非常好的主意,并且可能很容易。

在最简单的情况下,您可以拥有“交易”表和“帐户”表,以便从年初(对于每个帐户)重新运行所有交易将产生完全匹配的总和余额。

  

交易

     

ID |帐户|达美|时间戳

     

帐户

     

ID |名称|员工|年|平衡

交易提供审计跟踪,余额为您的下一个交易提供参考点。通过确保两者匹配,您已确保一致性(但不一定正确 - 必须通过对每种交易类型的单元测试进行检查,即存款,取款)

我建议使用一个“交易明细”表来引用Transactions.ID,并包含你想要的所有好东西,如谁发起它,备注等。

答案 1 :(得分:0)

这看起来是一个好的开始。几点:

  • 系统将在年初自动生成积分,并由员工创建借方。是否应该有一个字段来指示创建交易的人/是什么?

  • 您是否有机制来指示请求种类的时间?我不知道贵公司是什么样的,但有些公司对假期和生病时间的看法不同。然后还有照顾者的时间,因慈悲理由而休假(例如亲戚死亡),公民假期和法定假日休假,宗教节假日休假,休息时间......你明白了。也许你想要不同类型的休假值得不同的信用额度。一些组织这样做。您是否计划跟踪这些不同的休假代码?如果您认为将来会成为一个问题,那么您应该为此计划吗?

答案 2 :(得分:0)

我也同意这是一个好的开始。

我没有看到任何要批准/拒绝的字段。如果此应用程序也可供人力资源部门使用,那么他们的决策也需要在您的模型中表达。

如果从图片中取出人力资源(我怀疑,但也许),那么就没有必要这样做了;应用程序可以跟踪请求和休假余额,并立即说明请求是否有效。但我怀疑它不能这么简单。 :)

答案 3 :(得分:0)

How have getting balance Debit-Credit for  running balamace ACCESS DATABASE
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@page import="java.sql.*"%>
<%@ page import="java.util.Calendar" %>
<%
//java Code
String date = (new java.util.Date()).toString();
String UserName = request.getParameter("UserName");
String CusId= request.getParameter("CusId");
String AccountNo = request.getParameter("AccountNo");
String Debit = request.getParameter("Debit");
String Credit=request.getParameter("Credit");
String Balance=request.getParameter("Balance");
String sDate=request.getParameter("sDate");
try
{
String s="jdbc:odbc:Database1";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection(s);
Statement smt=conn.createStatement();
Calendar calendar = Calendar.getInstance();
java.sql.Date startDate = new java.sql.Date(calendar.getTime().getTime());
String sql= "SELECT  sDate, (SUM(Debit)*-1) + SUM(Credit)Balance FROM abcbank GROUP BY  sDate";
ResultSet result = smt.executeQuery(sql);
int count = 0;
while (result.next())
{
result.getString(1,"Debit");
result.getString(2,"Credit");
result.getString(3,"Balance");
result.getDate(4,startDate);

}

String update= "UPDATE abcbank SET Balance =Debit + Balance   WHERE AccountNo="+AccountNo+" ";
PreparedStatement statement = conn.prepareStatement(update);
//statement.setString(1,"AccountNo");
int rowsUpdated = statement.executeUpdate();
if (rowsUpdated ==0)
{
out.println("This Emp does not Exists!");
}
else if(rowsUpdated ==1)
{
out.println("An existing user was updated successfully!");
}
conn.close();
}
catch(Exception ex)
{
System.err.println(ex.getMessage());
  }

%>
</body>
</html>