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 544 ahitrov { 'attr' => 'carrier', 'type' => 'string', 'rusname' => 'Транспортная компания' },
35 198 ahitrov { 'attr' => 'metro', 'type' => 'string', 'rusname' => 'Ближайшее метро' },
36 259 ahitrov { 'attr' => 'address', 'type' => 'text', 'rusname' => 'Адрес доставки', rows => 5,
37 mandatory => 1, rel => 'Не заполнен адрес доставки' },
38 { 'attr' => 'timeline', 'type' => 'string', 'rusname' => 'Предпочтительное время',
39 mandatory => 1, rel => 'Вы не указали предпочтительное время получения заказа' },
40 198 ahitrov { 'attr' => 'description', 'type' => 'text', 'rusname' => 'Описание для курьера', rows => 5 },
41 )
42 }
43
44 sub class_name
45 {
46 259 ahitrov return 'Webshop: адрес доставки';
47 198 ahitrov }
48
49 sub class_description
50 {
51 259 ahitrov return 'Webshop: адрес доставки';
52 198 ahitrov }
53
54 sub class_table
55 {
56 return 'webshop::SQL::AddressTable';
57 }
58
59 416 ahitrov sub as_string
60 {
61 my ($self, %opts) = @_;
62 my $areas = delete $opts{areas};
63
64 my @string;
65 push @string, $self->name if $self->name;
66 push @string, $self->zipcode if $self->zipcode;
67 if ( $self->area ) {
68 if ( ref $areas ) {
69 push @string, $areas->{$self->area}->name if exists $areas->{$self->area};
70 } else {
71 my $area = $self->keeper->get_document_by_id( $self->area, class => 'webshop::Area' );
72 push @string, $area->name if ref $area;
73 }
74 }
75 push @string, $self->town if $self->town;
76 push @string, $self->address if $self->address;
77 return join(', ', @string);
78 }
79
80 259 ahitrov sub pre_store
81 {
82 my $self = shift;
83
84 if ( $self->town_id && !$self->town ) {
85 my $town = webshop::Town->new( $keeper, $self->town_id );
86 if ( ref $town ) {
87 $self->town( $town->name );
88 }
89 }
90
91 return 1;
92 }
93
94 198 ahitrov 1;