%@ CodeTemplate Language="C#" TargetLanguage="Text" Description="This template demonstrates using properties defined in external assemblies." %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="The table to use for this sample." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %> 
/// 
///Data  Implemention Object 
///BASIC CRUD CLASS FOR TABLE <%=this.SourceTable.Name%>
///By wm with codesmith. 
///on <%= DateTime.Now.ToString("MM/dd/yyyy")%>
/// 
 
using System;
using Tracen.Data.BaseObject;
using Tracen.Utils;
using System.Data.SqlClient;
namespace Deiniu.Wms.Data.Model
{
	#region <%= getObjClassName() %>_Imp
	
	[Serializable]  class  <%= getObjClassName() %>_Imp : BaseModel_Imp{
	
     protected override void Assem_Model(SqlDataReader reader, BaseModel obj) {
			
			if (reader != null && !reader.IsClosed) {
			   <%= getObjClassName() %>  tmpObj = (<%= getObjClassName() %>)obj;
				if (reader.Read()) {
                <% 
                int i = 0;
                foreach (ColumnSchema column in this.SourceTable.Columns) { %>	              
                    if (!reader.IsDBNull(<%=i%>)) tmpObj._<%=column.Name %> = reader.Get<%= column.DataType %>(<%=i%>)<% if(column.DataType.ToString().Equals("DateTime")) {%>.ToString() <% } %>;                    
                <% i++;
                    } 
                %>
                reader.Close(); 
				}
			}
			
			
        }
        protected  override void CmdPrepare(SqlCommand oraCmd)  { 
             <%= getObjClassName() %>  tmpObj = (<%= getObjClassName() %>)ModelObj;
            switch (this._op_flag { 
                case (int)op_flag.add:
					 _strSql = "INSERT INTO dbo. <%= getTableName() %>(<%=getColums4Insert("")%>) VALUES(<%=getColums4Insert("@")%>)";
                    break;
                case (int)op_flag.update:
                    _strSql = "UPDATE dbo.<%= getTableName() %> SET <%= getColums4update()%>  WHERE ID = @ID";
                    break;
                case (int)op_flag.delete:
				 _strSql = "UPDATE dbo.<%= getTableName() %>  SET DR =0 WHERE ID = @ID"; 
					break;
                case (int)op_flag.getObj:
                    _strSql = "SELECT * FROM dbo.<%= getTableName() %>  WHERE ID = @ID";
                    break;
				case (int)op_flag.queryAll:
                    _strSql = "SELECT * FROM dbo.<%= getTableName() %>  ";
					break;
                case (int)op_flag.queryActived:
                    _strSql = "SELECT * FROM dbo.<%= getTableName() %>   WHERE DR =1";
					break;
				 case (int)op_flag.getPk:
                    _strSql = "SELECT MAX(ID)  FROM dbo.<%= getTableName() %>   WHERE DR =1";
					break;
            }          
            oraCmd.CommandText = _strSql;
            fillParameters(oraCmd,tmpObj);
        }
         
        private void fillParameters(SqlCommand oraCmd,  Department tmpObj) {
			switch (this._op_flag) {
				case (int)op_flag.getObj:
				case (int)op_flag.delete:
				case (int)op_flag.getPk:
                    oraCmd.Parameters.AddWithValue("@ID", tmpObj.ID);
					break;
				case (int)op_flag.queryAll:
				case 0:
			    case (int)op_flag.queryActived:
               		 return;
				case (int)op_flag.update:
                    oraCmd.Parameters.AddWithValue("@ID", tmpObj.ID);
					break;
			}
	           if ((_op_flag !=(int)op_flag.update) &&( _op_flag !=(int)op_flag.add)) return;  
                 <%   
                foreach (ColumnSchema column in this.SourceTable.Columns) { %>	    
                 oraCmd.Parameters.AddWithValue("@<%=column.Name %>",  VerifyDbnull(tmpObj._<%=column.Name %>))  ; 
                <%  
                    } 
                %>  
			} 
	}
	#endregion
}