from DepositAPI.api.Api import BaseApiView
from DepositAPI.api.Response import SuccessResponse, ErrorResponse
from DepositAPI.model.BaseModel import BaseModel
from DepositAPI.model.StoreManager import StoreManager as StoreManagerModel
from DepositAPI.libs.db.RDbSql import DbMySql


class StoreManager(BaseApiView, BaseModel):

    def aggregate_data(self, request):
        self.get_request_info(request)
        self.get_common_query_string(request)

        items, totalRow = StoreManagerModel.get_list(self, self.filter, self.quickFilter, self.sortBy, self.descending, self.rowsPerPage, self.offset)
        return SuccessResponse(
            data=items, total=totalRow, offset=self.offset, rowsPerPage=self.rowsPerPage
        )
    
    def get_item_detail(self, request, pk):
        self.get_request_info(request)

        item = StoreManagerModel.get_detail(self, pk)
        return SuccessResponse(data=item)

    def edit_data(self, request, pk):
        ret = StoreManagerModel.update(self, request, pk)
        return SuccessResponse(data=ret)

    def add_entry(self, request):
        exist_code = StoreManagerModel.get_detail_by_trancode(self, request.data['TransactionCode'])
        if exist_code == None:
            item = StoreManagerModel.insert(self, request)
            return SuccessResponse( data=item )
        
        return ErrorResponse(status=200, reason = str('Transaction code existed.'))

    def remove_entry(self, request, pk):
        item = {"status": True}
        try:
            StoreManagerModel.remove(self, pk)
        except Exception as e:
            print(e)
            item = {"status": False}
        return SuccessResponse( data=item )

    def update_multiple(self, request):
        ret = StoreManagerModel.update_multiple(self, request)
        return SuccessResponse(data=ret)