%@ CodeTemplate Language="C#" TargetLanguage="Text" Description="This template demonstrates using properties defined in external assemblies." %>
<%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema"  Category="Context" Description="Database that the documentation should be based on." %>
<%@ 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 
///on <%= DateTime.Now.ToString("MM/dd/yyyy")%>
/// 
 
using System;
using DeiNiu.Utils;
using System.Data.SqlClient;
using DeiNiu.Data.BaseObject;
using System.Data;
namespace DeiNiu.wms.Data.Model
{
	#region <%= getObjClassName() %>_Imp	
	[Serializable]  class  <%= getObjClassName() %>_Imp: BaseModel_Imp{
 
        protected override void datarowToModel(DataRow dr, BaseModel obj)
           { 
             if (dr != null  )
             {
                  <%= getObjClassName() %>  tmpObj = (<%= getObjClassName() %>)obj;     
                  <% foreach (ColumnSchema column in this.SourceTable.Columns) { %>     
                        if (dr.Table.Columns.Contains("<%= column.Name.ToString() %>") && !(dr["<%= column.Name.ToString() %>"] is DBNull))
                            {
                                tmpObj.<%= column.Name.ToString().ToUpper().Equals("ID") ? column.Name.ToString().ToUpper() : "_"+ column.Name %> = <% if(column.DataType.ToString().Equals("String") || column.DataType.ToString().Equals("AnsiString") || column.DataType.ToString().Equals("DateTime")  || column.DataType.ToString().Equals("Date") ) {%> dr["<%= column.Name.ToString() %>"].ToString() <% } else {%>  Convert.To<%= column.DataType %>(dr["<%= column.Name.ToString() %>"].ToString()); <% } %>;
                            }
                  <%  
                    } 
                  %>  
             }
          }
        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"; 
                 _strSql = "delete from dbo.<%= getTableName() %>  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() %>  WHERE DR =1 ";
                     if (this.rownumEnd >0 )
                    {
                        _strSql = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY ID DESC) as sortNo FROM dbo.<%= getTableName()%> WHERE DR =1 )AS SORTEDTB WHERE DR =1 AND sortNo BETWEEN @START AND @END";
                    }
                    _strSql += ";SELECT COUNT(*) FROM <%= getTableName() %>  WHERE DR =1";
					break;
                case (int)op_flag.queryActived:
                    _strSql = "SELECT * FROM dbo.<%= getTableName() %>   WHERE DR =1";
                    _strSql += ";SELECT COUNT(*) FROM <%= getTableName() %>  WHERE DR =1";
					break;
				 case (int)op_flag.getPk:
                    _strSql = "SELECT MAX(ID)  FROM dbo.<%= getTableName() %>   WHERE DR =1";
					break;
                 case (int) op_flag.getCount:
                _strSql = "SELECT COUNT(*) FROM <%= getTableName() %>  WHERE DR =1";
                break;
            }          
            oraCmd.CommandText = _strSql;
            fillParameters(oraCmd,tmpObj);
        }
         
        private void fillParameters(SqlCommand oraCmd,   <%= getObjClassName() %>  tmpObj) {
			switch (this._op_flag) {
				case (int)op_flag.getObj:
				case (int)op_flag.delete:
                    oraCmd.Parameters.AddWithValue("@ID", tmpObj.ID);
					return;
				case (int)op_flag.getPk:
                    oraCmd.Parameters.AddWithValue("@ID", tmpObj.ID);
					return;
				case (int)op_flag.queryAll:
                 if (this.rownumEnd > 0)
                    {
                        oraCmd.Parameters.AddWithValue("@START", this._rownumStart);
                        oraCmd.Parameters.AddWithValue("@END", this._rownumEnd);
                    }
                    return;
				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) { 
                  if(!isIgnored(column)){
                      if(column.Name.ToString().ToUpper().Equals("LASTMODIFIED")){
                %> 
                      oraCmd.Parameters.AddWithValue("@<%=column.Name.ToUpper()%>", "getdate()")  ;                     
                <%  } else {%> 
                      oraCmd.Parameters.AddWithValue("@<%=column.Name.ToUpper()%>",  VerifyDbnull(tmpObj.<%="_"+ column.Name %>))  ;
                <%          
                }}  } 
                %>  
			} 
            
        protected override enumDbInstance instance
        {
            get
            {
             
                return <%=getDbInstance()%>;
            }
        }    
            
	}
	#endregion
}