# Path: core/validation/permissions.py
# def check_datamine_permissions(action, document):
#     # Get datamine permissions
#     
#     try:
#         restrictions = cherrypy.session['_ts_user']['restrictions'][action]
#     except (KeyError, TypeError):
#         restrictions = None
#         
#     if not restrictions:
#         raise TSValidationError("Access to '%s' is restricted for current user" % (action))
#     elif restrictions != True:
#         validator(restrictions, format_checker=jsonschema.FormatChecker()).validate(document)
# 
# Path: core/validation/validation.py
# class TSValidationError(Exception):
#     pass
# 
# def validate_request(collection, json_in):
#     validator(requests_schema[collection], format_checker=jsonschema.FormatChecker()).validate(json_in)
# 
# def update_password_salt_user_list(collection, list_in):
#     
#     if collection == 'user':
#         for json_in in list_in:
#             update_password_salt_user_json(json_in)
#         
#     return list_in
# 
# def validate_json_list(collection, list_in):
#     
#     for json_in in list_in:    
#         # Validate json schema
#         validator(schema[collection], format_checker=jsonschema.FormatChecker()).validate(json_in)
# 
# def sanitize_objectify_json(json_in):
#     """Sanitize string and convert _ids to ObjectId in JSON"""
#     return recursive_replace(json_in, _replace_function_sanitize_objectify_json)
# 
# def stringify_objectid_cursor(cursor_in):
#     """Convert ObjectId to string in JSON"""
#     
#     stringified = []
#     for json_in in cursor_in:
#         stringified.append(recursive_replace(json_in, _replace_function_stringify_objectid_json))
#     return stringified
# 
# def stringify_objectid_list(list_in):
#     """Convert an ObjectId list to string list"""
#     return recursive_replace(list_in, _replace_function_stringify_objectid_list)
# 
# Path: core/api/crud.py
# def get(collection, criteria_projection_order):
# def remove(collection, criterias = []):
# def add(collection, documents_list):
# def update(collection, document):
# 
# Path: core/config.py



from core.validation.permissions import check_datamine_permissions
from core.validation.validation import TSValidationError, validate_request, update_password_salt_user_list, validate_json_list, sanitize_objectify_json, stringify_objectid_cursor, stringify_objectid_list
from bson.objectid import ObjectId
from core.api.crud import db
from core.config import schema
import cherrypy, logging
                     # Else, generate random expence_id             
                     expence_id = ObjectId()
                 
                 expence['_id'] = expence_id
                 
                 # Push new one, only if other elements than _id are provided
                 if len(expence.keys()) > 1:
                     db.project.update({'_id': project_id }, {'$push' : { 'expences' : expence }})

                 expences_ids.append(str(expence_id))

    return { 'ids' : expences_ids }




def search_expences(criteria):
    
    """
    Get expences
    
    POST /data/search_expences/    
    
    Expects { 'start': data, 'end': data, 'status': [ integer, integer, .. ], 'user_id': string, project_id: string, employee_id: string, 'responsible_id' : string }
    Returns { 'error' : string, 'records' : [ { }, { }, .. ]  } 
    """

    validate_request('search_expences', criteria)
    check_datamine_permissions('search_expences', criteria)
    

# Path: core/validation/permissions.py
# def check_datamine_permissions(action, document):
#     # Get datamine permissions
#     
#     try:
#         restrictions = cherrypy.session['_ts_user']['restrictions'][action]
#     except (KeyError, TypeError):
#         restrictions = None
#         
#     if not restrictions:
#         raise TSValidationError("Access to '%s' is restricted for current user" % (action))
#     elif restrictions != True:
#         validator(restrictions, format_checker=jsonschema.FormatChecker()).validate(document)
# 
# Path: core/validation/validation.py
# class TSValidationError(Exception):
#     pass
# 
# def validate_request(collection, json_in):
#     validator(requests_schema[collection], format_checker=jsonschema.FormatChecker()).validate(json_in)
# 
# def update_password_salt_user_list(collection, list_in):
#     
#     if collection == 'user':
#         for json_in in list_in:
#             update_password_salt_user_json(json_in)
#         
#     return list_in
# 
# def validate_json_list(collection, list_in):
#     
#     for json_in in list_in:    
#         # Validate json schema
#         validator(schema[collection], format_checker=jsonschema.FormatChecker()).validate(json_in)
# 
# def sanitize_objectify_json(json_in):
#     """Sanitize string and convert _ids to ObjectId in JSON"""
#     return recursive_replace(json_in, _replace_function_sanitize_objectify_json)
# 
# def stringify_objectid_cursor(cursor_in):
#     """Convert ObjectId to string in JSON"""
#     
#     stringified = []
#     for json_in in cursor_in:
#         stringified.append(recursive_replace(json_in, _replace_function_stringify_objectid_json))
#     return stringified
# 
# def stringify_objectid_list(list_in):
#     """Convert an ObjectId list to string list"""
#     return recursive_replace(list_in, _replace_function_stringify_objectid_list)
# 
# Path: core/api/crud.py
# def get(collection, criteria_projection_order):
# def remove(collection, criterias = []):
# def add(collection, documents_list):
# def update(collection, document):
# 
# Path: core/config.py



# Path: core/api/expences.py
from core.validation.permissions import check_datamine_permissions
from core.validation.validation import TSValidationError, validate_request, update_password_salt_user_list, validate_json_list, sanitize_objectify_json, stringify_objectid_cursor, stringify_objectid_list
from bson.objectid import ObjectId
from core.api.crud import db
from core.config import schema
import cherrypy, logging

                     # Else, generate random expence_id             
                     expence_id = ObjectId()
                 
                 expence['_id'] = expence_id
                 
                 # Push new one, only if other elements than _id are provided
                 if len(expence.keys()) > 1:
                     db.project.update({'_id': project_id }, {'$push' : { 'expences' : expence }})

                 expences_ids.append(str(expence_id))

    return { 'ids' : expences_ids }




def search_expences(criteria):
    
    """
    Get expences
    
    POST /data/search_expences/    
    
    Expects { 'start': data, 'end': data, 'status': [ integer, integer, .. ], 'user_id': string, project_id: string, employee_id: string, 'responsible_id' : string }
    Returns { 'error' : string, 'records' : [ { }, { }, .. ]  } 
    """

    validate_request('search_expences', criteria)
    check_datamine_permissions('search_expences', criteria)
    

    sanified_criteria = sanitize_objectify_json(criteria)