/*
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.yingzhuo.mycar.repository;
import java.util.Date;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import com.github.yingzhuo.mycar.domain.Cost;
import com.github.yingzhuo.mycar.domain.plus.CostType;
import com.github.yingzhuo.mycar.domain.plus.PaymentType;
public interface CostRepo extends JpaRepository<Cost, Integer> {
@Deprecated
@Query("from Cost c where (c.carId = ?1) and (c.date between ?3 and ?4) and (c.costType = ?2)")
public Page<Cost> findPageByCarId(Integer carId, CostType type, Date startDate, Date endDate, Pageable pageable);
@Deprecated
@Query("from Cost c where (c.car.ownerId = ?1) and (c.date between ?3 and ?4) and (c.costType = ?2)")
public Page<Cost> findPageByUserId(Integer userId, CostType type, Date startDate, Date endDate, Pageable pageable);
@Query("select c.costType from Cost c where (c.car.ownerId = ?1) group by c.costType order by count(c.costType) desc")
public List<CostType> findCostTypeByUserIdOrderByCountDesc(Integer userId);
@Query("select c.paymentType from Cost c where (c.car.ownerId = ?1) group by c.paymentType order by count(c.paymentType) desc")
public List<PaymentType> findPaymentTypeByUserIdOrderByCountDesc(Integer userId);
@Query("select sum(c.sum) from Cost c where (c.carId = ?1) and (c.date between ?2 and ?3)")
public Double findCostTotalByCarId(Integer carId, Date start, Date end);
@Query("select sum(c.sum) from Cost c where (c.car.ownerId = ?1) and (c.date between ?2 and ?3)")
public Double findCostTotalByUserId(Integer userId, Date start, Date end);
@Query("select sum(c.sum) from Cost c where (c.carId = ?1) and (c.costType = ?2) and (c.date between ?3 and ?4)")
public Double findCostTotalByCarId(Integer carId, CostType type, Date start, Date end);
@Query("select sum(c.sum) from Cost c where (c.car.ownerId = ?1) and (c.costType = ?2) and (c.date between ?3 and ?4)")
public Double findCostTotalByUserId(Integer userId, CostType type, Date start, Date end);
@Query("from Cost c where (c.carId = ?1) and c.date between ?2 and ?3")
public List<Cost> findAllByCarId(Integer carId, Date start, Date end);
@Modifying
@Query("delete Cost as c where c.carId = ?1")
public void deleteByCarId(Integer carId);
}