Line # Revision Author
1 198 ahitrov package webshop::Address;
2
3 use Contenido::Globals;
4 use base "Contenido::Document";
5 sub extra_properties
6 {
7 return (
8 { 'attr' => 'status', 'type' => 'status', 'rusname' => 'Статус заказа',
9 'cases' => [
10 [0, 'Дополнительный адрес'],
11 [1, 'Основной адрес'],
12 ],
13 },
14 { 'attr' => 'delivery', 'type' => 'lookup', 'rusname' => 'Тип доставки',
15 'lookup_opts' => {
16 'class' => 'webshop::Delivery',
17 },
18 },
19 { 'attr' => 'name', 'type' => 'string', 'rusname' => 'Контактное лицо' },
20 259 ahitrov { 'attr' => 'phone', 'type' => 'string', 'rusname' => 'Телефон для связи',
21 mandatory => 1, rel => 'Не указан телефон' },
22 { 'attr' => 'zipcode', 'type' => 'string', 'rusname' => 'Почтовый индекс',
23 mandatory => 1, rel => 'Не указан почтовый индекс' },
24 { 'attr' => 'area', 'type' => 'lookup', 'rusname' => 'Регион',
25 lookup_opts => { class => 'webshop::Area', order_by => 'name' },
26 allow_null => 1, mandatory => 1, rel => 'Не выбран регион'
27 },
28 { 'attr' => 'town_id', 'type' => 'lookup', 'rusname' => 'Город',
29 lookup_opts => { class => 'webshop::Town', order_by => 'name' },
30 allow_null => 1, mandatory => 1, rel => 'Не выбран город'
31 },
32 { 'attr' => 'town', 'type' => 'string', 'rusname' => 'Город',
33 mandatory => 1, rel => 'Не указан город' },
34 198 ahitrov { 'attr' => 'metro', 'type' => 'string', 'rusname' => 'Ближайшее метро' },
35 259 ahitrov { 'attr' => 'address', 'type' => 'text', 'rusname' => 'Адрес доставки', rows => 5,
36 mandatory => 1, rel => 'Не заполнен адрес доставки' },
37 { 'attr' => 'timeline', 'type' => 'string', 'rusname' => 'Предпочтительное время',
38 mandatory => 1, rel => 'Вы не указали предпочтительное время получения заказа' },
39 198 ahitrov { 'attr' => 'description', 'type' => 'text', 'rusname' => 'Описание для курьера', rows => 5 },
40 )
41 }
42
43 sub class_name
44 {
45 259 ahitrov return 'Webshop: адрес доставки';
46 198 ahitrov }
47
48 sub class_description
49 {
50 259 ahitrov return 'Webshop: адрес доставки';
51 198 ahitrov }
52
53 sub class_table
54 {
55 return 'webshop::SQL::AddressTable';
56 }
57
58 416 ahitrov sub as_string
59 {
60 my ($self, %opts) = @_;
61 my $areas = delete $opts{areas};
62
63 my @string;
64 push @string, $self->name if $self->name;
65 push @string, $self->zipcode if $self->zipcode;
66 if ( $self->area ) {
67 if ( ref $areas ) {
68 push @string, $areas->{$self->area}->name if exists $areas->{$self->area};
69 } else {
70 my $area = $self->keeper->get_document_by_id( $self->area, class => 'webshop::Area' );
71 push @string, $area->name if ref $area;
72 }
73 }
74 push @string, $self->town if $self->town;
75 push @string, $self->address if $self->address;
76 return join(', ', @string);
77 }
78
79 259 ahitrov sub pre_store
80 {
81 my $self = shift;
82
83 if ( $self->town_id && !$self->town ) {
84 my $town = webshop::Town->new( $keeper, $self->town_id );
85 if ( ref $town ) {
86 $self->town( $town->name );
87 }
88 }
89
90 return 1;
91 }
92
93 198 ahitrov 1;