Здравствуйте, уважаемые разработчики!
Внимательно прочитал всю ветку, но все же не понял, как отделять "мух от котлет".
Я склонен согласиться с теми, кто предлагает отделять статус оплаты от статуса заказа. На мой взгляд, это очевидно: любой заказ на любом его этапе может быть оплачен или не оплачен. И система должна четко понимать это.
Например, в любой учетной системе, скажем в 1С:Предприятии, логика ясна: создается заказ (резерв товара на складе), затем он может быть согласован с клиентом, заказан товар у поставщика (при необходимости), товар отправляется клиенту или в пункт самовывоза, оформляется реализация товара (со списанием остатка на складе), товар может быть возвращен на склад, и т.д.
При этом оплата заказа может быть привязана к нему в любой момент: либо сразу после создания, либо перед заказом поставщику, либо перед отгрузкой, либо даже после отгрузки. И, например, в случае безнала, это вообще делает бухгалтер при разборе банковских выписок.
А еще бывает возврат оплаты...
Следуя логике, заложенной в CS-CART по умолчанию, в 1С:Предприятии должно быть так: перевод заявки клиента в какой-то непредвиденный статус, лишает его факта оплаты... Думаю, контрагенты и бухгалтерия будут не очень-то рады постоянно сверять взаиморасчеты из-за того, что кладовщик ошибся кнопочкой.
Теперь вернемся к CS-CART. Рассмотрим несколько ситуаций:
1. Клиент оформил заказ на сайте и сразу оплатил его онлайн. Выбран способ доставки - в пункт самовывоза. CS-CART проставил статус "Обработан" по факту получения заказа. Заказ скомплектован и поступил в пункт самовывоза. В админке проставляем статус "В пункте самовыовоза" (такой статус есть "из коробки"). При этом в графе "Итого оплачено" сумма уменьшается на сумму заказа (!).


Клиент посмотрел, ему товар по каким-то причинам не понравился и он от него отказался. Товар вернулся в магазин, клиент требует вернуть деньги. Вопрос: как понять, что заказ был оплачен клиентом?
2. Та же ситуация, что и в предыдущем случае, с той лишь разницей, что клиент выбрал "оплату при получении". На этапе "В пункте самовывоза" никак не отличить этот заказ от оплаченного выше.
3. Клиент покупает и оплачивает заказ по "безналу". Сразу после оплаты счета, он отправляет нам платежку, что для нас является достаточным для запуска заказа в "работу", но не дает право отдать товар клиенту, пока деньги не придут. Деньги могут прийти в любой момент, независимо от статуса заказа. Что должен сделать бухгалтер? Как проставить признак (и сумму) оплаты, не вмешиваясь в процесс формирования и сборки заказа?
4. Клиент произвел оплату заказа онлайн, выбрав доставку "почтой". Система рассчитала стоимость доставки автоматически и включила в сумму заказа. Затем, после разговора с оператором, клиент решил изменить способ доставки (не важно, на более дешевую или более дорогую). При этом возникает разница между оплаченной суммой и суммой к оплате, но как это понять, опять же неизвестно.
Мне видится самым верным решением - добавить к заказу еще одно поле с суммой оплаты. Онлайн оплата автоматически проставляет сумму в поле "Оплачено", бухгалтер - вручную по факту прихода денег. Это также решит вопросы с переплатой/недоплатой и причитающейся суммой возврата.